일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영화
- 리뷰
- 수능
- Netflix
- 완전탐색
- Greedy
- Movie
- 추천
- silver
- BOJ
- 백준
- 코딩 테스트
- 해설
- 영어
- health
- 2020
- array
- parametric search
- 알고리즘
- kakao
- 넷플릭스
- benefits
- coding
- Recursive
- 카카오
- BFS
- usaco
- 나는솔로
- Algorithm
- review
- Today
- Total
Young
스프링 프레임워크 주요 디자인 패턴 본문
1. 스프링 프레임워크 주요 디자인 패턴
(1) 템플릿 메소드 패턴 (template method pattern)
슈퍼클래스에 기본적인 로직의 흐름을 작성하고,
일부 변경이 필요한 부분은 서브클래스에서 오버라이딩할 수 있도록 추상 메소드로 둔다.
서브클래스에서 필요에 맞게 이를 구현하여 사용하는 디자인 패턴이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public abstract class Parent {
private void logic1() {
}
private void logic2() {
}
abstract public void childLogic();
public void algorithm() {
logic1();
logic2();
childLogic();
}
}
class Child extends Parent {
@override
public void childLogic() {
// 구체적인 알고리즘
}
}
|
cs |
(2) 팩토리 메소드 패턴 (factory method pattern)
서브클래스에서 구체적인 객체 생성 방법을 결정하는 디자인 패턴이다.
1
2
3
4
5
6
7
8
9
10
11
12
|
public abstract class Parent {
abstract public Connection getConnection();
}
class Child extends Parent {
@override
public Connection getConnection() {
// 구체적인 객체 생성 방식 작성
}
}
|
cs |
훅(hook) 메소드 란?
슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만들어둔 메소드를 훅(hook) 이라고 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public abstract class Parent {
public void templateMethod() {
// algorithm
hookMethod();
abstractMethod();
}
protected void hookMethod() { } // 선택적으로 오버라이드 가능한 훅 메소드
public abstract void abstractMethod(); // 서브클래스에서 반드시 구현해야 하는 추상 메소드
}
public class Child extends Parent {
@override
public void hookMethod() {
}
@override
public void abstractMethod() {
}
}
|
cs |
(3) 전략 패턴 (strategy pattern)
디자인 패턴의 꽃이라고 불리는 패턴.
개방 패쇄 원칙(Open-Closed Principal : 객체지향의 원리 중 하나) 의 실현에도 가장 잘 들어 맞는 패턴.
필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고,
이를 구현한 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴.
아래 예를 보자.
결제 전략을 BillingStrategy 인터페이스로 두고,
BilliingSystem 클래스에서 이 인터페이스의 구현체를 외부로부터 주입받아 사용하는 방식을 말함.
BillingStrategy 가 클래스에서 결제 전략 구현체를 갈아끼워 사용하기만 하면 되기 때문에 편리함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
interface BillingStrategy {
int algorithm_a(int v);
int algorithm_b(int v);
}
public class BillingSystem {
private final BillingStrategy billingStrategy;
public BillingSystem(BillingStrategy billingStrategy) {
this.billingStrategy = billingStrategy;
}
public int calculate(int val) {
return billingStrategy.algorithm_a(val);
}
}
|
cs |
2. 템플릿 메소드 패턴과 팩토리 메소드 패턴 적용의 장/단점
(1) 장점
- 관심사항이 다른 코드를 슈퍼클래스와 서브클래스로 분리해내고, 서로 독립적으로 변경 또는 확장할 수 있도록 만드는 효과적인 방법
(2) 단점
- 슈퍼클래스 내부의 변경이 있을 때 모든 서브클래스를 함께 수정하거나 다시 개발해야 할 가능성이 있음.
- 자바에서 다중상속을 허용하지 않기 때문에 다른 클래스의 기능을 확장하고자 할 때 문제가 될 수 있음.
3. 위 장점은 살리면서, 단점을 개선해보자
관심사항이 다른 것들은 추상 메소드로 분리해, 클래스의 응집도를 높이면서,
상속을 피해 다른 클래스와의 결합도를 낮추는 방법 중
가장 널리 쓰이는 방법이 바로 전략 패턴 (strategy pattern) 이다.
'Web > Spring Framework' 카테고리의 다른 글
hibernate validator (0) | 2020.11.12 |
---|---|
spring async (0) | 2020.11.02 |
스프링의 기초 (0) | 2020.10.24 |