엘레강트 오브젝트 - 3.3~3.5.1

박진형·2022년 6월 20일
0

엘레강트오브젝트

목록 보기
3/3

3.3 인자의 값으로 NULL을 절대 허용하지마세요.

NULL을 허용하지말라는 얘기는 클린코드에서도 나온다. 하지만 여기서 NULL을 사용하지말라고 하는 것은 조금 더 객체 지향적인 관점에서 NULL을 허용하지 마라고 하는 듯한 느낌이 들었다.
객체 지향 패러다임에서는 객체에게 책임을 묻는다. 하지만 NULL을 사용할 경우 객체에게 책임을 묻는게 아니다
일단 메시지를 보내고 그 응답을 해줄지 말지는 상대 객체에 있어야하지만 NULL체크를 하는 것은 객체의 면전에다 대고 "당신과 이야기 나눌 가치가 있나요?"라고 묻는 것과 같다.

저자는 포인터를 사용하지 않는 JAVA에서 NULL을 왜 남겨뒀는지 모르겠다고 하는데.. 나도 잘 모르겠지만 자바 언어가 개발될 때 쯤엔 절차지향언어를 주로 사용했었으니까 그 과도기에 남은 잔재가 아닌가 싶기도 하다.

지금은 Optional이 있으니까 Optional을 잘 쓰도록 노력하자.

3.4 충성스러우면서 불변이거나, 아니면 상수이거나

webPage의 URI를 저장하고 URI에 요청을 보내어 컨텐츠를 읽어오는 함수를 가진 객체는 불변 객체일까?
URI는 같지만 웹페이지의 상태에 따라 반환하는 컨텐츠가 달라질 수 있는데 그럼 가변 객체가 아닌가? 에 대해 얘기하고 있다.

정답은 불변객체, URI가 변하지 않는 이상 해당 객체는 해당 URI를 가진 WebPage 객체의 대표자라고 할 수 있다.

3.5 절대 getter와 setter를 사용하지 마세요

3.5.1 객체 대 자료구조

객체와 자료구조는 어떤 차이일까?
자료구조는 단순히 데이터를 담는 가방에 불과하고(수동적) 투명하다, 객체는 능동적이고 불투명하다. 불투명하게 만드는 이유는 가시성의 범위를 축소해 단순화 시켜 유지보수성을 향상시키기 위함이다. 이것이 캡슐화이고 getter,setter는 캡슐화를 깨는 주범이다.

getter, setter를 사용하지말라는 이유는 잘 알겠지만 현실적으로 불가능한 것 같다. Spring과 JPA에서는 대부분의 경우에서 getter와 setter가 거의 필수적인 것 같다. 스프링도 개선됨에 따라 불변성을 유지할 수 있도록 지원되기도 하지만 여전히 많은 부분은 이 책에서 말하고 있는 객체 지향과는 거리가 먼 것 같다.

0개의 댓글