티스토리 뷰

디미터의 법칙(Law of Demeter)

상태를 가지는 객체의 데이터를 꺼내려 하지 말고 메세지를 보내라.

 

  • 객체의 자료를 숨기고 함수를 공개함.
  • 코드의 중복 사용 방지와 유지 보수성을 높일 수 있다.
  • 결합도를 낮추고 응집도를 높일 수 있다.

 

디미터의 법칙을 위반한 경우

public class Lotto {
    private List<Integer> LottoNumbers;

    public Lotto(List<Integer> lottoNumbers) {
        LottoNumbers = lottoNumbers;
    }

    public List<Integer> getLottoNumbers() {
        return LottoNumbers;
    }
}
@Test
void 디미터의_법칙_위반() {
    List<Integer> lottoNumbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
    Lotto lotto = new Lotto(lottoNumbers);
    if(6 == lotto.getLottoNumbers().get(5)){
        // some code
    }
}

 

디미터의 법칙을 준수한 경우

public class Lotto {
    private List<Integer> LottoNumbers;

    public Lotto(List<Integer> lottoNumbers) {
        LottoNumbers = lottoNumbers;
    }

    public boolean contains(int lottoNumber) {
        return LottoNumbers.contains(lottoNumber);
    }
}
@Test
void 디미터의_법칙_준수() {
    List<Integer> lottoNumbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
    Lotto lotto = new Lotto(lottoNumbers);
    if(lotto.contains(6)){
        // some code
    }
}

 

댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글