[C#] 5. SOLID

Connected Brain·2025년 4월 24일

면접 질문 대비

목록 보기
5/60

SOLID 원칙에 대해 설명해주세요.

한 줄 요약

SOLID 원칙 : 객체 지향 프로그래밍을 통해 코드 확장 및 유지보수에 대한 유리함, 높은 생산성을 가질 수 있도록 함.
단일책임원칙(SRP) : 하나의 클래스는 하나의 역할만을 갖도록 해야함. 해당 역할에 대한 내용이 수정될 때 수정될 부분을 최소화해 유지보수성 향상
개방 폐쇄 원칙(OCP) : 기능 추가를 위해 클래스를 추가하기는 용이하면서 기존에 있는 클래스를 수정하는 것은 최소화하는 것. 확장성 향상
리스코프 치환 원칙(LSP) : 자식은 언제나 부모로 치환할 수 있어야함. 확장성과 유지보수성을 동시에 고려한 원칙
인터페이스 분리 원칙(ISP) : 클래스와 달리 인터페이스는 다중 상속이 가능하므로 각각의 목적에 맞게 인터페이스를 분리하는 것이 중요. 유지보수성 향상
의존 역전 원칙(DIP) : 자주 변경되지 않는 인터페이스나 추상 클래스, 상위 클래스 등의 요소를 참조하는 것이 안정적이고 수정할 부분이 적어지도록 작업할 수 있음. 유지보수 및 확장성 동시에 향상

SOLID

  • 객체 지향 프로그래밍에서 지켜져야할 5가지 원칙을 의미
  • 해당 원칙을 적용하면 코드의 확장 및 유지보수에 유리하며 복잡도를 낮춰 생산성을 높일 수 있음

1. SRP (Single Responsibility Principle)

  • 단일 책임 원칙, 하나의 클래스는 하나의 책임만 가져야 함을 의미
  • 하나의 클래스가 여러 가지를 담당할 경우, 기능을 수정할 때 여러 부분을 수정해야하는 문제가 발생. 이는 유지보수성을 낮추는 요소로 이를 클래스 별로 책임을 분리하는 것으로 해결할 수 있음

2. OCP (Open Closed Principle)

  • 개방 폐쇄 원칙, "확장에는 열려 있으면서 수정에는 닫혀있어야 한다."라는 문장으로 요약될 수 있는 원칙
  • 여기서 확장이란 기능을 추가하기 위해 클래스를 추가하는 상황이라고 할 때, 해당 과정에서 최대한 간단하게 클래스를 추가할 수 있어야하며, 해당 과정에서 기존의 클래스의 수정을 최소화될 수 있도록 해야함을 말한다.
  • 간단한 예시로는 abstract제한자를 통해 확장 가능하도록 부모 클래스를 구성하고, 해당 요소를 자식에서 구체화하여 사용하도록 하는 것은 OCP 원칙을 지키는 구조인 것이다.

3. LSP (Liskov Substitution Principle)

  • 리스코프 치환 원칙, 자식은 언제나 부모로 치환이 가능해야함을 말하는 원칙

    자식을 부모로 치환할 수 있음 = 자식은 부모의 클래스로 사용하여도 기능이 정상 작동해야함

  • 자식 오브젝트를 부모 클래스로 업캐스팅하여 자식의 함수를 실행할 때에도 의도대로 흘러가게 설계해야함을 말한다.

4. ISP (Interface Segregation Principle)

  • 인터페이스 분리 원칙, 인터페이스는 클래스와 다르게 다중 상속이 가능하므로, 각각의 요소의 목적에 맞게 인터페이스를 상속하도록 하여야 한다. 이를 위해서는 인터페이스 또한 여러 책임을 가지지 않고 각각이 책임을 분리하여 가지고 있어야 함을 말하는 원칙이다.

5. DIP (Dependency Inversion Principle)

  • 의존 역전 원칙, 어떤 클래스를 참조해야할 때, 해당 특정 클래스가 아닌 인터페이스 또는 상위 클래스나 추상 클래스를 참조해야한다는 원칙
  • 쉽게 바뀔 수 있는 하위 클래스보다 상위 클래스, 추상클래스 그리고 인터페이스와 같은 쉽게 변경되지 않을 요소에 의존하는 것이 안정적이므로 해당 원칙이 존재한다.

0개의 댓글