The Prototype Pattern
프로토타입 패턴은 매우 시간을 많이 소비하거나 좀 복잡한 클래스의 인스턴스를 생성할 때 사용된다. 그래서, 더 많은 인스턴스를 생성하는 것 보다는 인스턴스 원본의 사본을 만들어 적당하게 수정하는 것이 낫다.
프로토타입들을 그것들이 제공하는 처리과정의 타입에서만 다른 클래스들을 필요로 할 때마다 사용되어질 수 있다.
Cloning in Java
clone 메소드를 이용하여 자바의 어떤 객체이든지 간에 사본을 만들 수 있다.
Jobj j1 = (Jobj)j0.clone();
clone 메소드는 항상 Object 타입의 객체를 반환한다. 그래서 복사한 객체의 실제 타입으로 형 변환을 해야 한다. clone 메소드를 사용할 때는 3가지 중요한 제한사항이 있다.
- clone 메소드는 protected 메소드이고 그 클래스를 포함하는 같은 클래스나 모듈내에서만 호출 되어질 수 있다.
- Cloneable 인터페이스를 구현하기 위해 선언한 객체에 대해서만 사본을 만들 수 있다.
- CloneNotSupported Exception을 발생하는 객체는 사본을 만들 수 없다.
public class SwimData implements Cloneable public Object clone() { try { return super.clone(); } catch(Exception e) { System.out.println(e.getMessage()); return null; } } }
Using the Prototype
이제 수영선수들에 대한 정보를 데이터베이스에서 읽어 결과를 복제하는 프로그램을 작성해보자. 우리의 예에서는 간단히 파일에서 읽을 것이다.
그 다음 이름, 클럽 이름, 성별과 기록(시간)을 갖는 Swimmer라는 클래스를 생성한다.
class Swimmer { String name; int age; String club; float time; boolean female; //-----------------
그리고, 파일에서 읽은 수영선수들을 하나의 벡터의 자료형으로 유지하는 SwimData 클래스를 생성한다.
public class SwimData implements Cloneable { protected Vector swimmers; public SwimData(String filename) { String s = ""; swimmers = new Vector(); InputFile f = new InputFile(filename); s= f.readLine(); while(s != null) { swimmers.addElement(new Swimmer(s)); s= f.readLine(); } f.close(); } //-------------------------------- public Object clone() { try { return super.clone(); } catch(Exception e) { System.out.println(e.getMessage()); return null; } }
Consequences of the Prototype Pattern
프로토타입 패턴을 사용함으로써, 필요할 때 복사하여 실행 중 클래스들을 추가하거나 제거할 수 있다.
'Development > 패턴자료' 카테고리의 다른 글
[펌] The Singleton Pattern (0) | 2011.08.13 |
---|---|
[펌] The Proxy Pattern (0) | 2011.08.13 |
[펌] The Observer Pattern (0) | 2011.08.13 |
[펌] The Memento Pattern (0) | 2011.08.13 |
[펌] The Mediator Pattern (0) | 2011.08.13 |
안정적인 DNS서비스 DNSEver
