디미터의 법칙(Demeter's Law)은 객체 지향 프로그래밍에서의 설계 원칙 중 하나로, "하나의 모듈이 다른 모듈과 상호작용할 때 이 모듈은 가능한 적은 정보에 대해서만 알아야 한다"는 원칙입니다.
이 법칙은 객체 지향 프로그래밍에서 객체 간의 결합도(coupling)를 낮추기 위해 사용됩니다. 객체 간의 결합도가 높을수록 코드의 유지보수성이 낮아지기 때문에, 디미터의 법칙은 코드의 가독성과 유지보수성을 높이기 위한 중요한 설계 원칙 중 하나입니다.
public class Player {
private Name name;
public Name getName() {
return name;
}
}
public class Name {
private String name;
public String getName() {
return name;
}
}
public class OutputView {
public void printPlayerName(final Player player) {
System.out.println(player.getName().getName()); // 디미터의 법칙 위반
}
}
public class Player {
private Name name;
public String getName() {
return name.getName();
}
}
public class Name {
private String name;
public String getName() {
return name;
}
}
public class OutputView {
public void printPlayerName(final Player player) {
System.out.println(player.getName());
}
}
class Demeter {
private Member member;
public myMethod(OtherObject other) {
// ...
}
public okLawOfDemeter(Paramemter param) {
myMethod(); // 1. 객체 자신의 메서드
param.paramMethod(); // 2. 메서드의 파라미터로 넘어온 객체들의 메서드
Local local = new Local();
local.localMethod(); // 3. 메서드 내부에서 생성, 초기화된 객체의 메서드
member.memberMethod(); // 4. 인스턴스 변수로 가지고 있는 객체가 소유한 메서드
}
}
https://velog.io/@kanamycine/%EB%94%94%EB%AF%B8%ED%84%B0-%EB%B2%95%EC%B9%99-Law-of-Demeter