개발햄비

[Clean code] 디미터 법칙 Law of Demeter 본문

개발/Clean Code

[Clean code] 디미터 법칙 Law of Demeter

개발햄 2021. 6. 20. 15:29

디미터 법칙

디미터라는 이름의 프로젝트를 진행하던 도중 다른 객체들과의 협력을 통해 프로그램을 완성해나가는 객체지향 프로그래밍에서 객체들의 협력 경로를 제한하면 결합도를 효과적으로 낮출 수 있다는 사실을 발견했고 디미터 법칙을 만들었다.

현재 디미터 법칙은 객체 간 관계를 설정할 때 객체 간의 결합도를 효과적으로 낮출 수 있는 유용한 지침 중 하나로 꼽히며 객체 지향 생활 체조 원칙 중한 줄에 점을 하나만 찍는다.로 요약되기도 한다.

Don’t Talk to Strangers

디미터 법칙의 핵심은 객체 구조의 경로를 따라 멀리 떨어져 있는 낯선 객체에 메시지를 보내는 설계는 피하라는 것이다.

객체는 내부적으로 보유하고 있거나 메시지를 통해 확보한 정보만 가지고 의사 결정을 내려야 하고,
다른 객체를 탐색해 뭔가를 일어나게 해서는 안 된다.

이러한 핵심적인 내용 때문에 디미터 법칙은 Don’t Talk to Strangers(낯선 이에게 말하지 마라)라고도 불리고
한 객체가 알아야 하는 다른 객체를 최소한으로 유지하라는 의미로 Principle of least knowledge(최소 지식 원칙)라고도 불린다.

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

위와 같은 코드를 기차 충돌 (train wreck)이라 부른다. 여러 객체가 한 줄로 이어진 기차처럼 보이기 때문이다.
일반적으로 조잡하다 여겨지는 방식이므로 피하는 편이 좋다 .

Options options = ctxt.getOptions();
File scratchDir = options.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

위 예제가 디미터 법칙을 위반하는지 여부는 ctxt, Options, ScratchDir이 객체인지 아니면 자료 구조인지에 달렸다.
객체라면 내부 구조를 숨겨야 하므로 확실히 디미터 법칙을 위반한다.
반면, 자료 구조라면 당연히 내부 구조를 노출하므로 디미터 법칙이 적용되지 않는다.

'개발 > Clean Code' 카테고리의 다른 글

[CleanCode] 종속 함수  (0) 2021.05.23
[Clean code] 변수명  (0) 2021.05.02
[Clean Code] 개발의 5S 원칙  (0) 2021.04.25