2024-09-11

소프트웨어 설계에서 지켜야 할 다섯 가지 핵심 원칙
유연하고 관리하기 쉬운 객체 지향 설계를 추구하기 위해 사용된다.
인터페이스 분리 원칙 (ISP) : 클라이언트가 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 작게 분리해야 한다는 원칙이다.
즉, 한 클래스에서 자신이 사용하지 않는 인터페이스는 구현하지 않아야 한다.
IAnimal 인터페이스 : 동물들의 행동(Fly, Swim, Eat) 들을 정의
Dog 클래스 : Swim, Eat 행동이 가능
Bird 클래스 : Fly , Eat 행동이 가능
public interface IAnimal
{
void Fly();
void Swim();
void Eat();
}
public class Dog : IAnimal
{
public void Fly()
{
// 개는 날 수 없지만, 인터페이스를 구현해야 하므로 빈 메서드
}
public void Swim()
{
Console.WriteLine("개가 수영합니다.");
}
public void Eat()
{
Console.WriteLine("개가 먹이를 먹습니다.");
}
}
public class Bird : IAnimal
{
public void Fly()
{
Console.WriteLine("새가 날고 있습니다.");
}
public void Swim()
{
// 새는 수영할 수 없지만, 인터페이스를 구현해야 하므로 빈 메서드
}
public void Eat()
{
Console.WriteLine("새가 먹이를 먹습니다.");
}
}
동물들의 행동 (Fly, Swim, Eat) 메서드를 IAnimal 이라는 인터페이스에 구현하여
자신이 사용하지 않는 메서드(Dog - Fly , Bird - Swim) 도 구현해야 한다.
동물들의 행동을 필요한 메서드만 포함해 쪼개 구현한다.
IFlyable : 날 수 있는 동물들을 위한 인터페이스
ISwimmable : 수영할 수 있는 동물들을 위한 인터페이스
IEatable : 먹이를 먹는 동물들을 위한 인터페이스
public interface IFlyable
{
void Fly();
}
public interface ISwimmable
{
void Swim();
}
public interface IEatable
{
void Eat();
}
public class Dog : ISwimmable, IEatable
{
public void Swim()
{
Console.WriteLine("개가 수영합니다.");
}
public void Eat()
{
Console.WriteLine("개가 먹이를 먹습니다.");
}
}
public class Bird : IFlyable, IEatable
{
public void Fly()
{
Console.WriteLine("새가 날고 있습니다.");
}
public void Eat()
{
Console.WriteLine("새가 먹이를 먹습니다.");
}
}
ISP 를 준수하여 코드를 작성했기 때문에,
클라이언트가 사용하지 않는 메서드를 구현할 필요 없이
필요한 메서드만 포함된 인터페이스에 의존한다.
SOLID 법칙의 I 인터페이스 분리 원칙에 대해 살펴보았다.
간단하게 동물들의 행동을 통해 예제 코드를 구현해보며, 인터페이스가 어떻게 설계되어야 하는지를 이해하는 데 큰 도움이 되었다.
인터페이스를 작고 구체적으로 나누는 것이 크게 특별한 기법은 아니지만,
사소한 디테일 하나가 유지보수와 가독성에 큰 영향을 미친다는 것을 알 수 있었다.