인터페이스 분리 원칙(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를 적용하면 유지보수가 쉬운 구조를 만들 수 있으며, 클래스의 책임이 명확해져 확장성과 재사용성이 향상됩니다. 복잡한 인터페이스 대신 역할별 작고 단순한 인터페이스 설계를 권장합니다.
'C#' 카테고리의 다른 글
| C# 순환 참조 방지 패턴 설계 (0) | 2026.06.17 |
|---|---|
| C# Garbage Collector 동작 원리와 세대별 수집 (0) | 2026.06.16 |
| C# Attribute 기반 로깅 시스템 구현 (0) | 2026.06.16 |
| C# Boxing과 Unboxing 성능 분석 (0) | 2026.06.16 |
| C# 메서드 인라인(Method Inlining)과 성능 영향 (1) | 2026.06.15 |