티스토리 뷰
“객체는 직접적인 친구하고만 대화해야 한다.”
즉, 객체 내부의 내부까지 접근하면 안 된다.
❌ 디미터의 법칙을 어긴 코드
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()}") // 디미터 법칙 준수
}
}
🚀 결론
- 객체는 자신이 직접 소유한 것과만 상호작용해야 한다.
- 즉, 자신의 메서드, 필드, 생성된 객체, 파라미터로 전달된 객체만 사용해야 한다.
- 연쇄적인 호출(Chained Call)을 피해야 한다.
- car.engine.getPower()같은 방식은 디미터 법칙을 위반하는 코드다.
- 객체 간의 의존성을 줄여야 한다.
- 특정 객체의 내부 구조가 변경되더라도 영향을 최소화할 수 있다.
'코틀린' 카테고리의 다른 글
| 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 |
