본문 바로가기
카테고리 없음

디미터의 법칙 (Law of Demeter) - 최소 지식의 원칙(Principle of least knowledge)

by 왕 달팽이 2019. 7. 9.
반응형

소프트웨어 공학에서 프로그램을 설계할 때 '디미터의 법칙(Law of Demeter)' 혹은 '최소 지식의 원칙(Principle of least knowledge)'이라는 법칙이 있다. 이는 소프트웨어 모듈 사이의 결합도를 줄여서 코드의 품질을 높이자는 취지의 가이드라인이다.

 

'디미터의 법칙(Law of Demeter)'에서 디미터 혹은 데메테르는 그리스 신화에서 나오는 수확의 신이다. (로마 신화에서는 세레스(Ceres)라고 부른다.) 하지만 디미터의 법칙은 수확의 신과 직접적으로 연관은 없고, 디미터 프로젝트(Demeter Project)라는 프로그래밍 프로젝트에서 유래했다.

 

소프트웨어 설계에서 모듈 사이의 결합도를 줄이기 위해서 객체의 모든 메소드는 다음에 해당하는 메소드만을 호출해야 한다.

 

1. 객체 자신의 메소드

2. 메소드의 매개변수로 넘어온 인자의 메소드

3. 메소드 내부에서 생성 된 객체의 메소드

4. 메소드가 포함하고 있는 객체의 메소드

 

각 번호에 해당하는 예를 들어보면,

class Test {
  private A a;
  
  private int method1() {
  	return 0;
  }
  
  public void example(B b) {
    C c = new C();
    int i = method1();  // 1번
    b.getInteger();     // 2번
    c.toString();       // 4번

    this.a = new A();
    a.getDouble();      // 3번
  }
}

디미터 법칙을 지키면서 클래스를 설계하면 객체 사이의 결합도가 줄어들어 유지보수하기 편한 설계가 나온다.

 

하지만 뭐든지 과하면 모자르니만 못한 법. 디미터 법칙도 너무 과도하면 좋지 않은 영향을 줄 수 있다. 마치 데이터 베이스에서 정규화를 하면 조인 연산의 오버헤드(Overhead)가 증가한다. 따라서 많은 경우 역정규화(Denormalize)를 해서 성능 향상을 꾀한다.

 

디미터의 법칙도 유사하게 생각하면 된다. 디미터의 법칙에는 맞지 않아 결합도가 증가하지만 성능이 중요한 곳에는 예외로 둘 때도 있다.

반응형

댓글