OOP의 5원칙과 4특성

wujin·2024년 5월 19일
post-thumbnail

'추상화의 장점이 뭘까요?'라는 질문에 자신있게 대답하지 못했다.

알고 있다고 생각했지만 대답을 잘 못했다. 그럼 모르는거다.

그래서 관련된 것들과 함께 복습겸 정리한다.


OOP(Object-Oriented Programming)

  • 객체 지향 프로그래밍
  • 프로그램을 객체라는 단위로 나누어 구성하는 방식

OOP의 5원칙 SOLID

S (SRP : Single Responsibility Principle)

  • 단일 책임 원칙
  • 한 클래스는 하나의 책임만 가져야 한다.

O (OCP : Open-Closed Principle)

  • 개방-폐쇄 원칙
  • 확장에는 열려있으나, 변경에는 닫혀있어야 한다.
  • 즉, 기존 코드를 변경하지 않고도 기능을 추가할 수 있도록 설계해야 한다.

L (LSP : Liskov Substitution Principle)

  • 리스코프 치환 원칙
  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 즉, 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.

I (ISP : Interface Segregation Principle)

  • 인터페이스 분리 원칙
  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용적인 인터페이스 하나보다 낫다.
  • 즉, 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리해야 한다.

D (DIP : Dependency Inversion Principle)

  • 의존 역전 원칙
  • 추상화에 의존한다. 구체화에 의존하면 안된다.

OOP의 4특성

1. 추상화 (Abstraction)

  • 객체의 세부 사항을 숨기고 필요한 기능을 외부에 제공하는 개념
  • 공통적인 속성과 기능을 정의하는 것
  • 추상 클래스(abstract class)와 인터페이스(interface)를 통해 구현
  • 장점
    • 코드의 중복을 줄임
    • 클래스 간 관계를 효과적으로 설정
    • 유지/보수 용이
  • 단점
    • 적절한 추상화 수준 설정이 어려움
    • 구현이 복잡해질 수 있음

2. 캡슐화 (Encapsulation)

  • 객체의 데이터를 외부에서 접근하지 못하도록 한다.
  • 객체의 내부 구현을 외부로부터 숨긴다.
  • 객체와 관련된 데이터는 메서드(getter, setter)를 통해서만 접근이 가능하다.
  • 장점
    • 데이터 보호
    • 유지보수 용이
    • 재사용성
  • 단점
    • 복잡성 증가
    • 오버헤드
  • 접근제어자
    • public : 어디서나 접근 가능
    • protected : 같은 패키지 또는 다른 패키지의 서브 클래스에서 접근 가능
    • default : 같은 패키지에서만 접근 가능
    • private : 해당 클래스에서만 접근 가능

3. 상속 (Inheritance)

  • 자식 클래스가 부모 클래스의 특성과 기능을 물려받아 재사용하고 확장하는 개념

4. 다형성 (Polymorphism)

  • 어떤 변수, 메서드가 상황에 따라 다른 결과를 내는 것
  • 주로 오버로딩과 오버라이딩을 통해 구현
  • 오버로딩(Overloading)
    • 하나의 클래스에서 메서드의 이름이 같지만, 다른 매개변수 목록을 가지도록 하는 것
  • 오버라이딩(Overriding)
    • 부모 클래스의 메서드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임

0개의 댓글