기록하는 습관

스프링 핵심 원리 - 고급편 (2) 디자인 패턴 본문

개발/Spring

스프링 핵심 원리 - 고급편 (2) 디자인 패턴

로그뉴 2022. 10. 13. 15:03

공부해볼 디자인 패턴

  • 템플릿 메서드 패턴
  • 전략 패턴
  • 템플릿 콜백 패턴

디자인패턴 공부시, 가장 중요한 것은 바로 디자인패턴의 의도이다.

의도 생각하면서 공부할 것.

 

1. 템플릿 메서드 패턴

정의: 작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다. [GOF]

 

  • 변하는 것과, 변하지 않는 것을 분리
  • 단일 책임 원칙을 잘 지킨 패턴
    • Single Responsibility Principle 단일 책임 원칙은, 변경이 있을 때 가장 잘 드러나게 된다. (SRP를 잘 지켰다면 변경 최소)
    • 템플릿 패턴은 변경 지점을 하나로 모아, 변경에 쉽게 대처하도록 함.
  • 추상 클래스에 공통 로직을 작성하고, 추상 클래스를 상속 받은 구체 클래스의 call() method를 오버라이딩 하여 비즈니스 로직을 작성한다.

 

2. 전략 패턴

정의/의도: 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다.

 

1) 필드에 Strategy 저장

  • Spring 의존관계 주입시 전략패턴을 사용한다.
  • Context는 Strategy에만 의존한다. 따라서, Strategy의 구현체가 변경된다고 하더라도 Context 코드에는 영향이 없다.
  • 템플릿 메서드 패턴과 다르게 상속이 아닌 위임을 사용!
  • 선 조립, 후 실행
    • Context와 Strategy를 실행 전에 조립해두고, 그 다음 실행함.
    • spring 개발시 application 로딩 시점에 의존관계 주입을 통해 필요한 의존관계를 모두 맺어주고 실제 요청을 처리하는 것과 같은 원리.
    • 전략을 실시간으로 바꿔야 한다면 context를 새로 생성하는 것이 낫다. context를 싱글톤으로 사용할시 동시성 등 이슈를 고려해야 하므로

2) 파라미터에 Strategy 저장

  • 실행하면서 전략을 유연하게 변경할 수 있다.
Comments