SOLID원칙에 대해서

김정현·2024년 4월 22일

면접 기술 질문을 준비하면서 SOLID 원칙에 대한 질문이 나왔는데 이번 기회에 제대로 블로그에 정리해보려고한다.

SOLID 원칙이란?

객체지향 프로그래밍의 5가지 소프트웨어 개발 원칙을 말한다. ( SRP, OCP, LSP, ISP, DIP)
SOLID 원칙을 적용하여 프로그래밍을 하게되면 코드를 확장하고 유지보수 관리가 하기가 쉬워지며 프로젝트 개발의 생산성을 높일 수 있다.

단일 책임 원칙(Single Responsibilty Principle -> SRP)

클래스는 단 하나의 책임만을 가져야 한다.

  • 말 그대로 하나의 클래스는 하나의 기능을 담당하여 하나의 기능을 수행하는데 집중하도록 한다.
  • 클래스가 변경되는 이유는 하나여야 한다.
  • 클래스가 여러 책임을 가지고 있는 경우 변경 발생 시 수정해야 하는 코드가 증가하기 때문에 해당 원칙을 따름으로써 문제를 극복할 수 있다.

개방-폐쇄 원칙(Open-Closed Principle -> OCP)

클래스는 확장에 대해서는 열려있어야 하고, 수정에 대해서는 닫혀있어야 한다.

  • 기능이 추가되는 경우 클래스 확장을 통해 손쉽게 구현하고, 확장에 따른 클래스 수정은 최소화 하도록 한다.
  • 해당 원칙은 추상화 사용(추상 클래스와 상속)을 통한 관계 구축을 권장

리스코프 치환 원칙(Liskov Substitution Principle -> LSP)

하위 타입을 상위 타입으로 교체해도 프로그램은 정상적으로 작동해야 한다.

  • 상속 관계에서 일관된 동작을 보장하기 위한
  • 해당 원칙과 OCP원칙은 밀접하게 관련되어있다.
  • 만약 해당 원칙이 제대로 지켜지지 않는다면 해당 하위 타입은 상위 타입의 기능 확장에 문제가 있기때문에
    OCP 원칙을 위반하게 된다.

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

클래스는 자신이 사용하지 않는 메서드에 의존해서는 안된다.( SRP 원칙이 클래스 단일 책임이라면 ISP는
인테페이스 버전으로 생각 )

  • 인터페이스를 역할에 맞게 잘 분리해야 한다.
  • 큰 인터페이스를 여러 개의 작은 인터페이스로 분리하여 클래스가 필요한 기능에만 의존하게 해야한다.

의존 역전 원칙(Dependency Inversion Principle -> DIP)

고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 두가지 모듈 모두 추상화에 의존해야 한다.

고수준 모듈 -> 더 추상적이고 일반적인 기능을 제공하는 모듈
저수준 모듈 -> 더 구체적이고 세부적인 기능을 제공하는 모듈

  • 구체적인 구현 클래스가 아닌 추상화된 인터페이스 또는 추상 클래스에 의존해야한다.
  • 구체적인 구현의 변경이 저수준 모듈에만 영향을 끼치고 고수준 모듈에는 영향을 미치지 않는다.
  • 구성 요소 간의 결합도가 낮아지고 유연성과 재사용성이 증가한다.

마치며

확실히 이렇게 한번 정리를 싹 해보니 SOLID에 대해서 저번보다 훨씬 더 이해를 하게 되는거 같다.
앞으로도 기술 면접 준비를 하면서 또는 프로젝트를 하면서 아직 명확하게 알지 못하는거에 대해서 더 열심히!! 정리해봐야겠다.

profile
안녕하세요 반갑습니다

0개의 댓글