interface Vehicle {
fun start()
fun stop()
fun accelerate()
fun brake()
fun openDoor()
fun closeDoor()
fun turnOnHeadlights()
fun turnOffHeadlights()
}
interface Drivable {
fun start()
fun stop()
fun accelerate()
fun brake()
}
interface Openable {
fun openDoor()
fun closeDoor()
// 문 열고 닫기
}
interface Lightable {
fun turnOnHeadlights()
fun turnOffHeadlights()
// 라이트 켜고 끄기
}
class Car : Drivable, Openable, Lightable {
override fun start() {
}
override fun stop() {
}
override fun accelerate() {
}
override fun brake() {
}
override fun openDoor() {
}
override fun closeDoor() {
}
override fun turnOnHeadlights() {
}
override fun turnOffHeadlights() {
}
}
fun main() {
val car = Car()
car.start()
car.accelerate()
car.openDoor()
car.turnOnHeadlights()
}
🪐안정된 소프트웨어 아키텍처를 위해서는 변동성이 큰 구현체에 의존하는 일을 지양하고, 안정된 추상 인터페이스를 사용하는 것이 좋다. 구현체에 의존하는 인터페이스는 ISP 원칙을 위반할 수 있기 때문이다.
🪐 ISP 원칙은 인터페이스에 대한 단일 책임을 강조하는 설계원칙이므로 인터페이스에 대한 단일 책임을 지향하지 않는다면 ISP 원칙을 위반하게 된다.
🪐 너무 큰 인터페이스를 만들게 되면 클라이언트가 사용하지 않는 메서드에 의존하게 되어 ISP 원칙을 위반하게 된다.
참고한 블로그
(((φ(◎ロ◎;)φ)))