티스토리 뷰

코틀린

디미터의 법칙

pjm1n 2025. 3. 30. 21:54

“객체는 직접적인 친구하고만 대화해야 한다.”

즉, 객체 내부의 내부까지 접근하면 안 된다.

❌ 디미터의 법칙을 어긴 코드

class Engine {
    fun getHorsePower(): Int = 300
}

class Car(val engine: Engine)

class Driver(val car: Car) {
    fun showHorsePower() {
        println("마력: ${car.engine.getHorsePower()}") // 디미터 법칙 위반
    }
}

🔴 문제점:

Driver 객체에서 너무 많은 것을 알고 있다. (Car객체 뿐만 아니라, Engine객체 까지 알고 있음.)

→ 유지보수가 어려워지고 결합도가 높아진다. Car 객체 내부가 바뀌면 Driver객체도 수정을 해야함.

✅ 디미터의 법칙을 준수한 코드

class Engine {
    fun getHorsePower(): Int = 300
}

class Car(private val engine: Engine) {
    fun getHorsePower(): Int = engine.getHorsePower() // 엔진 정보를 캡슐화
}

class Driver(private val car: Car) {
    fun showHorsePower() {
        println("마력: ${car.getHorsePower()}") // 디미터 법칙 준수
    }
}

🚀 결론

  1. 객체는 자신이 직접 소유한 것과만 상호작용해야 한다.
  • 즉, 자신의 메서드, 필드, 생성된 객체, 파라미터로 전달된 객체만 사용해야 한다.
  1. 연쇄적인 호출(Chained Call)을 피해야 한다.
  • car.engine.getPower()같은 방식은 디미터 법칙을 위반하는 코드다.
  1. 객체 간의 의존성을 줄여야 한다.
  • 특정 객체의 내부 구조가 변경되더라도 영향을 최소화할 수 있다.

'코틀린' 카테고리의 다른 글

StateFlow, SharedFlow  (0) 2025.11.18
Reflection  (1) 2025.10.03
코틀린 문법(Sealed Interface)  (0) 2025.03.30
코틀린 문법(배열)  (0) 2024.08.19
Kotlin에서 property, JAVA에서의 field와 property  (0) 2024.08.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함