스택큐힙리스트

Abstract Factory로 저장소 ‘제품군’ 한방에 갈아타기 본문

개발

Abstract Factory로 저장소 ‘제품군’ 한방에 갈아타기

스택큐힙리스트 2025. 7. 15. 22:18
반응형

“환경만 바꿔 끼우면 전(全) 레포지토리가 따라온다”

 

왜 Abstract Factory인가?

CLI Todo 앱이 처음엔 로컬 파일에 데이터를 쓰다가, 팀 프로젝트로 커지면서 MySQLREST API로 저장 방식을 바꾸게 됐다고 가정해 보죠. TaskRepository, UserRepository, TagRepository처럼 서로 연관된 객체 세트를 한 번에 교체해야 할 때, 클래스마다 new를 고치기 시작하면 지옥문이 열립니다.
국내 개발자 커뮤니티에서 조회수가 높은 Inpa의 패턴 정리 글도 “추상 팩토리는 ‘제품 ’ 단위로 타입을 찍어내 확장성을 확보한다”는 점을 강조합니다.


패턴 한 줄 정의

서브클래스가 관련 객체 군을 생성하도록 위임해 클라이언트는 인터페이스만 의존하게 만드는 생성 패턴.

Velog 인기 포스트 역시 “팩토리 메서드를 한 단계 더 추상화해 환경 스위치를 우아하게 한다”고 설명하죠.


Todo 앱 적용 시나리오

  1. 추상 제품 인터페이스
    public interface TaskRepository { … }
    public interface UserRepository { … }
  2. 추상 팩토리
    public interface StorageFactory {
        TaskRepository taskRepo();
        UserRepository userRepo();
    }


  3. 구체 팩토리 & 제품군
    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(); }
    }
  4. 클라이언트 사용
    StorageFactory factory = ENV.isProd()
        ? new JdbcStorageFactory()
        : new FileStorageFactory();
    
    TaskRepository taskRepo = factory.taskRepo();
    UserRepository userRepo = factory.userRepo();

팩토리만 교체했을 뿐, 나머지 코드에 손도 대지 않았습니다!

 

 


장점 한눈에

  • 제품군 일관성: Task/User 레포지토리가 같은 저장소 전략을 자동으로 공유.
  • OCP 만족: 새 환경 추가 시 ‘팩토리 & 제품’ 세트만 만들면 끝.
  • 테스트 유연성: InMemoryStorageFactory로 단위 테스트 속도 극대화.

주의할 점

  • 클래스 폭증: 제품·팩토리 쌍이 늘어남에 따라 파일 수가 급격히 증가.
  • 단순한 앱엔 과하다: 저장소가 하나뿐이라면 그냥 DI 컨테이너로 충분.

실전 팁

  1. Spring에선 프로파일(profile) + Bean 구성으로 추상 팩토리 효과를 그대로 낼 수 있습니다.
  2. 팩토리 자동 등록: 자바 ServiceLoader나 Kotlin KSP로 새 저장소 모듈을 플러그인처럼 끼워넣어 보세요.
  3. 빌더·팩토리 조합: 제품 중 일부만 변할 때는 팩토리로 큰 틀을 잡고, 세부 옵션은 빌더로 조립하면 코드가 더 깔끔합니다.

결론

Abstract Factory 패턴은 “환경 교체 = 팩토리 교체”라는 간단한 계약으로, 저장 전략이 잦은 팀 프로젝트에서 리스크와 수정 비용을 획기적으로 줄여 줍니다. 지금 Todo 앱에 ‘파일 ↔ DB’ 스위치를 꽂아 보고, 한 단계 더 유연한 아키텍처를 경험해 보세요.

반응형
Comments