Skip to main content

ISP 원칙

· 3 min read

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는 해당하는 역할만 구현하면 된다

참조