템플릿/콜백 방식은 전략 패턴과 DI의 장점을 익명 내부 클래스 방식과 결합하는 방법을 사용한다.
1. Template
- 어떤 목적을 위해 미리 만들어둔 틀을 말하며, 이 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 효율적으로 사용된다.
- 고정된 작업 흐름을 가진 코드를 재사용할 때 유용하게 쓰인다.
- Template/Callback 패턴에서 Callback 오브젝트를 받는 곳이다.
2. Callback
- 다른 오브젝트에서 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달하는 오브젝트로, 주로 파라미터를 통해 전달된다.
- 다른 오브젝트에서 콜백 오브젝트의 값을 참조하기보다는, 콜백 오브젝트의 메소드를 실행시키기 위한 목적으로 사용된다.
- 일반적으로 하나의 메소드를 가진 인터페이스를 구현한 익명 내부 클래스로 만들어진다.
3. Template/Callback의 흐름
위의 그림과 같이 보면 이해가 빨리 될 것이다.
-> 먼저, 클라이언트에서는 Template으로 보낼 Callback 오브젝트를 만든다. 이 때 클라이언트는 Template에서 수행해주기를 바라는 메소드를 가진 인터페이스를 구현한 익명 내부 클래스를 작성한다.
-> Callback 오브젝트를 Template 메소드의 파라미터로 전달한다.
-> Template에서는 정해진 알고리즘으로 작업을 진행하면서 클라이언트에게 받은 Callback 오브젝트를 사용(메소드 호출)한다.
-> Callback 오브젝트의 메소드가 작업을 수행하고 수행 결과를 Template에 돌려준다.
-> 그 수행 결과를 통해 Template은 남은 작업을 진행하고 Template이 최종적으로 수행한 결과를 클라이언트에게 전달한다.
이렇게 Template/Callback 패턴은 알고리즘을 추상화해서 중간 과정을 갈아 끼워넣는 전략 패턴을 잘 이용한 패턴이다.
● 참고 자료 : 토비의 스프링 3.1
'Spring Series > Spring Framework' 카테고리의 다른 글
[Spring] 트랜잭션 추상화 (0) | 2022.03.27 |
---|---|
[Spring] 예외처리 전략 (0) | 2022.03.20 |
[Spring] 테스트 코드의 작성 (0) | 2022.03.10 |
[Spring] @Value가 null을 가져오는 문제 (0) | 2022.03.06 |
[Spring] 상속/인터페이스를 통한 확장 (0) | 2022.03.04 |
댓글