728x90
- 데이터베이스 로직 같은 예외 발생 가능성이 높거나 공유 리소스의 반환이 필요한 코드는 예외 처리 블록으로 별도로 관리해줘야 함
- 일정하게 반복되는 작업 흐름에서 일부만 다른 코드가 존재하는 경우 전략 패턴을 사용하는 것이 좋고, 바뀌지 않는 부분을 컨텍스트, 바뀌는 부분을 전략으로 만들고 이 두 오브젝트를 인터페이스로 유연하게 연결한다.
- 클라이언트 메서드를 통해 직접 전략을 정의하고 제공하여 사용하게 한다.
- 클라이언트 메서드 안에 익명 내부 클래스를 사용하여 전략을 구현하면 클라이언트 메서드의 정보를 사용할 수도 있고 코드를 간결하게 작성할 수 있다.
- 컨텍스트가 여러 클라이언트에서 사용된다면 별도의 클래스로 분리하여 공유되게 만든다.
- 컨텍스트는 별도의 빈으로 등록하여 의존관계를 주입 받거나 클라이언트에서 직접 생성해서 사용한다.
- 템플릿/콜백 패턴은 클라이언트로부터 생성된 콜백 객체를 전달 받아 일정하고 반복적인 로직을 수행하는 템플릿이 상황에 따른 로직을 수행하는 콜백 메서드에 전달할 정보를 생성하여 전달한 후에 콜백 메서드가 전달 받은 정보로 특정 로직을 수행한 후 결과를 리턴하여 템플릿이 최종 결과를 클라이언트에 리턴하는 패턴이다.
- 콜백의 코드에도 일정한 패턴이 반복되면 콜백을 템플릿에 넣고 재활용하는 것이 좋다.
- 템플릿과 콜백의 타입이 다양하게 바뀔 수 있다면 제네릭스를 이용한다. Collback<T>
- 스프링에서는 JDBC를 위해 JdbcTemplate 기반의 템플릿과 콜백을 제공한다.
- 템플릿은 한 번에 여러개의 콜백을 사용하거나, 하나의 콜백을 여러 번 호출 가능하다.
- 템플릿/콜백 패턴을 설계할 때는 사이에 주고 받는 정보를 중요하게 봐야 함.