디미터의 법칙

Jae-Baek Song·2023년 3월 6일
0

디미터의 법칙(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());
    }
}

디미터의 법칙을 지키기 위한 규칙화

  1. 객체 자신의 메서드
  2. 메서드의 파라미터로 넘어온 객체들의 메서드
  3. 메서드 내부에서 생성, 초기화 된 객체의 메서드
  4. 인스턴스 변수로 가지고 있는 객체가 소유한 메서드
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

0개의 댓글

관련 채용 정보