코샵
끄적끄적 코딩 공방
코샵

인기 글

  • 분류 전체보기 (479) N
    • MongoDB (4)
    • 일기장 (4)
    • Unity (138)
      • Tip (41)
      • Project (1)
      • Design Pattern (8)
      • Firebase (6)
      • Asset (2)
    • 파이썬 (127)
      • Basic (40)
      • OpenCV (8)
      • Pandas (15)
      • PyQT (3)
      • SBC(Single Board Computer) (1)
      • 크롤링 (14)
      • Fast API (29)
      • Package (6)
    • Linux (4)
    • C# (97)
      • Algorithm (11)
      • Window (7)
    • TypeScript (48) N
      • CSS (10) N
    • Git (11)
    • SQL (5)
    • Flutter (10)
      • Tip (1)
    • System (1)
    • BaekJoon (6)
    • Portfolio (2)
    • MacOS (1)
    • 유틸리티 (1)
    • 서비스 (6)
    • 자동화 (3)
    • Hobby (10)
      • 물생활 (10)
      • 식집사 (0)
전체 방문자
오늘
어제

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.
코샵

끄적끄적 코딩 공방

C#

객체지향의 5대 원칙 SOLID : Interface Segregation Principle

2023. 4. 30. 10:47
반응형

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

ISP는 객체지향의 5대 원칙 중 하나로, 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다는 것을 의미합니다. 이것은 인터페이스를 작은 단위로 분리하여 인터페이스 간의 의존성을 낮추는 것을 의미합니다.

ISP의 예시

다음은 ISP의 예시입니다.

interface IAnimal
{
    void Eat();
    void Sleep();
    void Move();
}

class Dog : IAnimal
{
    public void Eat() { /* ... */ }
    public void Sleep() { /* ... */ }
    public void Move() { /* ... */ }
}

class Bird : IAnimal
{
    public void Eat() { /* ... */ }
    public void Sleep() { /* ... */ }
    public void Move() { /* ... */ }
}

위의 예제는 IAnimal 인터페이스와 Dog, Bird 클래스를 보여줍니다. 이 예제에서 IAnimal 인터페이스에는 Eat(), Sleep(), Move() 메소드가 포함되어 있습니다. 그러나 Dog와 Bird 클래스에서는 Move() 메소드를 사용하지 않습니다.

이것은 ISP를 위배하는 예제입니다. 이것은 클라이언트가 자신이 사용하지 않는 인터페이스에 의존해야 한다는 것을 의미합니다. 그러므로, 이 예제에서는 IAnimal 인터페이스를 분리하여 의존성을 낮추는 것이 좋습니다.

다음은 ISP를 지키는 예시입니다.

interface IAnimal
{
    void Eat();
    void Sleep();
}

interface IMoveable
{
    void Move();
}

class Dog : IAnimal, IMoveable
{
    public void Eat() { /* ... */ }
    public void Sleep() { /* ... */ }
    public void Move() { /* ... */ }
}

class Bird : IAnimal, IMoveable
{
    public void Eat() { /* ... */ }
    public void Sleep() { /* ... */ }
    public void Move() { /* ... */ }
}

이 예제에서는 IAnimal 인터페이스와 IMoveable 인터페이스를 사용하여 인터페이스를 분리하였습니다. 그러므로, 클라이언트는 자신이 사용하는 인터페이스에만 의존하게 됩니다.

ISP의 장점

ISP를 지키면 인터페이스 간의 의존성이 낮아지므로 코드의 재사용성과 유지보수성이 개선됩니다.

결론

ISP는 클라이언트가 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다는 객체지향의 5대 원칙 중 하나입니다. 이것은 인터페이스를 작은 단위로 분리하여 인터페이스 간의 의존성을 낮추는 것을 의미합니다. 이번 글을 통해 ISP에 대해 더욱 자세히 알아보았습니다.

참고자료

  • [SOLID Design Principles Explained: Interface Segregation Principle
저작자표시 비영리 변경금지 (새창열림)

'C#' 카테고리의 다른 글

C#의 #region 지시어  (0) 2023.05.08
객체지향의 5대 원칙 SOLID : Dependency Inversion Principle  (0) 2023.05.01
객체지향의 5대 원칙 SOLID : Liskov Substitution Principle  (0) 2023.04.29
객체지향의 5대 원칙 SOLID : Open-Closed Principle  (0) 2023.04.28
객체지향의 5대 원칙 SOLID : Single Responsibility Principle  (0) 2023.04.27
    'C#' 카테고리의 다른 글
    • C#의 #region 지시어
    • 객체지향의 5대 원칙 SOLID : Dependency Inversion Principle
    • 객체지향의 5대 원칙 SOLID : Liskov Substitution Principle
    • 객체지향의 5대 원칙 SOLID : Open-Closed Principle
    코샵
    코샵
    나의 코딩 일기장

    티스토리툴바