[전문가를 위한 C++] 5장 : 객체지향 설계
2026. 2. 23. 23:55
5.1 절차형 사고방식
C언어에서는 프로시저를 함수라 부르지만 C는 함수형 언어가 아니다. 함수와 절차형 언어의 함수는 차이가 있으며 추상화 방식도 완전히 다르다
5.2 객체지향 철학
- 절차형 접근 방식은 '프로그램이 하는 일'을 중심으로 접근하는데 반해 객체지향 접근 방식은 '모델링하려는 현실 세계의 대상'이라는 관점에서 접근한다.
5.2.1 클래스
객체 : 어떤 클래스에 속하는 구체적인 예(인스턴스)라고 볼 수 있다.
5.2.2 컴포넌트
컴포넌트는 본질적으로 클래스와 같다. 하지만 클래스보다 작고 구체적
랜딩기어는 비행기의 컴포넌트이면서 동시에 바퀴라는 하위 컴포넌트를 가진다
5.2.3 속성
객체는 속성(property)로 구분한다.
5.2.4 동작
동작 (behavior)는 객체가 직접하거나 그 객체로 할 수 있는 일을 표현
이러한 클래스의 동작은 메서드로 구현한다
5.3 클래스 세상에 살기
5.3.1 과도한 클래스화
5.3.2 지나치게 일반화한 클래스
5.4 클래스 관계
5.4.1 has-a 관계
- A는 B를 가진다. 혹은 A에 B가 있다고 표현되는 클래스
- 현실세계의 예로 동물원과 원숭이
- has-a 관계에는 두 가지 유형이 있다.
- 집계(aggregation) : 집계된 객체는 집계를 수행한 대상이 제거되더라도 남아있다.
- 합성(composition) : 여러 객체로 구성된 객체가 제거되면 포함된 객체도 함께 사라진다.
5.4.2 is-a 관계(상속)
- is-a 관계는 OOP의 핵심이다. 그러므로 파생(deriving), 서브클래싱(subclassing), 확장(extending), 상속(inherting) 등으로 다양하게 표현된다.
1. 상속 기법
기능 추가
기능 변경
속성 추가
속성 변경
2 다형성
5.4.3 has-a 관계와 is-a 관계 구분하기

- 이 2가지 방법 중 굳이 하나를 선택해야 한다면 is-a보다 has-a를 선택해야 한다.
5.4.4 not-a 관계
- 억지로 관계를 형성하지 말고 기능 관점에서 관계를 표현핸야 한다.
5.4.5 클래스 계층
제대로 구성된 객체지향 계층은 다음과 같은 특성을 갖는다.
- 기능적으로 의미있는 관계에 따라 클래스를 구성한다.
- 공통기능을 베이스 클래스로 뽑아냈기 때문에 코드를 재사용하기 쉽다.
- 부모가 추상클래스가 아닌 이상 부모의 기능을 과도하게 오버라이딩하는 파생 클래스가 없다.
5.4.6 다중상속
다중상속이 꼭 필요할 때가 있긴 하지만 사용할 때 각별히 주의 해야 한다.
- 다중상속 관계는 시각적으로 표현하기 복잡하다.
- 다중 상속 때문에 구조의 명확성이 깨질 수 있다.
- 다중 상속은 구현하기 힘들다
5.4.7 믹스인
믹스인 클래스는 is-a 관계를 완전히 구현하지 않고도 기능을 추가할 때 사용. 일종의 공유 관계
'C++' 카테고리의 다른 글
| [전문가를 위한 C++] 7장 : 메모리 관리 (0) | 2026.02.23 |
|---|---|
| [전문가를 위한 C++] 6장 : 재사용을 고려한 설계 (0) | 2026.02.23 |
| [전문가를 위한 C++] 4장 : 전문가답게 C++ 프로그램 설계하기 (0) | 2026.02.23 |
| [전문가를 위한 C++] 3장 : 코딩 스타일 (0) | 2026.02.23 |
| [전문가를 위한 C++] 2장 : 스트링과 스트링 뷰 다루기 (0) | 2026.02.23 |



