0Pricing
Java Academy · 강의

Template Method: 알고리즘 뼈대 정의

기본 클래스에 알고리즘의 뼈대를 정의하고 하위 클래스가 각 단계를 채우도록 합니다.

Template Method: 알고리즘 뼈대 정의은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

템플릿 메서드의 의도

템플릿 메서드는 기본 클래스에서 알고리즘의 뼈대를 정의하고 일부 단계를 하위 클래스에 맡깁니다. 하위 클래스는 전체 구조를 변경하지 않고 단계를 재정의할 수 있습니다.

추상 기본 클래스

기본 클래스에는 단계를 조정하는 템플릿 메서드(대개 final)가 있습니다. abstract 메서드는 달라지는 단계를 나타냅니다. 구체 메서드는 기본 동작을 제공합니다.

public abstract class DataProcessor {
    // Template method — final, defines the algorithm
    public final void process() {
        readData();
        processData();
        writeResult();
    }
    protected abstract void readData();
    protected abstract void processData();
    protected void writeResult() {
        System.out.println("Result written (default)");
    }
}

구체적인 하위 클래스

각 하위 클래스는 abstract 단계를 구현합니다. 템플릿 메서드의 순서는 절대 바뀌지 않고, 개별 단계의 구현만 달라집니다.

public class CSVProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading CSV..."); }
    protected void processData() { System.out.println("Parsing CSV rows..."); }
}
public class XMLProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading XML..."); }
    protected void processData() { System.out.println("Parsing XML nodes..."); }
    @Override
    protected void writeResult() { System.out.println("Writing XML result."); }
}

후크 메서드

후크는 기본 구현(대개 비어 있음)이 제공되는 선택적 단계입니다. 하위 클래스는 후크를 재정의하여 구현을 강제받지 않고 선택적 동작을 추가할 수 있습니다.

public abstract class Game {
    public final void play() {
        initialize();
        while (!isDone()) takeTurn();
        printWinner();
    }
    protected void initialize() {}  // hook — optional override
    protected abstract boolean isDone();
    protected abstract void takeTurn();
    protected abstract void printWinner();
}

템플릿 메서드와 전략

템플릿 메서드는 상속을 사용합니다. 뼈대는 기본 클래스에 고정되고 단계는 하위 클래스에서 재정의됩니다. 전략은 구성을 사용하므로 전체 알고리즘이 외부에 존재합니다. 전략은 더 유연하고, 단계가 많은 컨텍스트를 공유할 때는 템플릿 메서드가 더 단순합니다.

템플릿 메서드로서의 Java InputStream

java.io.InputStream의 read(byte[], int, int)는 abstract read()를 기반으로 구현됩니다. 하위 클래스는 1바이트 버전을 구현하고, 여러 바이트를 읽는 기능이 템플릿 역할을 합니다.

보고서 생성을 위한 템플릿 메서드

보고서 템플릿을 정의하십시오. 데이터를 수집하고 형식을 지정한 다음 출력합니다. 조정 로직을 변경하지 않고 하위 클래스를 교체하여 PDF, HTML 또는 CSV로 출력할 수 있습니다.

public abstract class ReportGenerator {
    public final String generate() {
        List<Record> data = fetchData();
        String body = format(data);
        return wrap(body);
    }
    protected abstract List<Record> fetchData();
    protected abstract String format(List<Record> data);
    protected String wrap(String body) { return body; } // hook
}

템플릿 재정의 방지

하위 클래스가 알고리즘의 구조를 변경하지 못하도록 템플릿 메서드를 final로 선언하십시오. 재정의할 수 있어야 하는 것은 후크와 abstract 메서드뿐입니다.

public final void process() {
    validate(); // abstract
    execute();  // abstract
    cleanup();  // hook with default
}

추상 단계와 구체 단계

하위 클래스가 반드시 제공해야 하는 단계라면 abstract로 만드십시오. 하위 클래스가 사용자 지정 목적으로 재정의할 수 있는 단계라면 비어 있더라도 구체 메서드로 만드십시오.

JUnit의 템플릿 메서드

JUnit 4의 setUp()과 tearDown()은 테스트 실행기가 정의한 템플릿 메서드의 후크입니다. 실행기가 이 메서드들이 호출되는 시점을 제어합니다.

Spring의 템플릿 메서드

Spring의 JdbcTemplate은 내부적으로 템플릿 메서드를 사용합니다. 템플릿이 연결, 명령문 생성, 정리를 제어하고, 달라지는 “행 매핑” 단계에는 RowMapper 람다를 제공합니다.

List<User> users = jdbcTemplate.query(
    "SELECT * FROM users",
    (rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);

깊은 상속 피하기

템플릿 메서드는 상속에 의존하므로 깊은 클래스 계층 구조가 만들어질 수 있습니다. 상속은 1~2단계로 제한하십시오. 하위 클래스가 여러 단계를 서로 다르게 재정의하기 시작한다면 전략으로 전환하는 것을 고려하십시오.

빠른 확인

하위 클래스가 템플릿 메서드의 순서를 변경하지 못하도록 하는 키워드는 무엇입니까?

복습

템플릿 메서드는 final을 사용하여 기본 클래스에 알고리즘의 뼈대를 고정합니다. 하위 클래스는 abstract 단계를 구현하고 후크를 선택적으로 재정의합니다. 계층 구조를 얕게 유지하고, 더 큰 유연성이 필요할 때는 전략을 사용하십시오.

자주 묻는 질문

“Template Method: 알고리즘 뼈대 정의” 강의는 무료인가요?

네 — “Template Method: 알고리즘 뼈대 정의” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Template Method: 알고리즘 뼈대 정의”에서 뭘 배우나요?

기본 클래스에 알고리즘의 뼈대를 정의하고 하위 클래스가 각 단계를 채우도록 합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“Template Method: 알고리즘 뼈대 정의” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Observer 패턴: 이벤트 알림
  2. Strategy 패턴: 교체 가능한 알고리즘
  3. Command 패턴: 동작 캡슐화
  4. Template Method: 알고리즘 뼈대 정의
← Java Academy(으)로 돌아가기