-
Effective C++...18일지 2022. 6. 20. 08:11
클래스 설계는 타입 설계와 똑같이 취급하자
클래스 설계 시의 질문거리
C++에서 새로운 클래스를 정의하는 것은 새로운 타입을 정의하는 것과 같다.
따라서 좋은 클래스를 만들기 위해서는 좋은 타입을 만드는 것 만큼의 고민과 노력이 필요하다.
- 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 클래스 생성자 및 소멸자의 설계
- 객체 초기화는 객체 대입과 어떻게 달라야 하는가? 두 함수의 동작 및 차이점 결정
- 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가? 복사 생성자 구현
- 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가? 멤버 변수 중 어떤 값이 유효해야 하는지 결정
- 기존의 클래스 상속 계통망에 맞출 것인가? 가상 함수로 만들 것인지 여부
- 어떤 종류의 타입 변환을 허용할 것인가? 암시적 변환이 필요한지 명시적 변환이 필요한지에 따라 결정
- 어떤 연산자와 함수를 두어야 의미가 있을까? 클래스에 선언할 함수 결정
- 표준 함수들 중 어떤 것을 허용하지 말 것인가? private으로 선언할 함수 결정
- 새로운 타입의 멤버에 대한 접근권한을 어느 쪽에 줄 것인가? public/protected/private/friend의 권한 결정
- '선언되지 않은 인터페이스'로 무엇을 둘 것인가? 클래스가 안전하다고 보장할 수 있는 영역* 설정
- 새로 만드는 타입이 얼마나 일반적인가? 클래스 템플릿이 필요한 것인지 여부
- 정말로 꼭 필요한 타입인가? 굳이 클래스로 만들 필요가 있는지 여부
* 보장할 수 있는 부분은 수행 성능 및 예외 안전성 그리고 자원 사용이 있다.