Java/design pattern

[java] 6강 프로토 타입 패턴(Prototype Pattern)

2020. 1. 22. 23:02

 

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4#

 

자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런

자바 디자인 패턴 이해하기 강좌 입니다. 여러가지 디자인 패턴들을 알아보며 디자인 패턴에 대한 이해도를 높이도록 도와줍니다. Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예제를 준비하려고 노력했습니다. 중급 프로그래밍 언어 Java MVC 온라인 강의 자바 디자인 패턴

www.inflearn.com

 

prototype pattern 구조

 

사전적 의미의 프로토타입(Prototype)이란?

원형, 원작을 의미한다. 사본이 있다면 그것에 대한 원본이 있기 마련이다.

 

프로토타입 패턴이란?

생산 비용이 높은 인스턴스를 복사를 통해 쉽게 생성할 수 있도록 하는 패턴을 말한다.

즉, 미리 만들어진 객체(Object)를 복사하여 객체를 생성하는 패턴이다.

이를 통해 객체의 생성 비용을 효과적으로 줄일 수 있다.

 

복사는 깊은 복사와 얕은 복사로 이루어져 있는데
자세한 사항은 여기를 참조해 주세요 

 

프로토타입을 사용하는 경우

1.  종류가 너무 많아서 클래스로 정리되지 않는 경우

2. 클래스로부터 인스턴스 생성이 어려운 경우

 

요구사항

일러스트레이터와 같은 그림 그리기 툴을 개발 중입니다.

어떤 모양(Shape)을 그릴 수 있도록 하고 복사 붙여 넣기 기능을 구현해 주세요.

 

추가 요구사항

복사 후 붙여 넣기를 하면 두 도형이 겹치는데 안 겹치도록 살짝 옆으로 이동해 주세요

                                                                                                                                    

 

Prototype.Circle.java

public class Circle extends Shape{
	
	private int x,y,r;

	public Circle(int x, int y, int r) {
		this.x = x;
		this.y = y;
		this.r = r;
		
	}
	
	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	public int getR() {
		return r;
	}

	public void setR(int r) {
		this.r = r;
	}
	
	public Circle copy() throws CloneNotSupportedException {
		Circle circle = (Circle) clone();
		
		// 더 공부하기 ----
		circle.x = x+1;
		circle.y = y+1;
		
		return circle;
	}
	
}

 

Prototype.Shape

public class Shape implements Cloneable { // Cloneable은 이미 정의되어있는 인터페이스

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
}

 

ProtoType.Main

public class Main {
	public static void main(String[] args) throws CloneNotSupportedException {
		
		Circle circle1 = new Circle(1, 1, 3);
		Circle circle2 = circle1.copy();
		
		System.out.println
		(circle1.getX()+
				", " +
				circle1.getY() + ", "
				+ circle1.getR());
		
		System.out.println
		(circle2.getX()+
				", " +
				circle2.getY() + ", "
				+ circle2.getR());
		
	}
}

 

 

참고

https://copynull.tistory.com/127

 

원형 패턴 (Prototype Pattern)

Prototype Pattern - 원형 패턴 미리 만들어진 개체(object)를 복사하여 개체를 생성하는 패턴이다. 다수의 객체 생성시에 발생되는 객체의 생성 비용을 효과적으로 줄일 수 있다. 샘플 코드 Colored By Color Sc..

copynull.tistory.com

http://knowledgebase.oasissofttech.com/index.php?title=Prototype_Design_Pattern

 

Prototype Design Pattern - OasisSoftTech.com - Knowledge Base/Java/Springframework/Microservices/Cloud-AWS/AI

From OasisSoftTech.com - Knowledge Base/Java/Springframework/Microservices/Cloud-AWS/AI Prototype design pattern is used when the Object creation is a costly affair and requires a lot of time and resources and you have a similar object already existing. Pr

knowledgebase.oasissofttech.com

 

소스코드

https://github.com/garam-park/java-designpattern

 

garam-park/java-designpattern

Java Design Patter Example for Coders in korean. Contribute to garam-park/java-designpattern development by creating an account on GitHub.

github.com

 

 

 

'Java > design pattern' 카테고리의 다른 글

[java] 7강 빌더 패턴(Builder Pattern)  (0) 2020.02.03
[java] 5강 싱글톤 패턴(singleton pattern)  (0) 2020.01.22
[java] 4강 팩토리 메소드 패턴(Factory Pattern)  (0) 2020.01.22
[java] 3강 템플릿 메소드 패턴(Template Method Pattern)  (0) 2020.01.13
[java] 2강 어댑터 패턴(adapter pattern)  (0) 2020.01.13
'Java/design pattern' 카테고리의 다른 글
  • [java] 7강 빌더 패턴(Builder Pattern)
  • [java] 5강 싱글톤 패턴(singleton pattern)
  • [java] 4강 팩토리 메소드 패턴(Factory Pattern)
  • [java] 3강 템플릿 메소드 패턴(Template Method Pattern)
향찡
향찡
백엔드 개발자
향찡
Dev Story
향찡
전체
오늘
어제
  • 분류 전체보기 (97)
    • Java (42)
      • design pattern (7)
      • JavaCafe Study (4)
    • Kotlin (2)
    • Spring (4)
    • TypeScript (1)
    • DevOps (2)
      • AWS (1)
    • DB (4)
      • Real Mysql (2)
      • Redis (1)
    • OS (3)
      • Linux (3)
    • Algorithm (7)
    • Clean Code (1)
    • Git (5)
    • 환경 설정 (2)
    • 그냥 생각 (1)
    • 서평 (12)
      • 한빛미디어, 나는리뷰어다 2022 (4)
    • 세미나 (11)
    • 기타 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • java
  • 자바카페
  • LeetCode
  • java #study
  • 스터디
  • 한빛미디어
  • 파이썬
  • 코딩교육
  • 코딩테스트
  • 자바
  • 백기선
  • 코딩자격증
  • Kotlin
  • 패캠
  • OKKY
  • 알고리즘
  • 인프런
  • 자바스크립트
  • 백준
  • 깃 #깃허브
  • 유스콘
  • 자바스터디
  • 스터디올래
  • 스터디할래
  • 제이펍
  • fastcampus
  • git #github #doit #형상관리
  • 패스트캠퍼스
  • Real MySQL
  • 패스트캠퍼스후기

최근 댓글

최근 글

hELLO · Designed By 정상우.
향찡
[java] 6강 프로토 타입 패턴(Prototype Pattern)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.