반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 컴퓨터과학
- 네트워크보안
- 자료구조
- I'm Sorry
- 데이터구조
- 자바스크립트
- Yes
- 머신러닝
- 디자인패턴
- 빅데이터
- 데이터베이스
- 클라우드컴퓨팅
- 소프트웨어
- 소프트웨어공학
- 보안
- 데이터과학
- 사이버보안
- 파이썬
- 알고리즘
- 웹개발
- 컴퓨터비전
- 인공지능
- 딥러닝
- 프로그래밍
- 컴퓨터공학
- 네트워크
- 데이터분석
- springboot
- 프로그래밍언어
- 버전관리
Archives
- Today
- Total
스택큐힙리스트
Factory Method vs Template Method ― “누가 만들고, 누가 조립하나?” 본문
반응형
큰 그림 먼저
두 패턴 모두 코드 중복을 줄이고 역할을 쪼개기 위한 도구지만, 초점이 다르다.
- Factory Method는 “어떤 객체를 만들지?”에 대한 생성 책임을 서브클래스에 넘긴다. API 사용자는 “어떤 구체 클래스인지” 모르는 채로 인스턴스를 받아 쓴다.
- Template Method는 “만들어진 객체가 어떻게 일할까?”에 대한 행위 흐름을 부모가 고정하고, 변동 단계만 자식에게 맡긴다.
둘을 조합하면 “공통 알고리즘 뼈대”는 Template Method로 잡고, 그 과정에서 필요한 “구체 객체”는 Factory Method로 생성하도록 설계할 수 있다. 예컨대 스프링 DispatcherServlet이 요청 흐름(Template) 안에서 View 객체를 뽑아낼 때 ViewResolver가 Factory Method 역할을 한다고 국내 인기 블로그들도 자주 소개한다.
코틀린 감각으로 비교해 보기
// 템플릿 메서드: 알고리즘 골격
abstract class ReportJob {
fun run() {
val reader = createReader() // ★ Factory Method 호출
val data = reader.read()
format(data)
send()
}
protected abstract fun createReader(): DataReader // Factory Method
protected abstract fun format(d: String)
protected open fun send() = println("메일 전송 완료")
}
// 팩토리 메서드: 객체 생성 책임
class CsvReportJob : ReportJob() {
override fun createReader() = CsvReader()
override fun format(d: String) = println("CSV 서식: $d")
}
class CsvReader : DataReader { override fun read() = "매출,10000" }
interface DataReader { fun read(): String }
fun main() { CsvReportJob().run() }
- run() 흐름은 Template Method — 절차를 바꿀 수 없다.
- createReader()는 Factory Method — 어떤 Reader를 만들지는 자식이 결정한다.
이렇게 분리하면 새로운 리더(JsonReader) 를 추가할 때 기존 알고리즘은 그대로 두고, 생성 책임만 새 하위 클래스가 맡는다.
언제 어떤 패턴이 유리할까?
- Factory Method
- 여러 제품군이 늘어날 때 “객체 생성 로직”을 갈아끼워야 한다.
- IoC 컨테이너·DI 프레임워크와 찰떡궁합.
- Template Method
- 동일한 작업 흐름이 반복되지만 중간 단계가 조금씩 다를 때.
- 프레임워크가 제어권을 갖고, 개발자는 훅만 구현하길 원할 때.
팁: 생성 로직이 복잡해지면 Factory Method를 Abstract Factory로 키우고, 흐름 제어가 런타임에 바뀌어야 하면 Template 대신 Strategy로 교체하라.
반응형
'개발' 카테고리의 다른 글
책임을 넘겨라! Chain of Responsibility 한방 정복 (2) | 2025.07.28 |
---|---|
명령을 객체로! 커맨드 패턴으로 유연한 실행 로직 만들기 🚀 (2) | 2025.07.28 |
명령을 객체로! 커맨드 패턴으로 유연한 실행 로직 만들기 🚀 (1) | 2025.07.23 |
프론트엔드와 API 통합 테스트 전략 (2) | 2025.07.23 |
자바 스프링 개발 시작하기 - 15일차 실전 프로젝트 완주 (0) | 2025.07.23 |
Comments