c++ 에서 새로운 클래스를 정의한다 ? => 타입을 하나 정의 하는것과 같다.
좋은 클래스 설계란? 문법이 자연스럽고, 의미구조가 직관적이며, 효율적인 구현이 한 가지 이상 가능해야하는데.. 한 개도 쉽지 않다.
1. 새로 정의한 타입의 객체 성성 및 소멸은 어떻게 이루어져야 하는가?
(1) 클래스 생성자 및 소멸자의 설계가 바뀜
(2) 메모리 할당함수(new, delete)를 직접 작성할경우도 이들 함수의 설계에 영향을 미침
2. 객체 초기화는 객체 대입과 어덯게 달라야 하는가?
(1) 초기화와 대입을 헷갈리지 않는 것이 중요하다.
3. 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가?
(1) '값에 의한 전달'을 구현하는 쪽은 복사 생성자이다. 기억해두자
4. 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가?
5. 기존의 클래스 상속 계통망에 맞출 것인가?
(1) 기본클래스로부터 상속받았을때 기본클래스에 의해 제약을 받는다.
(2) 멤버 함수가 가상, 비가상 여부가 가장큰 요인이다. (소멸자 체크)
6. 어떤 종류의 타입 변환을 허용할 것인가?
(1) T1객체를 T2타입의 객체로 암시적 변환하고 싶다면(T1 -> T2)
1) T1클래스에 타입 변환 함수를 넣어두자.
2) 인자 한개로 호출 될 수 있는 비명시호출 생성자를 T2에 넣어두자.
(2) 명시적 변환만 허용하고 싶다면
1) 해당 변환을 맡는 별도의 함수를 만들되, 타입변환연산자(인자 하나로 호출될 수 있는)와 비명시호출 생성자는 만들지 마라.
7. 어떤 연산자와 함수를 두어야 의미가 있는가?
8. 표준 함수들 중 어떤 것을 허용하지 말 것인가?
- private 사용
9. 새로운 타입의 멤버에 대한 접근권한을 어느쪽에 줄것인가?
(1) public, protected, public 영역 중 어디에 둘것인가?
10. 선언되지 않은 인터페이스로 무엇을 둘 것인가?
(1) 여러분들이 만들 타입이 제공할 보장이 어떤 종류일까?에 대한 질문
(2) 수행성능 , 예외 안전성, 자원사용 이다.
11. 새로 만드는 타입이 얼마나 일반적인가?
12. 정말로 꼭 필요한 타입인가?
(1) 기존 클래스의 기능중 몇개가 아쉬워서 파생클래스를 새로 뽑고있다면... 비멤버함수 또는 템플릿 몇개를 더 정의하자.
이것만은 잊지말자!
(1) 클래스 설계는 타입 설계이다.
'책 정리 > Effective C++ 3rd' 카테고리의 다른 글
항목 21. 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 (0) | 2020.01.08 |
---|---|
항목 20. '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다 (0) | 2020.01.08 |
항목 18. 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 (0) | 2020.01.07 |
항목 17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2020.01.02 |
항목 16. new 및 delete 를 사용할 때는 형태를 반드시 맞추자 (0) | 2020.01.02 |
댓글