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

Bogoomi·2022년 6월 10일
0

EffectiveC++

목록 보기
5/24

항목19 - 클래스 설계는 타입 설계와 똑같이 취급하자.

클래스를 설계할 때는 문법이 자연스럽고, 의미구조가 직관적이며, 효율적인 구현이 한 가지 이상 가능해야한다. 좋은 클래스를 만들기 위해 고민해야할 점들을 나열했다.

새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?
객체를 생성하게되면 객체의 소멸을 설계해야하기 때문에 클래스의 생성자, 소멸자를 고민해야한다.


객체 초기화는 객체 대입과 어떻게 달라야 하는가?
객체 초기화와 객체 대입을 헷갈리지말자


새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가?
클래스의 불변속성(invariant)을 클래스 차원에서 지켜줘야 한다.

invariant : 어떤 객체의 유효한 상태를 규정하는 조건 혹은 그 조건


기존의 클래스 상속 계통망에 맞출 것인가?
기존 클래스에 상속을 하느냐마느냐에 따라 가상 함수, 소멸자 등 신경 써야해줘야할 것이 많아진다.


어떤 종류의 타입 변환을 허용할 것인가?
타입 변환이 필요하다면 암시적으로 하거나 명시적으로 하거나 정하자.
개발자 : T1 타입의 객체를 T2 타입의 객체로 변환하고싶어..
암시적 타입 변환 : T1 클래스에 타입 변환 함수를 넣어두자.(operator T2) or 인자 하나로 호출되는 비명시 호출 생성자 만들자.
명시적 타입 변환 : 변환을 맡는 별도 이름의 함수를 만들되 타입 변환 연산자 혹은 비명시호출은 만들지말자.


표준 함수들 중 어떤 것을 허용하지 말것인가?
private이나 protected를 잘 활용하자.


새로운 타입의 멤버에 대한 접근권한을 어느 쪽에 줄 것인가?
private이나 protected를 잘 활용하자.


선언되지 않은 인터페이스'로 무엇을 둘 것인가?
만들 타입이 제공할 보장이 어떤 종류인가?
보장할 수 있는 부분은 수행 성능 및 예외 안정성 그리고 자원 사용
보장하겠다고 결정한 결과는 클래스 구현에 있어 제약으로 작용한다.

새로 만드는 타입이 얼마나 일반적인가?
타입이 중복되는 클래스를 만들었는지 생각하고 template을 활용할 수 있다면 활용하자.

정말로 꼭 필요한 타입인가?
정말 필요한 함수인지 하나라도 더 줄일 수 있는 함수인지 생각해서 파생클래스를 만들자.

잊지말자!

클래스 설계는 타입 설계이다. 새로운 타입을 정의하기 전에, 이번 항목에 나온 모든 고려사항을 빠짐없이 점검해 보자.

profile
개에에에바알

0개의 댓글