Young

스프링 프레임워크 주요 디자인 패턴 본문

Web/Spring Framework

스프링 프레임워크 주요 디자인 패턴

yyjjang9 2020. 10. 24. 01:18
728x90
반응형

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) 이다.

 

 

 

 

 

 

 

728x90
반응형

'Web > Spring Framework' 카테고리의 다른 글

hibernate validator  (0) 2020.11.12
spring async  (0) 2020.11.02
스프링의 기초  (0) 2020.10.24