객체지향 패러다임 이해하기 - OOP의 기본 개념과 원칙

2024. 7. 26. 18:41·개발 노트/etc.

🚀 객체지향 프로그래밍 (OOP) 및 객체지향 패러다임

💡 객체지향 프로그래밍이란?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 설계 및 개발 방법론 중 하나로, 데이터와 그 데이터를 처리하는 방법을 하나의 객체로 묶어 관리하는 방식이다. 객체지향 프로그래밍은 소프트웨어를 여러 개의 독립적인 객체들의 상호작용으로 구성한다.

📌 객체지향 프로그래밍의 주요 개념

1. 클래스와 객체

  • 클래스: 객체를 정의하는 틀 또는 설계도. 객체의 속성과 행위를 정의한다.
  • 객체: 클래스를 기반으로 생성된 실체. 클래스의 인스턴스라고도 불린다.

Car 클래스

public class Car {
    String color;
    int speed;

    void accelerate() {
        speed += 10;
    }

    void brake() {
        speed -= 10;
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.color = "red";
        myCar.accelerate();
        System.out.println("Speed: " + myCar.speed);
    }
}

출력

Speed: 10

2. 캡슐화 (Encapsulation)

  • 캡슐화는 객체의 상태를 외부에서 직접 접근하지 못하도록 하고, 객체 내부의 데이터를 보호하는 것을 의미한다. 이를 위해 접근 제어자(private, public, protected 등)를 사용한다.

Person 클래스

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(30);
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

출력

Name: John
Age: 30

3. 상속 (Inheritance)

  • 상속은 기존 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 만드는 것을 의미한다. 자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있다.

Animal 클래스

public class Animal {
    void eat() {
        System.out.println("This animal eats food.");
    }
}

Dog 클래스

public class Dog extends Animal {
    void bark() {
        System.out.println("The dog barks.");
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.eat();
        myDog.bark();
    }
}

출력

This animal eats food.
The dog barks.

4. 다형성 (Polymorphism)

  • 다형성은 같은 메서드 이름이 다양한 형태로 사용될 수 있는 것을 의미한다. 이는 메서드 오버로딩(같은 이름의 메서드를 여러 개 정의)과 메서드 오버라이딩(부모 클래스의 메서드를 자식 클래스에서 재정의)으로 구현된다.

Animal 클래스

public class Animal {
    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

Cat 클래스

public class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Meow");
    }
}

Dog 클래스

public class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Bark");
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        Animal myCat = new Cat();
        Animal myDog = new Dog();
        myCat.makeSound(); // Meow
        myDog.makeSound(); // Bark
    }
}

출력

Meow
Bark

🌟 객체지향 패러다임

객체지향 패러다임(Object-Oriented Paradigm)은 소프트웨어 설계 및 개발에서 객체라는 개념을 중심으로 프로그램을 구조화하는 방식이다. 객체지향 패러다임은 다음과 같은 원칙을 따른다:

1. 실세계 모델링

  • 객체지향 패러다임은 실세계의 개념을 객체로 모델링하여, 프로그램을 현실 세계의 개체들 간의 상호작용으로 구성한다.

2. 정보 은닉

  • 객체 내부의 데이터를 외부에서 접근하지 못하도록 하여, 데이터의 일관성을 유지하고 변경에 대한 영향을 최소화한다.

3. 메시지 전달

  • 객체는 다른 객체와 메시지를 주고받으며 상호작용한다. 이는 객체지향 패러다임에서 중요한 통신 방식이다.

4. 상속과 재사용성

  • 객체지향 패러다임은 상속을 통해 코드의 재사용성을 높이고, 새로운 기능을 추가할 때 기존 코드를 최소한으로 수정하여 확장할 수 있다.

5. 다형성과 유연성

  • 다형성을 통해 같은 인터페이스를 구현한 다양한 객체들이 동일한 메시지를 받아들일 수 있어, 시스템의 유연성을 높인다.

👍🏻 객체지향 프로그래밍의 장점

  1. 코드 재사용성: 상속을 통해 코드의 중복을 줄이고, 재사용성을 높인다.
  2. 유지보수성: 객체 단위로 코드를 관리하기 때문에 유지보수가 쉽다.
  3. 확장성: 새로운 기능을 추가할 때 기존 코드를 최소한으로 수정하여 확장할 수 있다.
  4. 모듈화: 객체 단위로 모듈화하여 복잡한 시스템을 단순화할 수 있다.

👎🏻 객체지향 프로그래밍의 단점

  1. 복잡성: 객체지향 개념을 이해하고 적용하는 데 초기 학습 곡선이 가파를 수 있다.
  2. 성능 오버헤드: 객체지향의 특징인 다형성, 캡슐화 등의 사용은 성능에 오버헤드를 발생시킬 수 있다.
  3. 설계의 어려움: 올바른 객체 모델링과 설계가 어려울 수 있다.

📝 마무리

객체지향 프로그래밍과 객체지향 패러다임은 소프트웨어 개발의 효율성과 유연성을 높이는 강력한 방법론이다. 클래스와 객체, 캡슐화, 상속, 다형성을 잘 이해하고 활용하면 유지보수가 쉽고 확장 가능한 소프트웨어를 개발할 수 있다.

 

✅ 클래스를 통해 객체를 정의하고, 객체 간의 상호작용을 통해 프로그램을 구성한다.

✅ 캡슐화를 통해 데이터의 일관성을 유지하고, 변경에 대한 영향을 최소화한다.

✅ 상속을 통해 코드의 재사용성을 높이고, 새로운 기능을 쉽게 추가할 수 있다.

✅ 다형성을 통해 시스템의 유연성을 높인다.

'개발 노트 > etc.' 카테고리의 다른 글

HTTP와 HTTPS의 차이점을 알아보자  (0) 2024.09.26
객체지향과 절차지향 무엇이 더 좋을까?  (0) 2024.07.26
Hexagonal Architecture란?  (3) 2024.07.23
유닛 테스트(Unit Test)란?  (1) 2024.07.21
SOLID 원칙: 객체 지향 프로그래밍의 5대 기본 원칙  (1) 2024.07.17
'개발 노트/etc.' 카테고리의 다른 글
  • HTTP와 HTTPS의 차이점을 알아보자
  • 객체지향과 절차지향 무엇이 더 좋을까?
  • Hexagonal Architecture란?
  • 유닛 테스트(Unit Test)란?
악덕
악덕
우당탕탕 개발 블로그
  • 악덕
    버그와 함께 춤을
    악덕
  • 전체
    오늘
    어제
    • 전체 (23) N
      • TIL (0)
      • 개발 노트 (18) N
        • Java (5)
        • JavaScript (1)
        • Spring (4)
        • Linux (1) N
        • etc. (7)
      • 문제 풀이 (0)
      • 삽질 로그 (3)
      • 기타 (2)
  • 링크

    • GitHub
    • project.zip
    • 밀로(millo)
  • 태그

    ports and adapters
    객체지향 프로그래밍
    프로그래밍
    프로그래밍언어
    i/o extended
    springboot
    macos ubuntu
    OOP
    자바기초
    invalid character found in the request target
    java
    ssl
    JPA
    gdg
    java persistence api
    solid 원칙
    자료형
    Spring Data JPA
    웹개발
    macos linux
  • hELLO· Designed By정상우.v4.10.3
악덕
객체지향 패러다임 이해하기 - OOP의 기본 개념과 원칙
상단으로

티스토리툴바