본문 바로가기

Dev.../패턴자료

The Prototype Pattern

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

프로토타입 패턴을 사용함으로써, 필요할 때 복사하여 실행 중 클래스들을 추가하거나 제거할 수 있다.

'Dev... > 패턴자료' 카테고리의 다른 글

The Adapter Pattern  (0) 2005.02.28
Structural Patterns  (0) 2005.02.28
The Builder Pattern  (0) 2005.02.28
The Singleton Pattern  (0) 2005.02.28
The Abstract Factory Pattern  (0) 2005.02.28