자바/객체 지향 프로그래밍

자바 디자인 패턴: 템플릿 메서드 패턴과 팩토리 패턴 완전 정복

끄적인다 2025. 5. 1. 23:43
반응형

자바로 객체 지향 프로그래밍을 하다 보면 유지보수성과 확장성을 고려한 설계가 필수입니다. 이를 가능하게 해주는 도구 중 하나가 바로 *디자인 패턴(Design Pattern)* 입니다.

이번 글에서는 자주 쓰이면서도 핵심적인 디자인 패턴인 템플릿 메서드 패턴팩토리 패턴을 개념부터 코드 예제까지 시각적으로 정리해봅니다.


📐 1. 템플릿 메서드 패턴 (Template Method Pattern)

📘 정의

템플릿 메서드 패턴은 알고리즘의 구조를 상위 클래스에서 정의하고, 구현의 일부를 하위 클래스에서 결정하는 패턴입니다.

핵심은: 공통 로직은 부모 클래스에, 세부 구현은 자식 클래스에!

🧰 예제 코드

abstract class Game {
    void play() {
        start();
        playing();
        end();
    }

    abstract void start();
    abstract void playing();
    abstract void end();
}

class Soccer extends Game {
    void start() {
        System.out.println("축구 경기 시작!");
    }
    void playing() {
        System.out.println("축구 경기 중...");
    }
    void end() {
        System.out.println("축구 경기 종료!");
    }
}
public class Main {
    public static void main(String[] args) {
        Game game = new Soccer();
        game.play();
    }
}

✅ 언제 쓰나?

  • 알고리즘의 공통 흐름은 고정하되, 특정 단계는 유연하게 변경할 때
  • 코드 중복을 줄이고 일관된 프로세스를 유지할 때

🏭 2. 팩토리 패턴 (Factory Pattern)

📘 정의

팩토리 패턴은 객체 생성을 전담하는 팩토리 클래스를 따로 두어 클라이언트 코드가 객체 생성 방식을 알 필요 없이 객체를 사용할 수 있게 만드는 패턴입니다.

핵심은: 객체 생성을 분리하여 코드의 결합도를 낮춘다!

🧰 예제 코드

interface Animal {
    void speak();
}

class Dog implements Animal {
    public void speak() {
        System.out.println("멍멍");
    }
}

class Cat implements Animal {
    public void speak() {
        System.out.println("야옹");
    }
}

class AnimalFactory {
    public static Animal getAnimal(String type) {
        if (type.equals("dog")) return new Dog();
        else if (type.equals("cat")) return new Cat();
        else throw new IllegalArgumentException("Unknown animal type");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal dog = AnimalFactory.getAnimal("dog");
        dog.speak();

        Animal cat = AnimalFactory.getAnimal("cat");
        cat.speak();
    }
}

✅ 언제 쓰나?

  • 객체 생성 로직을 숨기고 싶을 때
  • 클라이언트 코드가 다양한 객체 타입을 쉽게 다루게 하고 싶을 때
  • 결합도를 낮추고, 코드 변경에 유연하게 대응하고 싶을 때

🔍 비교 요약 표

항목템플릿 메서드 패턴팩토리 패턴

목적 알고리즘 구조 고정 + 단계별 구현 분리 객체 생성 책임 분리
핵심 구성 추상 클래스 + 오버라이딩 인터페이스 + 정적 메서드 또는 팩토리 클래스
확장성 알고리즘 단계 변경 가능 새로운 객체 타입 생성 시 용이

🧠 마무리

자바 디자인 패턴 중 템플릿 메서드와 팩토리 패턴은 코드 구조를 깔끔하게 유지하고, 변화에 유연하게 대응하는 설계를 할 수 있게 해줍니다.

  • 템플릿 메서드: 알고리즘의 뼈대를 유지하면서 세부 구현은 유연하게!
  • 팩토리 패턴: 객체 생성을 외부로 분리해 코드 결합도를 낮추자!

다음 단계로는 싱글턴(Singleton) 패턴, 옵저버(Observer) 패턴, 디펜던시 인젝션(DI) 등을 익히면, 자바 소프트웨어 설계에 더욱 강력한 힘을 얻게 됩니다 💪

반응형