상세 컨텐츠

본문 제목

[디자인패턴] 프로토타입 패턴 [PPT 공유]

Backend/Java

by hyeminyy 2023. 11. 21. 23:45

본문

728x90

교육 중에 디자인 패턴에 대해 공부했습니다 !

공부 했을 때 만든 PPT 보여드리겠습니당

 

프로토타입ppt.pptx
1.05MB

 

프로토 타입 패턴이란 무엇일까요 ?

프로토타입 패턴은 객체지향 프로그래밍에서 사용되는 디자인 패턴입니다.

객체의 생성 비용이 높거나 복잡한 경우에 새로운 객체를 생성하는 대신, 기존 객체를 복사하여 새로운 객체를 생성하는 방식입니다

다음 예시를 간략하게 들어보겠습니다.

프로토타입 패턴은 마치 복사와 붙여넣기를 사용하여 똑같은 것을 만드는 것과 비슷합니다.

그림이 마음에 들어서 같은 그림을 그리고 싶을 , 그림을 복사해서 다른 종이에 붙여 넣는 것과 유사합니다. 

나루토의 대표적인 능력 하나인 분신 능력에 대해 알아보고 코드와의 연결을 살펴보겠습니다.

시나리오 입니다.

우선 코드의 구성을 간단히 살펴보겠습니다.

프로토타입 인터페이스는 cloneable 구현하여 clone()메서드를 정의하고 있습니다.

(clonable 인터페이스는 객체의 복제를 지원하도록 하는 마커 인터페이스입니다.)

ConcretePrototype 클래스가 Prototype 인터페이스를 구현하여 clone() 메서드를 제공합니다. 생성자는 이름을 받아 초기화하며, setName과 getName 메서드는 객체의 이름을 설정하고 반환합니다. clone() 메서드는 현재 객체를 복제하여 새로운 객체를 생성하며, 이때 복제된 객체는 동일한 속성을 가집니다.

이제 코드를 실행하여 나루토가 분신 능력을 활용하는 상황을 살펴보겠습니다.

concreatePrototype 클래스의 인스턴스인 narutoOriginal(나루토 오리지널) 생성합니다.

것은 나루토의 오리지널을 나타냅니다.

 

clone1 2 나루토 오리지널을 복제하여 생성한 객체들입니다. 나루토의 분신을 나타내는 것입니다.

 

객체 정보를 출력해봤을 , 나루토 오리지널과 분신들을 나타내는데, 이들은 동일한 능력과 특성을 가지고 있습니다.

 

여기서 분신 하나인 clone1 이름을 변경해보겠습니다.

이름이 변경된 분신을 포함하여 모든 객체의 정보를 출력했을때, 원본인 나루토 오리지널의 이름은 그대로이고, clone1 이름이 변경된 것을 있습니다.

이로써 복제된 객체들은 원본의 상태를 공유하면서도 독립적으로 다룰 있음을 확인할 있습니다. 

이것이 프로토타입의 핵심입니다. 객체의 복제를 통해서 새로운 객체를 생성하면서,

객체들이 원본과 동일한 특성을 유지하는 것입니다. 유사한 객체가 많이 필요한 상황에서 효과적으로 사용될 있습니다.

클라이언트는 프로토타입 객체를 복제하려면 prototype 클래스를 참조합니다 객체를 복제하고, 필요에 따라 복제된 객체를 수정하는 등의 동작을 수행합니다.

프로토타입 클래스는 일반적으로 인터페이스나 추상클래스로 표현되고, 객체를 복제하는 clone메서드를 정의하고, 실제 복제를 구현하는 콘크리트프로토타입클래스를 포함합니다.

클라이언트는 콘트리트프로토타입 클래스를 사용하여 객체를 복제하고, 복제된 객체를 원하는 대로 조작할 있습니다.

프로토타입의 장점으로는 

객체 복사 입니다. 원본 객체를 복제하여 동일한 상태를 가진 새로운 객체를 생성할 있습니다.

객체를 새로 생성하는 과정에서의 비용을 절감할 있고, 효율적인 객체 생성이 가능합니다.

 

그리고 유사한 객체를 여러 만들어야할 중복 코드를 제거할 있습니다. 중복코드를 최소화함으로써 유지보수성을 향상시키고 코드의 일관성을 유지할 있습니다.

 

객체의 복제를 통해 빠르게 새로운 객체를 생성할 있어서 편리성과 효율성을 제공합니다. 객체를 복사하는 것만으로 다수의 객체를 만들 있기 때문에, 객체 생성과정이 간소화되고 코드의 가독성이 높아집니다.

 

단점으로는

인스턴스를 복제하는 과정 자체가 복잡할 있습니다. 가령 인스턴스가 가지고 있는 레퍼런트 간의 순환 참조가 있는 경우 clone 메서드를 만드는 자체가 복잡할 있습니다.

 

일반적으로 클래스 계층 구조가 복잡해질 있습니다. 각각의 클래스는 자신의 복사 메소드를 구현해야 하므로, 계층 구조가 복잡하면 유지보수가 어려워질 있습니다.

728x90

'Backend > Java' 카테고리의 다른 글

[Java] 조건문과 반복문 1️⃣  (1) 2023.11.19
[Java] 변수 (Variable) 2️⃣  (0) 2023.11.16
[Java] 변수 (Variable) 1️⃣  (1) 2023.11.15
[Java] JDBC 사용법  (0) 2023.11.13
[Java] 메모리 구조  (0) 2023.11.13

관련글 더보기