6월 25, 2017

[EC++ 19] Treat class design as type design

  • 다른 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?
  • 어떤 클래스를 상속 받으면 그 클래스의 디자인의 제한 요건을 따르게 되는데, 특히 virtual, non-virtual 과 같은 제한이 그렇다. 만약 자신이 설계한 클래스를 다른 클래스가 상속 받을 수 있도록 허용한다면 어떤 멤버가 virtual일지 결정해야하는데, 특히 destructor를 virtual 로 선언해야 한다.

  • 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?
  • 무엇을 private으로 선언할 것인가?

  • Whoshould have access to the members of your new type?
  • What is the "undeclared interface" of your new type?
  • performance와 exception safety, 그리고 resource usage(locks, dynamic memory)에 있어 어떤 보장을 제공할 것인가?

  • How general is your new type?
  • class가 아니라 class template을 만들어야 할 수도 있다.

  • Is a new type really what you need?



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

댓글 없음:

댓글 쓰기