반응형
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
스택큐힙리스트
Abstract Factory로 저장소 ‘제품군’ 한방에 갈아타기 본문
반응형
“환경만 바꿔 끼우면 전(全) 레포지토리가 따라온다”
왜 Abstract Factory인가?
CLI Todo 앱이 처음엔 로컬 파일에 데이터를 쓰다가, 팀 프로젝트로 커지면서 MySQL→REST API로 저장 방식을 바꾸게 됐다고 가정해 보죠. TaskRepository, UserRepository, TagRepository처럼 서로 연관된 객체 세트를 한 번에 교체해야 할 때, 클래스마다 new를 고치기 시작하면 지옥문이 열립니다.
국내 개발자 커뮤니티에서 조회수가 높은 Inpa의 패턴 정리 글도 “추상 팩토리는 ‘제품 군’ 단위로 타입을 찍어내 확장성을 확보한다”는 점을 강조합니다.
패턴 한 줄 정의
서브클래스가 관련 객체 군을 생성하도록 위임해 클라이언트는 인터페이스만 의존하게 만드는 생성 패턴.
Velog 인기 포스트 역시 “팩토리 메서드를 한 단계 더 추상화해 환경 스위치를 우아하게 한다”고 설명하죠.
Todo 앱 적용 시나리오
- 추상 제품 인터페이스
public interface TaskRepository { … } public interface UserRepository { … }
- 추상 팩토리
public interface StorageFactory { TaskRepository taskRepo(); UserRepository userRepo(); }
- 구체 팩토리 & 제품군
public class FileStorageFactory implements StorageFactory { public TaskRepository taskRepo() { return new FileTaskRepo(); } public UserRepository userRepo() { return new FileUserRepo(); } } public class JdbcStorageFactory implements StorageFactory { public TaskRepository taskRepo() { return new JdbcTaskRepo(); } public UserRepository userRepo() { return new JdbcUserRepo(); } }
- 클라이언트 사용
StorageFactory factory = ENV.isProd() ? new JdbcStorageFactory() : new FileStorageFactory(); TaskRepository taskRepo = factory.taskRepo(); UserRepository userRepo = factory.userRepo();
팩토리만 교체했을 뿐, 나머지 코드에 손도 대지 않았습니다!
장점 한눈에
- 제품군 일관성: Task/User 레포지토리가 같은 저장소 전략을 자동으로 공유.
- OCP 만족: 새 환경 추가 시 ‘팩토리 & 제품’ 세트만 만들면 끝.
- 테스트 유연성: InMemoryStorageFactory로 단위 테스트 속도 극대화.
주의할 점
- 클래스 폭증: 제품·팩토리 쌍이 늘어남에 따라 파일 수가 급격히 증가.
- 단순한 앱엔 과하다: 저장소가 하나뿐이라면 그냥 DI 컨테이너로 충분.
실전 팁
- Spring에선 프로파일(profile) + Bean 구성으로 추상 팩토리 효과를 그대로 낼 수 있습니다.
- 팩토리 자동 등록: 자바 ServiceLoader나 Kotlin KSP로 새 저장소 모듈을 플러그인처럼 끼워넣어 보세요.
- 빌더·팩토리 조합: 제품 중 일부만 변할 때는 팩토리로 큰 틀을 잡고, 세부 옵션은 빌더로 조립하면 코드가 더 깔끔합니다.
결론
Abstract Factory 패턴은 “환경 교체 = 팩토리 교체”라는 간단한 계약으로, 저장 전략이 잦은 팀 프로젝트에서 리스크와 수정 비용을 획기적으로 줄여 줍니다. 지금 Todo 앱에 ‘파일 ↔ DB’ 스위치를 꽂아 보고, 한 단계 더 유연한 아키텍처를 경험해 보세요.
반응형
'개발' 카테고리의 다른 글
프로토타입 패턴: 객체 ‘복붙’으로 인스턴스 생성 가속하기 (1) | 2025.07.16 |
---|---|
Builder 패턴으로 Todo 객체 한방에 완성하기 (0) | 2025.07.16 |
팩토리 메서드 패턴 – 커맨드 객체를 ‘숨겨’ 깔끔 생성하기 (0) | 2025.07.15 |
싱글턴 패턴 제대로 쓰는 법 – 전역 인스턴스의 정석 (0) | 2025.07.15 |
CLI Todo 앱으로 배우는 GoF 생성 패턴 5종 완전 활용 (0) | 2025.07.15 |
Comments