방프리
17.07.26. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목19) 본문
항목 19 : 클래스 설계는 타입 설계와 똑같이 취급하자
좋은 클래스를 설계할 때 다음의 사항을 고려해보는 것이 좋습니다.
(1) 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?
- 이 부분이 어떻게 되느냐에 따라 클래스 생성자 및 소멸자의 설계가 바뀝니다. 그 뿐 아니라 메모리 할당 함수를
직접 작성할 경우에는 이들 함수의 설계에도 영향을 미칩니다.
(2) 객체 초기화는 객체 대입과 어떻게 달라야 하는가?
- 각각 해당하는 함수의 호출이 다르기 때문에 초기화와 대입 간의 차이점에 대해 알고 있어야 합니다.
(3) 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가?
- 복사 생성자를 유의하고 있으면 됩니다.
(4) 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가?
- 클래스의 데이터 멤버의 몇 가지 조합 값만은 부분적으로 유효해야 합니다. 즉, 변경되서는 안된다라는 뜻인
것 같습니다.
(5) 기존의 클래스 상속 계통망(inheritance graph)에 맞출 것인가?
- 멤버 함수가 가상함수(virtual)인지 아닌지에 따라 설계법을 다르게 해야 합니다.
(6) 어떤 종류의 타입 변환을 허용할 것인가?
- 코드를 작성하다보면 어쩔 수 없이 타입 변환을 해야할 때가 있습니다. 이 때 데이터 타입을 암시적으로 할 것인지,
명시적으로 할 것인지 선택 후 그것에 맞추어 타입 변환 연산자 혹은 연산자와 비슷한 함수를 작성해야 합니다.
(7) 어떤 연산자와 함수를 두어야 의미가 있을까?
- 개발자의 몫인 것 같습니다.
(8) 표준 함수들 중 어떤 것을 허용하지 말 것인가?
- private 선언으로 된 함수가 해당됩니다.
(9) 새로운 타입의 멤버에 대한 접근권한을 어느 쪽에 줄 것인가?
- 클래스 멤버를 private, protected, public 중 어느 영역에 둘 것인가를 결정하는 것입니다.
(10) '선언되지 않은 인터페이스'로 무엇을 둘 것인가?
- 수행성능, 예외 안전성, 자원 사용 등 보장하겠다고 작성한 인터페이스들의 결과는 클래스 구현의
제약으로 작용합니다.
(11) 새로 만드는 타입이 얼마나 일반적인가?
- 타입 하나를 정의하는 것이 아닌 동일 계열의 타입군 전체를 정의하는 것이면, '새로운 클래스 템플릿'을
정의하는 것이 좋습니다.
(12) 정말로 꼭 필요한 타입인가?
- 부모클래스에서 조금의 기능 추가를 위해 자식클래스를 생성하는 것보다 비멤버함수라든지 템플릿을 몇 개
더 정의하는 것이 좋습니다.
위의 12번 항목은 이 책 뿐만 아니라 기타 게임 개발 서적에서도 많이 나오는 내용입니다. (자식 클래스가 많으면 많을수록 유지보수 및 소스 관리가 힘들어짐)
이것만은 잊지 말자!
* 클래스 설계는 타입 설계입니다. 새로운 타입을 정의하기 전에, 이번 항목에 나온 모든 고려사항을 빠짐없이 점검해 보십시오.
'C++ > Effective C++' 카테고리의 다른 글
17.08.07. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목21) (0) | 2020.01.13 |
---|---|
17.08.03. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목20) (0) | 2020.01.11 |
17.07.21. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목18) (0) | 2020.01.09 |
17.07.18. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목17) (0) | 2020.01.09 |
17.07.17. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목16) (0) | 2020.01.08 |