The Prototype Pattern

    프로토타입 패턴은 매우 시간을 많이 소비하거나 좀 복잡한 클래스의 인스턴스를 생성할 때 사용된다. 그래서, 더 많은 인스턴스를 생성하는 것 보다는 인스턴스 원본의 사본을 만들어 적당하게 수정하는 것이 낫다. 

    프로토타입들을 그것들이 제공하는 처리과정의 타입에서만 다른 클래스들을 필요로 할 때마다 사용되어질 수 있다. 

Cloning in Java

        clone 메소드를 이용하여 자바의 어떤 객체이든지 간에 사본을 만들 수 있다. 

Jobj j1 = (Jobj)j0.clone();

    clone 메소드는 항상 Object 타입의 객체를 반환한다. 그래서 복사한 객체의 실제 타입으로 형 변환을 해야 한다. clone 메소드를 사용할 때는 3가지 중요한 제한사항이 있다. 
  1. clone 메소드는 protected 메소드이고 그 클래스를 포함하는 같은 클래스나 모듈내에서만 호출 되어질 수 있다.
  2. Cloneable 인터페이스를 구현하기 위해 선언한 객체에 대해서만 사본을 만들 수 있다.
  3. 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 DNS server, DNS service
Posted by 키르히아이스
,