평범한 연구소

[Spring] SOLID 원칙 본문

Spring Framework

[Spring] SOLID 원칙

soyeonisgood 2023. 1. 10. 20:16

SOLID 란 ?

객체지향 프로그래밍 설계의 대표적인 5가지 원칙이다.

아래 5가지 원칙의 앞글자를 따서 만든 용어이다.

  • SRP
  • OCP
  • LSP
  • ISP
  • DIP

SOLID 의 장점은 ?

객체 지향 프로그래밍의 특성과 장점을 극대화 시킬 수 있다 !

 

 

1) SRP(Single Responsibility Principle, 단일 책임 원칙)

  • 하나의 객체하나의 책임만 가져아한다는 원칙이다.
  • 여기서 책임이란, 클래스가 담당하는 동작을 의미한다.
  • 모듈화가 강해질수록 다른 객체와의 의존성이 줄어든다. 
    • 결합도↓  응집도 ↑
  • 효율적인 유지보수가 가능.

 

2) OCP (Open Closed Principle, 개방 폐쇄 원칙)

  • 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야한다는 원칙이다.
  • 새로운 기능이 추가될 때, 기존 코드에는 수정이 일어나지 않아야한다.
  • 변경이 예상되는 부분을 추상화하고 다형성을 이용한다면?
    • 기존 코드를 수정하지 않아도 된다.
  • 기존 코드를 수정하지 않고도 기능을 확장할 수 있도록 함으로써 유연함이 높아진다.

 

3) LSP (Liskov Subsitution Principle, 리스코프 치환 원칙)

  • 상속 관계를 가진 두 객체가 있다. 부모 객체의 인스턴스 위치에 자식 객체의 인스턴트를 대신 사용했을 때 코드가 원래 의도대로 동작해야한다. 즉, 자식 객체는 부모 객체를 완전히 대체할 수 있어야한다는 원칙이다.
  • 이 원칙은 협업하는 개발자 사이의 신뢰를 위한 것이다.
  • 주의할 점은 오버라이딩 시 파라미터와 리턴값의 타입과 갯수가 일치해야한다.
  • 컬렉션은 LSP를 잘 적용한 예제!

 

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

  • 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야한다는 원칙이다.
  • 인터페이스를 작은 단위로 분리시켜서 클라이언트가 꼭 필요한 메소드만 이용 가능하도록 해야한다.
  • 하나의 통상적인 인터페이스보단 여러 개의 세부적인 인터페이스들이 낫다.

 

5) DIP (Dependancy Inversion Principle, 의존성 역전 원칙)

  • 객체는 구현된 객체(저수준 모듈)보다 추상적인 것(고수준 모듈)에 의존해야 한다는 원칙이다.
    • 추상클래스, 인터페이스
  • 상위 레벨의 모듈은 하위 레벨 모듈에 의존하지 않아야한다.
    • 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야한다.
  • 객체에 의존하게 되면, 메소드들도 의존성을 가진다. 새로운 기능이 추가되면 기존 코드에 수정이 일어나므로 개방폐쇄원칙을 위배한다.

추상화?

  • 공통되는 속성이나 기능을 묶어 내는 것. 함수 선언은 하되 구현부는 작성하지 않는다.
  • 코드의 재사용성, 가독성이 향상된다.
  • 함수를 작게 만들 수 있다. → 단일 책임 원칙과 연관된다.
  • 확장에는 열려있고 수정에는 닫혀있는 개방 폐쇄 원칙을 준수할 수 있다.
  • 자식 클래스에서 반드시 재정의 해야하므로 다형성을 갖는다.