반응형
자바로 객체 지향 프로그래밍을 하다 보면 유지보수성과 확장성을 고려한 설계가 필수입니다. 이를 가능하게 해주는 도구 중 하나가 바로 *디자인 패턴(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) 등을 익히면, 자바 소프트웨어 설계에 더욱 강력한 힘을 얻게 됩니다 💪
반응형
'자바 > 객체 지향 프로그래밍' 카테고리의 다른 글
Getter/Setter 패턴과 정보 은닉 (1) | 2025.05.02 |
---|---|
인터페이스 vs 추상 클래스 & 다형성 기반 전략 패턴 활용 가이드 (1) | 2025.04.30 |
자바의 다형성(Polymorphism) 완전 이해하기 (0) | 2025.04.29 |
자바의 오버로딩(Overloading)과 오버라이딩(Overriding) 완전 정복 (1) | 2025.04.28 |
상속(Inheritance)과 코드 재사용 - 자바 객체지향 설계의 핵심 (1) | 2025.04.27 |