카테고리 없음

Swift) 인터페이스 분리의 원칙

나태한개발 2024. 6. 11. 18:40

인터페이스 분리 원칙(ISP)이란?

인터페이스 분리 원칙은 객체 지향 설계의 SOLID 원칙 중 네 번째 원칙이다. 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다는 원칙이다. 즉, 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다는 의미이다.

 

잘못된 예제부터 봅시다.

protocol Worker {
    func work()
    func eat()
}

class HumanWorker: Worker {
    func work() {
        print("Human working")
    }
    
    func eat() {
        print("Human eating")
    }
}

class RobotWorker: Worker {
    func work() {
        print("Robot working")
    }
    
    func eat() {
        // 로봇은 먹지 않음
    }
}

RobotWorker는 eat 메서드를 구현할 필요가 없지만, 인터페이스에 의해 강제된다.

 

다음은 올바른 예제이다.

protocol Workable {
    func work()
}

protocol Eatable {
    func eat()
}

class HumanWorker: Workable, Eatable {
    func work() {
        print("Human working")
    }
    
    func eat() {
        print("Human eating")
    }
}

class RobotWorker: Workable {
    func work() {
        print("Robot working")
    }
}

이 예제에서는 인터페이스를 분리하여 RobotWorker가 Eatable 인터페이스에 의존하지 않도록 했다.

 

ISP를 준수함으로써 얻을 수 있는 장점

  1. 단일 책임: 인터페이스를 작고 구체적으로 유지하여 클래스가 불필요한 기능을 가지지 않게 한다.
  2. 높은 응집도: 관련된 메서드들만 묶여있어 코드의 응집도가 높아진다.
  3. 낮은 결합도: 클래스가 자신이 사용하지 않는 메서드에 의존하지 않으므로 결합도가 낮아진다.