반응형
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
- 데이터분석
- springboot
- 네트워크
- 소프트웨어
- 프로그래밍언어
- 데이터베이스
- 디자인패턴
- 자료구조
- 프로그래밍
- 데이터구조
- 자바스크립트
- 웹개발
- 사이버보안
- 인공지능
- 머신러닝
- Yes
- 알고리즘
- 버전관리
- 데이터과학
- I'm Sorry
- 네트워크보안
- 컴퓨터과학
- 소프트웨어공학
- 보안
- 컴퓨터공학
- 파이썬
- 컴퓨터비전
- 빅데이터
- 딥러닝
- 클라우드컴퓨팅
Archives
- Today
- Total
스택큐힙리스트
프로토타입 패턴: 객체 ‘복붙’으로 인스턴스 생성 가속하기 본문
반응형
내용
왜 프로토타입(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를 도입해 보고, 매번 입력하던 반복 필드를 ‘복붙’으로 해결해 보세요.
반응형
'개발' 카테고리의 다른 글
Swagger UI로 API 문서 자동화 & 협업 꿀팁 (1) | 2025.07.16 |
---|---|
자바 스프링 개발 시작하기 - 9일차 Controller·DTO·예외 처리로 끝내는 CRUD (1) | 2025.07.16 |
Builder 패턴으로 Todo 객체 한방에 완성하기 (0) | 2025.07.16 |
Abstract Factory로 저장소 ‘제품군’ 한방에 갈아타기 (0) | 2025.07.15 |
팩토리 메서드 패턴 – 커맨드 객체를 ‘숨겨’ 깔끔 생성하기 (0) | 2025.07.15 |
Comments