Backend/Spring

[스프링핵심원리 - 기본편]SOLID

seung_soos 2023. 3. 18. 13:31

좋은 객체 지향 설계 5가지 원칙 정리

  • SRP : 단일 책임 원칙(Single responsibility principle)
    • 한 클래스는 하나의 책임만 가져야한다.
    • 변경이 있을때 파급 효과가 적으면 단일 책임원칙을 잘따른것 
  • OCP : 개방-폐쇄 원칙(Open/closed principle) *중요!
    • 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀있어야한다.
    • 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현(다형성)
  • LSP : 리스코프 치환 원칙(Liskov substitution principle)
  • ISP : 인터페이스 분리 원칙(Interface segregation principle)
    • 각기능에 맞는 인터페이스 분리
    • 인터페이스가 명확해지고, 대체 가능성이 높아진다. 
  • DIP : 의존관계 역전 원칙(Dependency inversion principle) *중요!
    • 역할에 의존하여야한다
    • interface만 알아야지 그 외 구현까지는 관계를 인지하지 않아도된다.
    • 역할과 구현을 철저히 분리, 추상화에 의존해야하지 구체화에 의존하면안된다.
    • ex) MemberService 클래스에서 MemberRepository m = new MemoryMemberRepository(); DIP위반

ex) 

ex) DIP 준수시 private DiscountPolicy discountPolicy;

 - 인터페이스에만의존시 Test 시 discountPolicy => Null PointerException 발생

 

ex) 생성자 주입으로 역할과 구현 분리!!

 

※ 기존 개인프로젝트 및 팀프로젝트는 내가 생각한대로 만들었기 때문에 구현체를 변경하는 일이없었다.

    현재 Spring 강의에서는 회원(VIP)에 대해 변경사항(1000원 할인 또는 10%할인)이 발생한다는 가정으로 만들었다.

    이경우 생성자 주입이 아주용이하게 사용이된다.

 

  기존사용방식 

  1. @Autowired  
  2. @RequiredArgsConstructor

 

강의출처 : 스프링 핵심 원리 - 기본편 - 인프런 | 강의 (inflearn.com)