ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [디자인 패턴] Template Callback Pattern (템플릿 콜백 패턴)
    디자인 패턴 2022. 1. 3. 16:08
    반응형

    이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.

    틀리거나 잘못된 정보가 있을 수 있습니다.

    댓글로 알려주시면 수정하도록 하겠습니다.


     

    1. 템플릿 콜백 패턴이란

    코드를 작성하다 보면 반복되고 일정한 형태를 유지하지만 조금의 작업 흐름이 다른 코드들이 존재하게 됩니다.

     

    이때 코드의 일부분은 고정되어 변화가 없지만 일부는 작업의 흐름에 따라 변경되는 부분이 있습니다.

     

    이 경우 디자인 패턴 중 전략 패턴이라는 디자인 패턴을 사용합니다.

     

    여기서 더 나아가 익명 내부 클래스를 활용하여 디자인한 패턴이 바로 템플릿 콜백 패턴이라고 합니다.

     

    2. 템플릿과 콜백

    템플릿은 전략 패턴의 콘텍스트 템플릿이라 하며 콜백은 익명 내부 클래스로 만들어지는 오브젝트를 말합니다.

     

    쉽게 말해 템플릿은 고정된 틀을 말하며 콜백은 고정된 틀 안에서 변경되는 부분을 말합니다.

     

    3. 전략 패턴 VS 템플릿 콜백 패턴

    템플릿 콜백 패턴은 전략 패턴에서 익명 내부 클래스를 활용하여 만들어진 패턴으로 큰 틀에서는 전략 패턴과 아주 유사합니다.

     

    하지만 전략 패턴의 전략 인터페이스의 경우 다수의 메소드가 존재할 수 있지만 템플릿 콜백 패턴의 콜백의 인터페이스의 경우 단일 메서드를 사용합니다.

     

    그러므로 익명 내부 클래스는 콜백의 단일 메소드를 구현하여 만들어집니다.

     

    4. 구현 예제

    예제는 SortTemplate 클래스와 SortCallback 인터페이스를 정의하였습니다.

     

    Client는 정렬하고자 하는 숫자의 개수를 Template의 파라미터로 전달하면 Template은 해당 개수만큼 Random숫자를 생성하고 CallBack으로 구현된 Sort 작업을 수행합니다.

     

    정렬은 오름차순, 내림차순 두 가지 정렬을 구현하고자 합니다.

     

    BubbleSort Class에 오름차순 정렬과 내림차순 정렬 메서드를 정의하여 메소드를 호출하여 정렬을 진행할 수 있습니다.

     

    하지만 두 메서드는 고정된 부분이 존재하는 것을 확인할 수 있습니다.

    붉은 부분을 제외한 나머지는 동일한 작업을 진행합니다. 그러므로 이 부분을 템플릿으로 만들고 붉은 부분을 콜백으로 만들어 템플릿 콜백 디자인 패턴을 적용해 보겠습니다.

     

    Client는 Template의 메서드를 호출하는 대상이 됩니다. 그러므로 이번 예제에서는 SortTemplate을 호출하는 Test 메서드가 바로 Client가 되는 것입니다.

     

    SortTemplate에는 Sort라는 메서드가 있습니다. 이 메서드는 Client가 전달한 파라미터의 숫자만큼 Random 수를 생성하여 배열을 초기화하고 CallBack 파라미터로 전달된 익명 내부 클래스로 배열을 전달합니다.

     

    이렇게 익명 내부 클래스에 전달된 배열은 콜백에 작성된 작업으로 정렬을 진행하게 됩니다. 예제에서는 버블 소트를 이용하여 정렬을 진행하도록 작성했습니다.

     

    이런 정렬 작업을 누군가는 내림차순으로 정렬하고자 하는 경우도 있을 것입니다.

     

    이때는 Tempalte의 Sort를 변경하는 것이 아닌 CallBack인 익명 내부 클래스를 내림차순 정렬로 작성하여 전달하면 내림차순으로 정렬되어 결과가 반환되는 것을 알 수 있습니다.

     

    테스트 결과로 정렬이 정상적으로 오름차순, 내림차순으로 정렬된 배열을 반환하는 것을 알 수 있습니다.

     

    사용된 예제 코드는 Git에 있습니다.

    반응형

    '디자인 패턴' 카테고리의 다른 글

    [디자인 패턴] 전략 패턴 Strategy Pattern  (0) 2022.01.08

    댓글

Designed by Tistory.