- 다른 OOP 언어들과 마찬가지로, C++에서 새로운 클래스를 만든다는 것은 새로운 타입을 만드는 것과 같다.
- 좋은 타입의 조건
- 자연스러운 문법
- 직관적인 문법
- 하나 이상의 효율적인 구현 방법이 존재
클래스 멤버 함수를 어떻게 선언되었는가에 따라 그 멤버 함수의 성능이 영향을 받을 수 있다
효율적인 클래스를 디자인하기 위해 생각해봐야 할 점
- How should objects of your new type be created and destroyed?
- How should object initialization differ frome object assignment?
- What does it mean for objects of your new type to be passed by value?
- What are the restrictions on legal values for your new type?
- Does your new type fit into an inheritance graph?
- What kind of type conversions are allowed for your new type?
- What operators and functions make sense for the new type?
- What standard founctions should be disallowed?
- Whoshould have access to the members of your new type?
- What is the "undeclared interface" of your new type?
- How general is your new type?
- Is a new type really what you need?
어떤 클래스를 상속 받으면 그 클래스의 디자인의 제한 요건을 따르게 되는데, 특히 virtual, non-virtual 과 같은 제한이 그렇다. 만약 자신이 설계한 클래스를 다른 클래스가 상속 받을 수 있도록 허용한다면 어떤 멤버가 virtual일지 결정해야하는데, 특히 destructor를 virtual 로 선언해야 한다.
어떤 멤버 함수를 제공할 것인가?
무엇을 private으로 선언할 것인가?
performance와 exception safety, 그리고 resource usage(locks, dynamic memory)에 있어 어떤 보장을 제공할 것인가?
class가 아니라 class template을 만들어야 할 수도 있다.
Summary
- Class design is type design. Before defining a new type, be sure to consider all the issues discussed in this Item.
Reference
- Effective C++ by Scott Meyers
댓글 없음:
댓글 쓰기