SmalltalkBestPracticePatterns:6.3

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
6.3 자격이 있는 서브클래스명

자격이 있는 서브클래스명

Simple Superclass Name(p.168)을 생성하였다.

  • 새로운 서브클래스를 어떻게 명명하는가?


클래스를 명명하는 한 가지 방법으로 그 목적을 알려주는 유일한 이름을 붙이는 방식이 잇다. 유일한 이름은 길고 불편한 이름을 생성하지 않고도 많은 정보를 전달할 기회를 제공한다.


이는 흔히 사용되는 이름일 때 취하면 좋은 방법이다. Array는 Collection의 서브클래스인데, 많은 소프트웨어 기술자들이 "Array"를 읽음으로써 클래스의 특성을 올바르게 예상하기 때문이다. Number는 Magnitude의 서브클래스인데, 그 이유는 규모성(Magnitude-ness)보단 숫자성(Number-ness)이 의사소통에 훨씬 더 중요하기 때문이다. 모두들 무엇인지 알고 있는 String도 Collection의 서브클래스에 해당한다.


코드 공유를 위해 상속을 엄격하게 사용하지만 서브클래스의 역할이 슈퍼클래스의 역할과 다른 경우가 종종 있는데 그 때마다 필자는 Simple Superclass Name(간단한 슈퍼클래스명)으로 돌아간다.


보통은 코드의 상속 구조를 독자가 이해하는 것이 중요한데, 특히 서브클래스가 개념적으로 슈퍼클래스 상에서 변형(variation)인 동시에 implementation을 공유할 때 그러하다. 당신이 전달해야 하는 두 가지 정보 조각은 다음과 같다:

  • 새로운 클래스가 어떻게 같은지;
  • 새로운 클래스가 어떻게 다른지.


새로운 클래스가 어떻게 같은지는 일부 슈퍼클래스를 명명함으로써 전달할 수 있다. 좀 더 먼 조상이 더 명확하게 전달하는 경우에는 굳이 직속(immediate) 슈퍼클래스가 아니어도 된다.


새로운 클래스가 어떻게 다른지는 새로운 클래스가 단순한 슈퍼클래스가 아닌 이유를 정확히 강조하는 단어를 찾음으로써 전달할 수 있다.

  • 계층구조의 서브클래스 이름은 슈퍼클래스명 앞에 형용사를 붙여서 명명하라.


예를 들어:

  • OrderedCollection은 요소들이 정리된(Ordered) Collection이다.
  • SortedCollection은 요소들이 정렬된(Sorted) Collection이다. SortedCollection가 OrderedCollection을 서브클래싱(subclass)하긴 하지만 SortedOrderedCollection이라고 부르진 않을 것이다. OrderedCollection의 서브클래싱을 선택할 경우, 두 개의 컬렉션이 유사한 역할을 수행해서가 아니라 철저히 구현상의 이유로 내린 선택이다.
  • LargeInteger는 많은 비트를 취하여 표현하는 Integer이다.


Notes