Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kotlin in action 6장
- 7장 고급매핑
- 13460 구슬탈출 2
- 코틸린인액션
- Kotlin in action 5장
- 객체 지향 설계와 스프링
- 백준 13460 Python
- Kotlin in action 3장
- 자바 ORM 표준 JPA 프로그래밍 7장
- KotlinInAction
- 백준 20055 컨베이어 벨트 위의 로봇
- 20055 컨베이어 벨트 위의 로봇
- 컨베이어 벨트 위의 로봇 Python
- 코틀린인액션
- Kotlin in action 10장
- 코틀린
- 기능개발 python
- spring
- 백준
- 스프링 핵심 원리 이해
- kotlin in action 정리
- Python
- 20055
- Kotlin
- Kotlin In Action
- 스프링 컨테이너와 스프링 빈
- 스프링 핵심 원리
- 스프링 핵심 원리 - 기본편
- 싱글톤 컨테이너
- 고급매핑
Archives
- Today
- Total
기록하는 습관
스프링 핵심 원리 - 고급편 (2) 디자인 패턴 본문
공부해볼 디자인 패턴
- 템플릿 메서드 패턴
- 전략 패턴
- 템플릿 콜백 패턴
디자인패턴 공부시, 가장 중요한 것은 바로 디자인패턴의 의도이다.
의도 생각하면서 공부할 것.
1. 템플릿 메서드 패턴
정의: 작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다. [GOF]
- 변하는 것과, 변하지 않는 것을 분리
- 단일 책임 원칙을 잘 지킨 패턴
- Single Responsibility Principle 단일 책임 원칙은, 변경이 있을 때 가장 잘 드러나게 된다. (SRP를 잘 지켰다면 변경 최소)
- 템플릿 패턴은 변경 지점을 하나로 모아, 변경에 쉽게 대처하도록 함.
- 추상 클래스에 공통 로직을 작성하고, 추상 클래스를 상속 받은 구체 클래스의 call() method를 오버라이딩 하여 비즈니스 로직을 작성한다.
2. 전략 패턴
정의/의도: 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다.
1) 필드에 Strategy 저장
- Spring 의존관계 주입시 전략패턴을 사용한다.
- Context는 Strategy에만 의존한다. 따라서, Strategy의 구현체가 변경된다고 하더라도 Context 코드에는 영향이 없다.
- 템플릿 메서드 패턴과 다르게 상속이 아닌 위임을 사용!
- 선 조립, 후 실행
- Context와 Strategy를 실행 전에 조립해두고, 그 다음 실행함.
- spring 개발시 application 로딩 시점에 의존관계 주입을 통해 필요한 의존관계를 모두 맺어주고 실제 요청을 처리하는 것과 같은 원리.
- 전략을 실시간으로 바꿔야 한다면 context를 새로 생성하는 것이 낫다. context를 싱글톤으로 사용할시 동시성 등 이슈를 고려해야 하므로
2) 파라미터에 Strategy 저장
- 실행하면서 전략을 유연하게 변경할 수 있다.
'개발 > Spring' 카테고리의 다른 글
스프링 핵심 원리 - 고급편 (1) ThreadLocal (0) | 2022.10.07 |
---|---|
[Spring] Migration (4) Java 1.8 -> 11 (0) | 2022.07.12 |
[Spring] Migration (3) 2.1.6.RELEASE -> 2.6.4 (0) | 2022.07.12 |
[Spring] Migration (2) 1.5.4.RELEASE -> 2.1.6.RELEASE (0) | 2022.07.12 |
[Spring] Migration (1) - java, springboot 버전 업그레이드 (0) | 2022.07.12 |
Comments