티스토리 뷰

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

  • 하나의 클래스는 하나의 책임만 가져야 한다.
  • 판단 기준 : 변경. 변경이 있을 때 파급효과가 적다면 SRP가 잘 지켜진 것으로 볼 수 있다.

 

 

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

  • SW 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 모순된 것 같지만, 기존 코드를 바꾸지 않고 새로운 기능을 확장할 수 있다는 의미.
  • 새로운 기능을 구현할 때, 인터페이스를 구현한 새로운 클래스를 만들어서 이 클래스에 새로운 기능을 구현한다.
    • 클라이언트를 변경하지 않고 새로운 기능을 구현할 수 있다!
      • 하지만... 순수 자바 코드로 구현 객체를 변경하려면 클라이언트 코드도 변경해야 한다...

Memory로 구현한 저장소를 Jdbc로 구현한 것으로 교체할 때, 클라이언트에서 인터페이스 구현체를 직접 코드로 바꿔줘야하는 문제가 생긴다. 이를 해결하려면... 스프링의 도움이 필요하다! 즉, 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.

 

 

 

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

  • 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 예시 : 자동차 인터페이스의 액셀: 앞으로 가기. 만약 뒤로 가게 구현한다면? LSP 위반!

 

 

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

  • 범용 인터페이스를 두기보다, 인터페이스를 최대한 세분화 하는 것이 좋다.
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.

 

 

DIP
의존 관계 역전 원칙(Dependency Inversion Principle)

  • "구체화에 의존하기보다 추상형에 의존해야 한다"
  • 즉, 구현 클래스에 의존하지 말고 인터페이스에 의존해야 한다.
  • 공연 무대 예시를 들면, 배역이 아닌 배우에 의존하게 되면, 변경이 매우 어려워진다. 따라서 배역(인터페이스)에 의존하는 게 좋다.
  • 앞서 OCP에서와 마찬가지로, 순수 자바코드로 구현하면 클라이언트가 구현 클래스를 직접 참조해야하기 때문에 DIP를 위반하게 된다. -> 스프링의 필요성.

 

 

위 OCP, DIP를 준수하기 위해 스프링에서는 DI(Dependency Injection) 개념, DI 컨테이너를 활용한다.
이를 통해 클라이언트 코드의 변경 없이 기능을 확장, 변경할 수 있다.

 

 

사진, 내용 출처 : 인프런, 김영한 강사님의 '스프링 핵심 원리 - 기본편' 강좌, 강의자료

https://inf.run/TErf

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함