항목 18. 최소한의 완전한 클래스 인터페이스를 구축한다.
클래스 클라이언트 인터페이스란?
클래스를 이용하는 프로그래머가 접근할 수 있는 인터페이스다
(public)
이유
1. 인터페이스 내에 함수들이 많아짐에 따라 미래의 클라이언트들은 이해하기 어려워진다.
2. 적은 함수들을 가진 클래스보다 많은 함수들을 가진 클래스를 관리 또는 수정하기 더 어렵다.
3. 길다란 클래스 정의는 길다란 헤더파일을 초래하여, 컴파일 시간에 상당한 불이익을 가져올수 있다.
해결 방법
1. 한번만 Set 하면 되는 경우 생성자를 통하여 값을 넣어라.
2. operator= 으로 한번만 Set 하면 되는 멤버 변수의 값이 변경된다면, Get 함수 사용시 const 로써 불려지게 만들어라. (이건 매우 속편하다. 이런것까지 고려하여 생각한다면, 정말 피곤한 작업이 따로 없을것이다.) 2008/06/07 15:47 수정
2. operator= 으로 한번만 변경되는 멤버 변수도 수정된다면, 참조자를 const 키워드를 넣어두어야 한다. 왜냐하면 값 변경을 막기 위함이다.(개인적으로 이런 것은 operator= 할때 별도로 연산해야 할 필요가 있다고 생각된다)
3. 비교 연산 및 입출력 연산이 필요할 경우, friend 를 통하여 구현해 놓아라.(여기에 대해서는 항목 19에서 언급할것이다.)
주 의 점
1. 과도한 절약은 오히려 독이다.
- 최소한의 함수 이상을 제공하는 것이 정당한 경우도 있다.
(예를 들어 그 클래스를 더 잘 이해하도록 돕는 메소들을 추가 할 경우.)
2. 클래스를 풍만하게 만드는것은 나약하게 만드는것보다 더 많은 단점이 있다
(이부분은 어느정도 동감하지만 어느정도는 힘들다. 나약한 클래스를 통하여, 많은것을 얻기 위해서는 설계 단계에서 많은 뇌가 필요하기 때문이다)
클래스 클라이언트 인터페이스란?
클래스를 이용하는 프로그래머가 접근할 수 있는 인터페이스다
(public)
이유
1. 인터페이스 내에 함수들이 많아짐에 따라 미래의 클라이언트들은 이해하기 어려워진다.
2. 적은 함수들을 가진 클래스보다 많은 함수들을 가진 클래스를 관리 또는 수정하기 더 어렵다.
3. 길다란 클래스 정의는 길다란 헤더파일을 초래하여, 컴파일 시간에 상당한 불이익을 가져올수 있다.
해결 방법
1. 한번만 Set 하면 되는 경우 생성자를 통하여 값을 넣어라.
2. operator= 으로 한번만 Set 하면 되는 멤버 변수의 값이 변경된다면, Get 함수 사용시 const 로써 불려지게 만들어라. (이건 매우 속편하다. 이런것까지 고려하여 생각한다면, 정말 피곤한 작업이 따로 없을것이다.) 2008/06/07 15:47 수정
2. operator= 으로 한번만 변경되는 멤버 변수도 수정된다면, 참조자를 const 키워드를 넣어두어야 한다. 왜냐하면 값 변경을 막기 위함이다.(개인적으로 이런 것은 operator= 할때 별도로 연산해야 할 필요가 있다고 생각된다)
3. 비교 연산 및 입출력 연산이 필요할 경우, friend 를 통하여 구현해 놓아라.(여기에 대해서는 항목 19에서 언급할것이다.)
주 의 점
1. 과도한 절약은 오히려 독이다.
- 최소한의 함수 이상을 제공하는 것이 정당한 경우도 있다.
(예를 들어 그 클래스를 더 잘 이해하도록 돕는 메소들을 추가 할 경우.)
2. 클래스를 풍만하게 만드는것은 나약하게 만드는것보다 더 많은 단점이 있다
(이부분은 어느정도 동감하지만 어느정도는 힘들다. 나약한 클래스를 통하여, 많은것을 얻기 위해서는 설계 단계에서 많은 뇌가 필요하기 때문이다)
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. (0) | 2008.05.10 |
---|---|
항목 22. 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다. (0) | 2008.05.10 |
항목 21. 가능한 const를 이용한다. (0) | 2008.05.10 |
항목 20. 데이터 멤버를 공용 인터페이스에 포함시키지 않는다. (3) | 2008.05.09 |
항목 19. 멤버 함수, 비멤버 함수 및 프렌드를 구별한다. (0) | 2008.05.09 |
3부, 클래스와 함수 : 설계 및 선언 (0) | 2008.05.08 |
항목 17. operator=에서 재귀치환을 검사한다. (0) | 2008.05.08 |
항목 16. operator=에서 모든 데이터 멤버들로의 치환을 수행한다. (0) | 2008.05.08 |
항목 15. operator= 이 *this에 대한 레퍼런스(reference)를 리턴(return)하도록 한다. (0) | 2008.05.08 |
항목 14. 베이스 클래스에서 소멸자는 가상 함수로 선언해야 한다. (0) | 2008.05.08 |
최근댓글