반응형
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
스택큐힙리스트
CLI Todo 앱으로 배우는 GoF 생성 패턴 5종 완전 활용 본문
반응형
왜 생성 패턴인가?
Todo 앱처럼 단순한 프로그램도 시간이 지나면 기능·저장소·UI가 늘어나면서 ‘객체를 누가, 언제, 어떻게 만들까?’가 중요해집니다. 생성 패턴은 이 고민을 설계 단계에서 지워 줍니다. Naver D2·Velog 인기 글에서도 “객체 생성을 설계에 녹여 두면 리팩터링이 압도적으로 쉽다”는 점이 강조되죠.
1) Singleton – 전역 인스턴스 하나면 충분할 때
- 어디에? Todo 목록을 메모리에 캐싱하는 TaskRepository.
- 핵심: private constructor + static getInstance()로 하나만 유지해 DB 연결·캐시 동기화를 간소화.
public class TaskRepository {
private static final TaskRepository INSTANCE = new TaskRepository();
private TaskRepository() {}
public static TaskRepository getInstance() { return INSTANCE; }
}
⚠️ 테스트 격리엔 DI 컨테이너가 대안 — JUnit에서 Mock 교체가 어려울 수 있음.
2) Factory Method – 역할에 따라 세부 클래스를 숨기기
- 어디에? 명령 파싱 결과로 다양한 Command 객체(Add, List, Done 등) 생성.
- 핵심: CommandFactory가 입력 문자열을 해석해 구체 클래스를 반환 → main()은 공통 인터페이스만 다룸.
public interface Command { void execute(); }
public class CommandFactory {
public static Command of(String arg){
return switch (arg) {
case "add" -> new AddCommand();
case "list" -> new ListCommand();
default -> new HelpCommand();
};
}
}
3) Abstract Factory – 환경에 따라 제품군 교체
- 어디에? 저장 방식이 파일 → DB → REST API로 바뀔 때.
- 핵심: StorageFactory가 TaskRepository, UserRepository 등 호환되는 세트를 한 번에 공급.
public interface StorageFactory {
TaskRepository taskRepo();
UserRepository userRepo();
}
- 이득: 로컬·테스트·프로덕션 환경을 new FileStorageFactory() / new JdbcStorageFactory()로 스위치만 바꿔 교체.
4) Builder – 복잡한 객체를 단계별로 조립
- 어디에? Task 생성 시 선택 옵션(마감일, 우선순위, 태그)이 많을 때.
- 핵심: 가독성과 불변 객체를 동시에 잡기.
Task task = Task.builder("블로그 글쓰기")
.due("2025-07-20")
.priority(1)
.tag("writing")
.build();
- Lombok @Builder를 쓰면 코드가 더욱 간결해져, Velog·Inflearn 강의에서도 ‘Dto → Entity’ 매핑에 단골 예시로 등장합니다.
5) Prototype – 복사로 빠르게 새 인스턴스 만들기
- 어디에? 반복 작업용 템플릿 Task(매주 회의, 매일 스탠드업) 생성.
- 핵심: clone() 또는 copy-constructor로 원본 속성을 복제 후 날짜만 수정.
Task daily = templateTask.clone().shiftDueDate(1);
- 값 객체(Value Object)라면 깊은 복사에 유의: 하위 컬렉션도 새로 만들어야 데이터 충돌을 막습니다.
정리
CLI Todo 앱 하나로도 다섯 가지 생성 패턴을 전부 체험할 수 있습니다.
- Singleton : 전역 캐시·DB 세션 공유
- Factory Method : 입력 유형별 Command 캡슐화
- Abstract Factory : 저장소 제품군 스위치
- Builder : 파라미터 많은 도메인 모델
- Prototype : 템플릿 객체 복제
패턴을 적용해 두면, 기능 추가나 인프라 전환에도 OCP(개방-폐쇄) 를 만족하며 코드를 뜯어고칠 일이 확 줄어듭니다. 지금 프로젝트에 한 패턴만이라도 시도해 보세요—리팩터링 때 진가를 체감합니다!
반응형
'개발' 카테고리의 다른 글
팩토리 메서드 패턴 – 커맨드 객체를 ‘숨겨’ 깔끔 생성하기 (0) | 2025.07.15 |
---|---|
싱글턴 패턴 제대로 쓰는 법 – 전역 인스턴스의 정석 (0) | 2025.07.15 |
자바 스프링 Spring Security 로그인·권한 관리 (0) | 2025.07.14 |
자바 스프링 게시판 DB 연동 (0) | 2025.07.14 |
자바 스프링으로 정적 게시판 만들기 (0) | 2025.07.14 |
Comments