퍼사드 패턴 리뷰에 앞서 책에서 객체지향의 최소 지식의 원칙에 대해 짚고 넘어가는 곳이 있어 리뷰 후에 넘어가고자 한다.
우선 최소 지식의 원칙은 드미트리의 원칙이라고도 불리며, 아래의 네 가지 규칙을 준수하는 것이 포인트이다.
- 자기 자신만의 객체 사용
- 메서드에 전달된 매개변수 사용
- 메서드에서 생성된 객체 사용
- 객체에 속하는 메서드 사용
적어두고 생각해보면 알겠지만, 네 가지 원칙을 준수하게 될 경우에 가질 수 있는 장점은 결합도를 낮추는 것이 될 것이다.
우선적으로 자기 자신만의 객체를 사용하고, 필요한 외부 데이터가 있는 경우 이를 매개변수로써 전달받기 때문에,
특정한 다른 클래스를 사용하게 되는 경우에 사용하는 클래스가 변경됨으로써 가질 수 있는 불이익으로부터 자유로운 것이다.
(이는 메서드에 전달된 매개변수만을 이용할 시에 취할 수 있는 장점이 될 것이다)
아래는 위 원칙에 기반해 책의 예제를 코틀린으로 옮긴 것이다.
package com.example.algorithmstudy.pattern.structure.facade
/**
* 최소 지식의 원칙!
*
* - 자기 자신만의 객체 사용
* - 메서드에 전달된 매게변수 사용
* - 메서드에서 생성된 객체 사용
* - 객체에 속하는 메서드 사용
*/
class Car {
// 메서드에서 생성된 객체 사용
private lateinit var engine: Engine
constructor(engine: Engine) {
this.engine = engine
}
fun start(key: Key) {
// 메서드에서 생성된 객체의 사용
val doors = Doors()
// 매개변수로 전달된 객체의 메서드 사용
val authorized = key.turns()
if (authorized) {
// 객채에 속하는 메서드 사용
engine.start()
// 객체 내에 있는 메서드의 사용
updateDashboardDisplay()
// 객체에 속하는 메서드 사용
doors.lock()
}
}
fun updateDashboardDisplay() {
}
inner class Engine {
fun start() {}
}
inner class Doors {
fun lock() {}
}
}
package com.example.algorithmstudy.pattern.structure.facade
class Key {
fun turns(): Boolean {
return true
}
}
'LANGUAGES, METHODLOGY > STUDY' 카테고리의 다른 글
터지지 않는 앱의 역설(논리 에러) (0) | 2022.12.28 |
---|---|
[STUDY] 깨끗한 코드란 무엇일까? 로버트 C.마틴의 클린 코드 (0) | 2022.11.13 |
[안드로이드] MVC, MVP, MVVM에 대해 알아보자 (0) | 2019.02.16 |
[Q&A] Question of myself - 무엇을 하고 싶은가? (0) | 2019.02.06 |
[RxJava] RxJava란 무엇인가? (0) | 2019.01.30 |