Programming Language/C++

[C++] 객체 지향 프로그래밍의 4대 원칙(원리)

lumana 2024. 6. 28. 16:56

객체 지향 프로그래밍(OOP)의 4대 원리

  1. 캡슐화(Encapsulation)
  2. 상속성(Inheritance)
  3. 다형성(Polymorphism)
  4. 추상화(Abstraction)

캡슐화(Encapsulation)

  • What?
    • 데이터(멤버 변수)와 기능(멤버 메서드)을 하나의 단위로 묶어 놓음
    • 데이터 은닉
      • 접근 제어를 통해 멤버 변수는 숨기고, Getter와 Setter와 같은 데이터 접근을 위한 메서드를 노출
  • When?
    • 언제든!
  • Why?
    • 클래스를 사용하는 사람은 멤버 메서드 사용법만 알면 되고, 클래스 내부 구조에 대한 이해가 필요하지 않음
      • 사용자가 데이터를 실수로 잘못 바꾸는 것을 방지
  • How?
    • 클래스 안에 멤버 변수, 멤버 메서드 선언 / 접근 제어

상속성(Inheritance)

  • What?
    • 부모 클래스의 멤버를 재사용해서 자식 클래스에서도 사용할 수 있음
  • When?
    • 부모 클래스에서 할 수 있는 일을 자식 클래스에서 할 수 있을 때 (Liskov 치환 원칙)
    • 자식 클래스는 부모 클래스의 일종이다 (A is a B)
  • Why?
    • 코드 재사용
  • How?
    • 상속!

다형성(Polymorphism)

  • What?
    • 한 클래스가 그로부터 파생된 다양한 형태를 지닐 수 있음(동적 다형성)
    • 함수 오버로딩, 템플릿(정적 다형성)
  • When?
    • 자식 클래스의 메서드 구현이 부모 클래스와 다를 때
  • Why?
    • 자식 클래스에서 하고 싶은 일들이 부모 클래스에서와 다를 수 있음
  • How?
    • 오버라이딩, 가상 함수!! (RTTI, 다형적 클래스)

추상화(Abstraction)

  • What?
    • 부모 클래스: 클래스가 구현해야 할 기능만을 명시 (순수 가상 함수)
    • 자식 클래스 : 실제 구현
  • When?
    • [자식 클래스]는 [부모 클래스]할 수 있어야 한다. (A is able to B)
      • ex): Circle이 Shape라면 Area를 구할 수 있어야 하고, Resize를 할 수 있어야 한다
  • Why?
    • 한 가지 추상적인 개념을 구현하는데에는 여러 가지 방법이 있을 수 있다.
      • ex) "자동차": 운전대, 페달, 기어, 변속기(추상 클래스)
      • 각 부품의 작동 원리는 자동차 종류마다 다름
      • 클래스를 사용하는 사람의 인터페이스의 사용법만 알면 됨
      • (캡슐화랑 조금 비슷하긴 함)
  • How?
    • 추상 클래스(순수 가상 함수)

캡슐화 VS 추상화

  • 캡슐화 : 클래스 내에서의 추상화
  • 추상화 : 클래스 간 추상화