Clean Code

[Design Pattern] 생성 패턴 - 프로토 타입 패턴

yaini 2022. 3. 3. 00:19
반응형

프로토 타입 패턴

생성할 객체들의 타입이 프로토타입 인스턴스로부터 결정되며, 새 객체를 위해 자신을 복제한다.

상태 값이 다른 객체 생성을 위해 깊은 복사를 사용하는 객체 생성 방식

기존 객체를 복제함으로써 객체를 생성한다.

단점

  • clone에 대한 override 요구
  • 객체를 생성하는데 비용이 많이 들기 때문에 유사한 객체가 존재하는 경우 사용

프로토 타입 패턴이라고 하면 뭔가 대단한 원칙인 것 같지만 객체를 생성 후 복사한다는 뜻이다.

예를 들어, DB에 접근해서 가져와야 할 데이터가 이미 객체로 생성되어 있다면 clone하여 데이터를 전달하는 것이 비용이 더 절약되므로 프로토 타입 패턴을 사용한다.

 

= 으로 복사하면 되는거 아닌가? 하는 생각을 하고 있다면 깊은 복사 얕은 복사를 공부해보시길 바란다.

 

전체 코드

package creational;

import java.util.ArrayList;
import java.util.List;

public class Prototype {
    public static void main(String[] args){
        MoneyFactory moneyFactory = new MoneyFactory(new Coin(100));

        List<Money> wallet = new ArrayList<>();
        for( int i=0; i<10; i++ ){
            wallet.add(moneyFactory.makeMoney());
        }
    }
}

class Money implements Cloneable{
    int price;

    public Object clone() {
        try {
            Money copy = (Money) super.clone();
            return copy;
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

class Coin extends Money{

    Coin(int price){
        this.price = price;
    }
}

class MoneyFactory{

    private Money money;

    public MoneyFactory(Money money){
        this.money = money;
    }

    public Money makeMoney(){
        return (Money) money.clone();
    }

}

 

참고

https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85_%ED%8C%A8%ED%84%B4

 

반응형