인터페이스 분리 원칙

김지민·2023년 5월 29일
0

Solid

목록 보기
4/5

인터페이스 분리 원칙 (Interface Segregation Principle)

클라이언트들은 자신이 사용하지 않는 메서드에 의존하도록 강요되어서는 안된다

개념

인터페이스를 잘게 분리함으로써, 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하는 것이다

클래스 상속은 하나의 부모 클래스만 가질 수 있도록 하지만 동시에 구현할 수 있는 인터페이스(프로토콜) 의 수를 제한하지는 않는다
따라서 서로 관련 없는 많은 메서드들을 하나의 인터페이스에 집어넣을 필요가 없으며 이를 더 정제된 인터페이스로 나눠야한다
필요하다면 그 전부를 단일 클래스에서 구현할 수 있다

코드 예시

잘못된 예시

protocol Gesture {
	func didTap()
    func didSwipe()
    func didScroll()
}

class Button: Gesture {
	func didTap() {
    	// tap Gesture logic
    }
    func didSwipe() {
    	// not used
    }
    func didScroll() {
    	// not used
    }
}

하나의 인터페이스(프로토콜)에 Gesture 관련 모든 메서드들이 들어있다
따라서 해당 인터페이스를 구현하는 구상클래스에서 해당 메서드가 필요하지 않더라 하더라도 구현을 해줘야 한다

옳게된 예시

protocol TapGesture {
	func didTap()
}
protocol SwipeGesture {
	func didSwipe()
}
protocol ScrollGesture {
	func didScroll()
}

class Button: TapGesture {
	func didTap() {
    	// tap Gesture logic
    }
}

각각의 Gesture를 분리하고 사용하는 기능을 가지고 있는 프로토콜만 채택하여 구현해주었다
이로인해 원하는 기능만 구현이 가능해졌다

만약 새로운 gesture 가 필요하다면 해당 프로토콜을 채택하여 구현해주면 될것이다

주의점

한번 인터페이스를 분리하여 구성해놓았다면 더이상 분리해서는 안된다

이미 구현되어 있는 프로젝트에 또 인터페이스를 분리한다면 이미 해당 인터페이스를 구현하고 있는 클래스 및 클라이언트에 문제가 생길 수 있다
또한 인터페이스가 너무 많아진다면 코드는 더욱 복잡해진다는 사실을 잊지 말고 균형을 유지해야한다

profile
iOS 신입으로 일하고 있습니다

0개의 댓글