생성패턴 2

froajnzd·2023년 6월 7일
0

pattern

목록 보기
8/15
post-thumbnail

생성패턴
보통의 생성자와는 다른 객체를 만드는 패턴

  • 프로토타입 패턴
  • 메멘토 패턴

프로토타입 패턴

배경(문제상황-해결방안)

객체를 생성하는 데 시간과 노력이 많이 들고, 이미 유사한 객체가 존재할 때 사용한다.

설명

런타임에 A의 프로토타입을 만든다.
폴리몰피즘해서 rep로 언급할 수 있으니 상관할 필요 없다.
새로운 생성자 안에 copy수준으로 만들어진다
밑에 있는 clone들은 copy생성자. 각각의 clone은 이미 만들어진 객체를 return해주면 된다.
파라미터로 일일히 객체를 생성할 수도 있고, 이미 만들어진 것에서 복제할 수도 있음!!
clone이 쓰여잇으면 여기에 프로토타입 패턴이 쓰여있구나를 파악할 수도 있다.

구조

예시

미로게임

메멘토 Memento:기억

배경(문제상황-해결방안)

어떤 객체의 특정 시점에 대한 상태 정보가 나중에 복원되기 위해저장되어야 할 경우
객체의 상태정보를 직접 접근하는 것이 information hiding이나 encapsulation을 깨뜨릴 때.

저장되어있는 상태를 되돌리고 싶을 때
-> 상태를 계속 저장하고 있어야 함 <필요정보>

이를 해결하기 위해
1. 보관할 필요가 있는 정보를 따로 뽑아서 객체로 만들어 이를 저장하거나 복원한다.
2. 원 소유자를 제외한 다른객체에서 상태정보(객체)에 대한 접근을 제한하기 위해 Memento 객체를 만든다.

설명

캡슐화를 어기지 않으면서, 특정 객체의 상태정보를 나중에 복원하기 위하여 해당 정보를 외부에 상태객체로 표현한다.

특징

만약 memento를 안만들면?
상태에 대한 관리를 originator가 모두 떠맡게 되어서, originator의 책임이 아주 커진다.
되도록 single responsibility하게 한다.

Consequences(결과)
memento가 originator에 속해있게 만든다.
장점과 단점을 비교해서 memento를 쓰는게 부적절한 경우 그냥 originator에서 포함하게 할 수 있다.

Implementation
매번 상태를 모두 저장하지 말고, 메멘토의 기억공간 부담을 덜기 위해 변경된 부분만 저장한다던지 하는 방식으로 저장한다.

요소

  • Memonto : Originator 객체의 상태정보 저장
  • Originator : Memento 객체를 생성/Memento 객체를 이용해 이전 상태로 되돌린다
  • Caretaker : Memento 객체를 보관, 관리/Memento 객체의 내부정보에 접근할 수 없다
  1. Caretaker 객체가 Originator 객체에게 Memento 객체 생성을 요청
  2. 생성된 Memento 객체를 관리
  3. 필요 시에 Originator 객체의 상태를 되돌릴 때 Memento 객체를 이용

구조

profile
Hi I'm 열쯔엉

0개의 댓글