[클린코드] 6장 객체와 자료 구조

이준기·2022년 1월 23일
0

변수를 private로 정의하는 이유가 있다. 그렇다면 왜 조회와 설정 함수를 당연하게 public해 private 변수를 외부에 노출할까?

자료 추상화

인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다.

자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.

개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.

자료/객체 비대칭

객체와 자료 구조는 근본적으로 양분된다. 사실상 반대다!

자료 구조

자료 구조를 사용하는 절차적인 코드는 기본 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다.

반면에, 새로운 자료구조를 추가하려면 모든 함수를 고쳐야 하므로 어렵다.

객체

객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.

반면, 새로운 함수를 추가하려면 모든 클래스를 고쳐야 하므로 어렵다.

디미터 법칙

디미터 법칙은 잘 알려진 휴리스틱으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.

다시 말해, 낯선 사람은 경계하고 친구랑만 놀라는 의미다.

밑 코드는 디미터 법칙을 어기는 듯이 보인다.

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

기차 충돌

위와 같은 코드를 기차 충돌이라 부른다. 일반적으로 자잡하다 여겨지는 방식이므로 피하는 편이 좋다.

위 예제가 디미터 법칙을 위반하는지는 변수들이 객체인지 아니면 자료 구조인지에 달렸다.

잡종 구조

이런 혼란으로 절반은 객체, 절반은 자료 구조인 잡종 구조가 나온다. 이러한 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다.

단점만 모아놓은 구조이므로 피하자.

구조체 감추기

만약 변수들이 객체라면 줄줄이 사탕으로 엮어서는 안 된다. 객체라면 내부 구조를 감춰야 하니까.

객체보고 속을 드러내라고 하지 말고 뭔가를 하라고 말하자(추상화!).

자료 전달 객체

자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조체를 때로는 자료 전달 객체(Data Transfer Object, DTO)라 한다.

DTO는 굉장히 유용한 구조체다. 특히 데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용하다.

흔히 DTO는 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 청므으로 사용하는 구조체다.

결론

자료 구조와 객체의 차이점을 잘 이해하고 상황에 맞게 잘 선택하자.

Reference

클린 코드: 애자일 소프트웨어 장인 정신 - 로버트 마틴 지음

profile
Hongik CE

0개의 댓글