SOLID 원칙

박근수·2024년 2월 5일
0

Spring

목록 보기
1/11
post-thumbnail

SOLID 원칙

SRP (Single Responsibility Principle)

단일 책임 원칙

  • 한 클래스는 단일의 책임만 가져야 한다.
  • 클래스를 변경하는 이유는 단 하나여야 함.
  • 이를 지키지 않으면, 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향을 미칠 수 있음
    • 유지보수가 매우 비효율적

OCP (Open Closed Priciple)

개방 폐쇄 원칙

  • 확장에는 열려있고, 변경에는 닫혀있다.
  • 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 함
  • 이를 지키지 않으면, instance of와 같은 연산자를 사용하거나 다운 캐스팅 발생

어떤 모듈의 기능을 하나 수정할 때, 그 모듈을 이용하는 다른 모듈들 역시 줄줄이 고쳐야 한다면 유지보수가 복잡할 것이다. 개방 폐쇄 원칙을 잘 적용하여 코드를 변경하지 않아도 기능을 새롭게 만들거나 변경할 수 있도록 해야 한다.

LSP (Liskov Substitution Principle)

리스코프 치환 법칙

  • 하위타입은 언제나 상위타입으로 교체할 수 있어야 한다.
  • 상속관계에서는 꼭 일반화 관계 (IS - A)가 성립해야 한다는 의미(일관성 있는 관계인지)
  • 상속관계가 아닌 클래스들을 상속관계로 설정하면, 이 원칙이 위배됨(재사용 목적으로 사용하는 경우)

리프코프 치환 원칙을 지키지 않으면 개방 폐쇄 원칙을 위반하게 되는 것. 기능 확장을 위해 기존의 코드를 여러 번 수정해야할 것이다.

ISP (Interface Segregation Principal)

인터페이스 분리 원칙

  • 클라이언트는 자신이 사용하는 메소드에만 의존해야 한다는 원칙
  • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 않아야 함
    • 하나의 통상적인 인터페이스보다는 차라리 여러 개의 세부적인 인터페이스가 더 좋음
  • 인터페이스는 해당 인터페이스를 사용하는 클라이언트 기준으로 잘게 분리되어야 함

각 클라이언트가 필요로 하는 인터페이스들을 분리함으로써, 클라이언트가 사용하지 않는 인터페이스에 변경이 발생하더라도 영향을 받지 않도록 만들어야 하는 것이 핵심

DIP (Dependecy Inversion Principal)

의존성 역전 원칙

  • 의존 관계를 맺을 때, 변하기 쉬운 것(구체적인 것) 보다는 어려운 것(추상적인 것)에 의존해야 함
  • 하위 모듈의 변경이 상위 모듈의 변경을 요구하는 의존성을 끊어 내야 함

구체화된 클래스에 의존하기 보다는 추상 클래스나 인터페이스에 의존해야 한다는 뜻

총정리

  • SRP : 컨플릭을 방지, 역할에 해당하는 서비스를 잘 찾는다.
  • OPC : if else에서 반복적인 케이스가 보이면, 클래스 분리를 고려
  • LSP : 상속보다는 if를 고려하고, 상속을 해도 비슷하게 만들어야 교체가 쉽다.
  • ISP : 인터페이스도 OCP를 따라야 구현이 편리하고 재활용성이 올라감
  • DIP : 하위 모듈에 너무 의존하면 변경이 어려움, 중간 if를 둬야 하위 모듈 변경이 쉽다.
profile
개발블로그

0개의 댓글