카테고리 없음

[Effective C++] Item19_클래스 설계는 타입 설계와 똑같이 취급하자

해달 2018. 2. 1. 21:05

Item19_클래스 설계는 타입 설계와 똑같이 취급하자

챕터 핵심 내용

  • 클래스 설계는 타입 설계이다.

- 클래스 설계는 타입 설계이다.

  • 좋은 타입은 문법이 자연스럽고, 의미구조가 직관적이며, 효율적인 구현이 한 가지 이상 가능해야 한다.
  • 신경 써야 하는 질문들
  1. 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?

답에 따라 생성자 및 소멸자, 메모리 할당 함수 설계가 바뀐다.

  1. 객체 초기화는 객체 대입과 어떻게 달라야 하는가?

초기화와 대입을 헷갈리지 말자.

  1. 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가?

값에 의한 전달은 복사 생성자가 구현한다.

  1. 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가?

클래스의 불변속성(invariant)을 잘 파악하고, 클래스 차원에서 지켜주자.

  1. 기존의 클래스 상속 그래프에 맞출 것인가?

어떤 클래스로부터 상속 받는다면 그 기저 클래스에 의해 제약받게 된다.

  1. 어떤 종류의 타입 변환을 허용할 것인가?
  2. 어떤 연산자와 함수를 두어야 의미가 있을까?
  3. 표준 함수들 중 어떤 것을 허용하지 말 것인가?
  4. 새로운 타입의 멤버에 대한 접근권한을 어느 쪽에 줄 것인가?
  5. 선언되지 않은 인터페이스로 무엇을 둘 것인가?

우리가 만들 타입이 제공할 보장이 어떤 종류인지에 대한 질문으롯, 보장할 수 있는 부분은 수행 성능, 예외 안전성, 자원 사용이다.

  1. 새로 만드는 타입이 얼마나 일반적인가?

동일 계열의 타입군이라면 클래스 템플릿을 정의하자.

  1. 정말로 꼭 필요한 타입인가?

비멤버 함수나 템플릿을 정의할 순 없는지 고민해보자.