오늘은 클래스 설계를 할 때 고려해야할 사항에 대해 알아보도록 하자.
- 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?
- 이부분이 어떻게 되느냐에 따라 클래스 생성자 및 소멸자의 설계가 바뀐다.
- 객체 초기화는 객체 대입과 어떻게 달라야 하는가?
- 각각 생성자와 대입 연산자에 의해 이루어지기 때문에 중요한 요소라 할 수 있다.
- 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가?
- 여기서 잊지말아야 할 포인트는 값에 의 한 전달을 구현하는 것은 바로 복사생성자라는 것이다.
- 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가?
- 기존의 클래스 상속 계통망에 맞출 것인가?
- 어떤 종류의 타입 변환을 허용할 것인가?
- 어떤 연산자와 함수를 두어야 의미가 있을까?
- 표준 함수들 중 어떤 것을 허용하지 말 것인가?
- private로 선언해야하는 함수일 것이다.
- 새로운 타입의 멤버에 대한 접근권한을 어느 쪽에 줄 것인가?
- 선언되지 않은 인터페이스로 무엇을 둘 것인가?
- 새로 만드는 타입이 얼마나 일반적인가?
- 새로 만들어야하는 클래스가 클래스 템플릿을 일 수도 있다
- 정말로 꼭 필요한 타입인가?
- 기존 클래스에 대해 기능 몇개가 아쉬워서 파생 클래스를 몇개 더 뽑고 있다면 차라리 비멤버 함수라든지 템플릿을 몇 개 더 정의하는 편이 낫다.
'C,C++' 카테고리의 다른 글
[Effective C++]항목 17 : new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자. (0) | 2019.08.06 |
---|---|
[Effective C++]항목 15 : 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2019.08.05 |
[Effective C++] 항목 13 : 자원 관리에는 객체가 그만! (0) | 2019.07.31 |
[Effective C++] 항목 12 : 객체의 모든 부분을 빠짐없이 복사하자. (0) | 2019.07.30 |
[Effective C++] 항목 11 : operator= 에서는 자기대입에 대한 처리가 빠지지 않도록 하자. (0) | 2019.07.25 |
댓글