본문 바로가기

C#

C# 인터페이스 분리 원칙(ISP) 적용 사례

인터페이스 분리 원칙(ISP, Interface Segregation Principle)은 클린 코드의 핵심 원칙 중 하나로, 하나의 거대한 인터페이스보다는 역할에 맞는 작고 구체적인 인터페이스를 여러 개 정의해야 한다는 원칙입니다.

1. ISP 원칙 개요

ISP는 클라이언트가 사용하지 않는 메서드에 의존하지 않도록 하는 것이 목적입니다. 이를 통해 코드 유지보수가 쉬워지고, 변경에 유연한 설계를 할 수 있습니다.

2. ISP를 적용한 예제

아래 예제는 동물 인터페이스를 하나로 묶어 과도하게 많은 기능을 포함하는 경우와, ISP를 적용해 역할별로 인터페이스를 분리한 경우를 보여줍니다.

3. ISP 미적용 문제 코드

public interface IAnimal
{
    void Eat();
    void Fly();
    void Swim();
}

public class Dog : IAnimal
{
    public void Eat() { /* 먹는다 */ }
    public void Fly() { throw new NotImplementedException(); }  // 비행 불가능
    public void Swim() { /* 수영한다 */ }
}

Dog 클래스는 Fly 메서드를 사용할 수 없는데도 구현해야 하며, 이는 설계에 문제를 유발합니다.

4. ISP 적용 후 코드

public interface IEater
{
    void Eat();
}

public interface IFlyer
{
    void Fly();
}

public interface ISwimmer
{
    void Swim();
}

public class Dog : IEater, ISwimmer
{
    public void Eat() { /* 먹는다 */ }
    public void Swim() { /* 수영한다 */ }
}

public class Bird : IEater, IFlyer
{
    public void Eat() { /* 먹는다 */ }
    public void Fly() { /* 난다 */ }
}

이처럼 인터페이스를 분리하면 각 클래스에서 실제 사용하는 기능만 구현해 불필요한 종속성을 제거할 수 있습니다.

5. 결론

C#에서 ISP를 적용하면 유지보수가 쉬운 구조를 만들 수 있으며, 클래스의 책임이 명확해져 확장성과 재사용성이 향상됩니다. 복잡한 인터페이스 대신 역할별 작고 단순한 인터페이스 설계를 권장합니다.