스택큐힙리스트

프로토타입 패턴: 객체 ‘복붙’으로 인스턴스 생성 가속하기 본문

개발

프로토타입 패턴: 객체 ‘복붙’으로 인스턴스 생성 가속하기

스택큐힙리스트 2025. 7. 16. 07:25
반응형

내용

왜 프로토타입(Prototype)인가?
CLI Todo 앱에서 “매주 팀 회의”, “매일 운동”처럼 반복되는 Task를 만들 때마다 new Task()로 필드를 모두 채우면 지루하고 비효율적입니다. 프로토타입 패턴은 이미 준비된 객체를 복사 해서 새 인스턴스를 얻도록 해 주어, 클래스에 직접 의존하지 않고도 빠르게 객체를 만들 수 있게 합니다


언제 빛을 발할까?

  • 생성 비용이 큰 객체: DB 쿼리나 네트워크 요청으로 초기화되는 무거운 객체를 여러 번 만들 때
  • 템플릿·프리셋이 많은 도메인: 일정, 문서·메일 템플릿처럼 기본값이 대부분 같은 경우
  • 런타임에 클래스가 확정되는 플러그인 구조: 클래스 정보를 모를 때도 복제가 가능

Todo 앱 적용 예시 (Java)

public class Task implements Cloneable {
    private String title;
    private LocalDate due;
    private int priority;
    private List<String> tags;

    // 복사 생성자 이용
    public Task(Task source) {
        this.title    = source.title;
        this.due      = source.due;
        this.priority = source.priority;
        this.tags     = new ArrayList<>(source.tags); // 깊은 복사!
    }

    @Override
    public Task clone() {
        return new Task(this);  // copy constructor 호출
    }
}
// 템플릿 생성
Task standupTemplate = Task.builder("Daily Stand-up")
                           .priority(1)
                           .tags(List.of("meeting"))
                           .build();

// 오늘 회의 복제
Task todayStandup = standupTemplate.clone();
todayStandup.setDue(LocalDate.now());
 

위처럼 복사 후 일부 값만 수정하면, 일정 생성이 “한 줄”로 끝납니다.


얕은 복사 vs 깊은 복사

  • 얕은 복사: 필드가 참조 타입이면 주소만 복제해 원본·사본이 같은 내부 객체를 가리킵니다. 작은 예제에선 편하지만, 태그 리스트를 수정하면 원본까지 바뀌는 사고가 납니다
  • 깊은 복사: 참조 필드도 새로 만들어 완전히 독립시킵니다. 컬렉션은 new ArrayList<>(original)처럼 방어적 복사를 지켜야 합니다

: 불변(immutable) 값 객체를 사용하면 얕은 복사로도 안전해 메모리를 아낄 수 있습니다.


장점 한눈에

  • 성능 최적화: 무거운 초기화 과정을 한 번만 실행
  • 유연성: 클래스 정보 없이도 clone()만 있으면 복제 가능
  • 템플릿화: 반복 업무를 코드 레벨에서 간편 자동화

주의할 점

  • Cloneable 인터페이스만 구현하고 깊은 복사를 빼먹으면 버그의 온상이 됩니다.
  • 복사 생성자나 정적 copyOf() 메서드로 명시적 복제를 구현하면 가독성과 안정성이 높아집니다.

정리
프로토타입 패턴은 “복사 → 부분 수정”이라는 단순한 아이디어로 생성 비용 절감코드 가독성을 동시에 챙깁니다. Todo 앱에 템플릿 Task를 도입해 보고, 매번 입력하던 반복 필드를 ‘복붙’으로 해결해 보세요.

반응형
Comments