반응형
3장에 나오는 개념을 가볍게 정리하였다.

템플릿 패턴
- 코드에서 변경이 거의 일어나지 않으며 일정한 패턴을 유지하는 부분(고정적인 부분) 을 자유롭게 변경되는 부분(가변적인 부분) 으로부터 독립시켜 효과적으로 활용하는 방법이다.
- 템플릿 패턴을 활용하면 공통 로직을 재사용할 수 있으며, 중복 코드를 줄이고 유지보수성을 높일 수 있다.
템플릿 패턴과 관련된 개념
- 로컬 클래스 (Local Class)
- 특정 메서드 내부에서만 사용되는 중첩 클래스.
- 외부 클래스의 변수를 접근할 수 있다.
- 중첩 클래스 (Nested Class)
- 클래스 내부에 정의된 클래스로, 외부 클래스와 논리적으로 강한 관계를 가지는 경우 사용된다.
- 정적 중첩 클래스(Static Nested Class)와 인스턴스 중첩 클래스(Inner Class)로 나뉜다.
- 익명 내부 클래스 (Anonymous Inner Class)
- 이름 없이 일회성으로 사용되는 클래스.
- 인터페이스나 클래스를 구현하면서 즉시 인스턴스를 생성할 때 사용한다.
스프링에서의 템플릿/콜백 패턴
- 콜백(Callback) 은 실행되는 것을 목적으로 다른 객체의 메서드에 전달되는 객체이다.
- 단순히 값을 전달하는 것이 아니라 특정 로직을 담은 메서드를 실행하는 역할을 한다.
- 스프링에서는 템플릿/콜백 패턴을 활용하여 반복되는 작업 흐름을 캡슐화하고, 가변적인 부분을 콜백 객체를 통해 유연하게 변경할 수 있도록 설계한다.
- 대표적인 예시:
- JdbcTemplate: JDBC API 사용 시 반복되는 리소스 할당 및 해제 로직을 캡슐화하여 간편하게 DB 작업을 수행할 수 있도록 지원한다.
- TransactionTemplate: 트랜잭션 처리 시 일관된 패턴을 유지하면서, 비즈니스 로직을 콜백을 통해 분리하여 처리한다.
전략 패턴과 템플릿 패턴의 적용
- JDBC와 같은 예외가 발생할 가능성이 있으며 공유 리소스의 반환이 필요한 코드는 반드시 try/catch/finally 또는 try-with-resources 블록으로 관리해야 한다.
- 일정한 작업 흐름이 반복되면서 일부 기능만 변경되는 코드가 있다면 전략 패턴(Strategy Pattern) 을 적용할 수 있다.
- 바뀌지 않는 부분은 컨텍스트(Context) 로 유지하고,
- 바뀌는 부분을 전략(Strategy) 인터페이스를 통해 유연하게 변경할 수 있도록 한다.
전략 패턴(Strategy Pattern) 활용
- 같은 애플리케이션 내에서 여러 종류의 전략을 동적으로 구성하고 사용해야 하는 경우, 컨텍스트(Context)를 사용하는 클라이언트 메소드에서 직접 전략을 정의하고 제공할 수 있다.
- 익명 내부 클래스(Anonymous Inner Class) 를 활용하면 전략 객체를 간결하게 정의할 수 있으며, 해당 메소드 내의 정보를 직접 사용할 수 있어 편리하다.
- 컨텍스트가 여러 클라이언트에서 공유된다면, 컨텍스트를 별도의 클래스로 분리하여 재사용성을 높인다.
- 컨텍스트는
- Spring 빈으로 등록하여 DI(의존성 주입) 받거나,
- 클라이언트 클래스에서 직접 생성하여 사용할 수 있다.
- 컨텍스트 내부에서 다른 객체에 의존성이 있는 경우, 코드를 통해 직접 DI를 수행할 수도 있다.
템플릿/콜백 패턴(Template/Callback Pattern) 적용
- 단일 전략 메서드를 갖는 전략 패턴을 기반으로, 익명 내부 클래스를 사용하여 매번 새로운 전략을 생성하고, 컨텍스트 호출과 동시에 전략을 DI(의존성 주입)하는 방식을 템플릿/콜백 패턴이라고 한다.
- 템플릿/콜백 패턴은 고정된 실행 흐름 내에서 특정 부분만 동적으로 변경할 수 있도록 설계하는 데 유용하다.
템플릿과 콜백을 활용한 코드 재사용
- 콜백 코드에도 일정한 패턴이 반복된다면, 콜백을 템플릿에 넣어 재활용하는 것이 효과적이다.
- 템플릿과 콜백의 타입이 다양하게 변할 가능성이 있다면, 제네릭(Generic)을 활용하여 유연성을 높인다.
스프링에서의 템플릿/콜백 패턴 적용 사례
- Spring은 JDBC 코드 작성을 위해 JdbcTemplate 기반의 다양한 템플릿과 콜백을 제공한다.
- 템플릿을 활용하면 반복적인 JDBC 리소스 관리 코드(예: Connection 생성 및 해제)를 캡슐화하여 개발자가 비즈니스 로직에 집중할 수 있도록 도와준다.
- 템플릿은 한 번에 하나 이상의 콜백을 사용할 수도 있고, 하나의 콜백을 여러 번 호출할 수도 있다.
템플릿/콜백 패턴 설계 시 고려 사항
- 템플릿과 콜백 간 주고받는 정보의 흐름에 주의해야 한다.
- 콜백 메서드에서 필요한 파라미터를 명확하게 정의하고, 컨텍스트와의 상호작용이 자연스럽게 이루어지도록 설계해야 한다.
- 콜백 메서드에서 예외 발생 시, 템플릿이 이를 어떻게 처리할 것인지 고려해야 한다.
반응형
'public void static main > Book' 카테고리의 다른 글
[토비의스프링] 6장-AOP (0) | 2025.02.26 |
---|---|
[토비의스프링] 5장-서비스 추상화 (1) | 2025.02.21 |
[토비의스프링] 2장-테스트 (1) | 2025.01.29 |
[Elasticsearch Bible] 1장 소개 ~ 2장 동작과 구조 (1) | 2025.01.29 |
[토비의스프링] 1장-오브젝트와 의존관계 (1) | 2025.01.28 |
댓글