객체 지향 프로그래밍(OOP)의 4대 원리
- 캡슐화(Encapsulation)
- 상속성(Inheritance)
- 다형성(Polymorphism)
- 추상화(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를 할 수 있어야 한다
- [자식 클래스]는 [부모 클래스]할 수 있어야 한다. (A is able to B)
- Why?
- 한 가지 추상적인 개념을 구현하는데에는 여러 가지 방법이 있을 수 있다.
- ex) "자동차": 운전대, 페달, 기어, 변속기(추상 클래스)
- 각 부품의 작동 원리는 자동차 종류마다 다름
- 클래스를 사용하는 사람의 인터페이스의 사용법만 알면 됨
- (캡슐화랑 조금 비슷하긴 함)
- 한 가지 추상적인 개념을 구현하는데에는 여러 가지 방법이 있을 수 있다.
- How?
- 추상 클래스(순수 가상 함수)
캡슐화 VS 추상화
- 캡슐화 : 클래스 내에서의 추상화
- 추상화 : 클래스 간 추상화
'Programming Language > C++' 카테고리의 다른 글
[C++] 정사각형-직사각형 문제 (0) | 2024.06.28 |
---|---|
[C++] 다중 상속과 다이아몬드 문제 (0) | 2024.06.28 |
[C++] 상속에서의 형변환 - RTTI와 dynamic_cast (0) | 2024.06.28 |
[C++] 상속에서의 형변환 - 다운캐스팅 (0) | 2024.06.27 |
[C++] 상속에서의 형변환 - 업캐스팅(Upcasting) (0) | 2024.06.27 |