Prototype 패턴

2026. 4. 17. 19:58·복습/소프트웨어디자인패턴

프로토타입 패턴이란?

클래스부터 인스턴스를 새로 만드는게 아닌,

인스턴트를 복사해서 새로운 인스턴스를 만드는 것이다!

객체로부터 객체 생성

 

왜 인스턴스를 복제하지요?

1. 종류가 너무 많아서 클래스로 정리불가

2. 클래스로부터 인스턴스 생성이 어려움

ex) 사용자가 마우스로 그린 도형을 나타내는 인스턴스: 똑같이 그리는거 힘듦

3. 인스턴스 생성 프레임워크를 특정 클래스에 의존하지 않게 하고 싶을 경우 (예제)

 

java에는 clone이라는 기능을 제공하고 있음. <- Clonable 인터페이스를 구현한 class에 한하

 

manager class (client)에 messageBox 객체와 UnderlinePen 객체를 등록한 후 -> prototype

두 객체의 복제품을 얻어가는 형식

 

public class Manager {
	private Map<String,Product> showcase = new HashMap<>();
	public void register(String name, Product prototype) {
		showcase.put(name, prototype);
	}
	public Product create(String prototypeName) {
		Product p = showcase.get(prototypeName);
		return p.createCopy();
	}
}

showcase

객체 유형을 저장하는 객체

HashMap<>형태로 key,value값을 저장한다.

create: 프로토타입의 이름(key)를 입력받아, value(객체)를 찾고, 객체를 복제해서 반환함.

 

public class UnderlinePen implements Product {
	private char ulchar;

	public UnderlinePen(char ulchar) {
		this.ulchar = ulchar;
	}
	public void use(String s) {
		int ulen = s.length();
		System.out.println(s);
		for (int i = 0; i < ulen; i++) {
			System.out.print(ulchar);
		}
		System.out.println();
	}
	public Product createCopy() {
		Product p = null;
		try {
			p = (Product)clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return p;
	}
}

 

createCopy: 지역변수 p 를 상위 class로 초기화 -> 객체 복제 후 지역변수 p에 저장

꼭 예외처리를 해줘야한다!!

메소드변수 p는 Product type인데, 변수의 타입이 꼭 Clonable 인터페이스를 구현해야한다.

예외처리 안해주면 프로그램 터짐~~!

 

+ clone() 메소드는 Clonable인터페이스가 아닌, java.lang.Object에 정의되어있으므로,

모든 class에서 clone 메소드를 상속하고 있다!

 

+ clone()은 깊은복사x 얕은복사o

즉, 메모리를 그대로 복사하는것이 아닌, 값만 복사함!

그러므로 같은 메모리 주솟값을 가짐.

깊은복사는 메모리를 그대로 복사하므로 메모리주소가 서로 다른 독립적인 관계를 가짐.

'복습 > 소프트웨어디자인패턴' 카테고리의 다른 글

Bridge 패턴  (0) 2026.04.17
Singleton 패턴  (0) 2026.04.17
Factory Method 패턴  (1) 2026.04.17
Template Method 패턴  (0) 2026.04.17
Adapter 패턴  (0) 2026.04.17
'복습/소프트웨어디자인패턴' 카테고리의 다른 글
  • Bridge 패턴
  • Singleton 패턴
  • Factory Method 패턴
  • Template Method 패턴
hyeumm.dev
hyeumm.dev
말하는 감자입니다. 많이 응원해주세요..^^
  • hyeumm.dev
    천방지축 개발자 되기 프로젝트
    hyeumm.dev
  • 전체
    오늘
    어제
    • 아무개 (78)
      • 복습 (41)
        • 알고리즘 (3)
        • 소프트웨어디자인패턴 (8)
        • 네트워크 (3)
        • 자료구조 (1)
        • C++ (1)
        • 서구실 (6)
        • 멋쟁이사자처럼 (3)
        • SOPT (7)
        • 소분설 (6)
        • 운영체제 (3)
      • 회고 (2)
        • UMC (0)
      • 프로그래밍 (19)
        • 안드로이드 (15)
        • 백준 (0)
        • 파이썬 기초 (0)
        • kotlin in action (3)
        • 테스트 코드 (1)
      • 디자인 (7)
      • 기획 (3)
        • 서비스 리뷰 (1)
        • IT 알쓸신잡 (2)
      • 대외활동 (5)
        • 네이버 클라우드 캠프 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    국비교육
    네이버클라우드
    네클캠
    멋쟁이사자처럼
    솝트
    발대식
    IT동아리
    해커톤
    sopt
    #네이버클라우드캠프
    서류
    네이버클라우드캠프
    hyperclovax
    PM
    KDT
    4호선톤
    비트캠프강남
    ncamp서포터즈
    에이아이팜
    네이버클라우드캠프서포터즈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyeumm.dev
Prototype 패턴
상단으로

티스토리툴바