SmalltalkBestPracticePatterns:6.3

From 흡혈양파의 번역工房
Jump to navigation Jump to search
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