[전문가를 위한 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 관계를 완전히 구현하지 않고도 기능을 추가할 때 사용. 일종의 공유 관계

BELATED ARTICLES

more