Interface Segregation Principle
- ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
- 인터페이스를 일반화하여 구현하지 않는 인터페이스를 채택하는 것보다 구체적인 인터페이스를 채택하는 것이 더 좋다는 원칙
- 인터페이스를 설계할 때, 굳이 사용하지 않는 인터페이스는 채택하여 구현하지 말고 오히려 한 가지의 기능만을 가지더라도 정말 사용하는 기능만을 가지는 인터페이스로 분리하라는 원칙
BadCase
protocol Vehicle {
var wheels: Int { get set }
func moveWithWheel()
func stir()
}
class Tesla: Vehicle {
var wheels: Int = 4
func moveWithWheel() {
print("Move forward with \(wheels) wheels")
}
func stir() {
print("Can't stir")
}
}
class K1: Vehicle {
var wheels: Int = 0
func moveWithWheel() {
print("Move forward with \(wheels) wheels")
}
func stir() {
print("Can stir")
}
}
- 포괄적인 인터페이스를 만드는 것은 좋지 않다. 기능별로 분리하여 한 가지 역할만 할 수 있도록 처리하는 것이 바람직하다.
- 여러가지 일을하는 protocol은 분리하여 하나의 기능만 가능하도록 처리
NiceCase
protocol Boat {
func stir()
}
protocol Car {
var wheels: Int { get set }
func move()
}
class Benz: Car {
var wheels: Int = 4
func move() {
print("Move forward with \(wheels) wheels")
}
}
class DuckBoat: Boat {
func stir() {
print("Stiring with hands")
}
}
- move, stir 등 여러 작업을 하고 있던 포괄적인 Vehicle protocol을 Boat, Car로 분리하여 각각의 역할만 수행하도록 변경
- 해당 protocol을 Implement 하는 class는 해당하는 역할만 구현하면 된다