이 장의 내용은 -er로 끝나는 이름을 사용하지 마라는 내용이다.
우리는 보통 클래스를 객체의 템플릿, 객체를 구성하기 위한 부품을 모아둔 것 이라고 배운다
하지만 이 챕터에선 클래스는 객체의 "팩토리" 라고 설명한다.
즉 클래스를 객체의 능동적인 "관리자" 로 생각해야 한다고 한다.
이는 내가 그동안 클래스는 객체를 구성하기 위한 부품을 모아둔 일종의
부품 모음집이 아닌 객체를 컨트롤하는 관리자라고 까지 설명한다.
여기까지만 들으면 객체지향이 아닌 클래스지향을 말하려는 건가?라는 의구심이 든다.
다음으로
"객체는 객체의 외부 세계와 내부 세계를 이어주는 연결장치가 아닙니다."
절대절대 아니라고 한다 대신 객체는 캡슐화된 데이터의 대표자 라고 한다.
이 부분에 대해선 동의 할 수 있을 것 같다. 우리가 객체를 만들고 해당 객체를 가지고 여러 메소드를 이용할 수 있으니 대표자라고 볼 수 있을 것 같다.
(나는 객체를 이용해 메소드를 사용하니까 연결장치라고 생각했다. ㅎㅎ)
다음으로
클래스의 이름이 '-er'로 끝난다면 이 클래스의 인스턴스는 실제로는 객체가 아니라 데이터를 다루는 절차들의 집합일 뿐이다. 이것은 절차지향 언어에서 객체지향 언어로 전향한 개발자들의 절차지향적인 사고 방식이다.
그렇다면 올바른 클래스 이름은 도대체 어떻게 지어야 하는걸까
이 책에서의 예제는 임의의 숫자 리스트가 존재할 때, 이 리스트의 요소 중에서 소수를 찾는 알고리즘을 만든다고 가정했을때 오직 소수만으로 구성된 리스트를 얻는 것이 목적이라면,
클래스 이름을 Primer, PrimeFinder, PrimeHelper 등으로 지으면 안된다고 한다.
PrimeNumbers 라고 지어야 한다고 한다. 클래스명을 무엇을 하는지로 짓는것이 아닌
무엇인지를 생각하고 지어야 한다고 한다. 이 부분은 조금 동의하기 어려웠다.
그동안 클래스를 부품도 정도로 바라왓던 나로서는 진짜 이 사람이
클래스 지향 프로그래밍을 설명하는 건가? 라고 생각했다. 그렇다면 불을 끄는 소방관을 예로 들어 클래스명을 지어본다면 소방관은 불을 끄니 결과적으론 불이 꺼졌는지 안꺼졌는지가
요점이니 FireStatus?라고 지어야할까? 뭐 그렇게 나쁘진 않은 것 같다..
클래스는 단지 객체를 만들어주는 그릇, 틀 정도로만 생각했지만 클래스를 특정행위를
하는 기능 모음집이 아닌 무엇인지에 대해 생각해보며 네이밍의 고민을 할 수 있었다... 또한 저자는 이미 만들어진 JDK패키지에 있는 클래스들도 비판하며 기존에 있었던 나의 안일한 생각
"뭐 자바에 기본적으로 들어있으니까 써야지" 그냥 써야지 라는 생각을 한꺼풀 벗겨낼 수 있었다.