본문 바로가기
역량 UP!/DesignPattern

[첫번째 스터디] abstractFactory 패턴

by 태하팍 2013. 7. 21.
반응형

part 2. abstractFactory pattern


추상 팩토리 패턴..!!


팩토리 패턴은 매우 다양한 것 같다..뒤에도 나오겠지만 Factory Method 라는 녀석도 있다. @.@;;

Factory 패턴은 생성 패턴이라고도 부른다.

즉, 객체를 생성해주는 패턴이라고 보면 된다. 

아래의 소스에서 보면 KRAddress와 USAddress.java가 생성이 되어야하는 대상 이다.

어떻게 생성을 해주어야 하는가는 소스를 보면 파악 할 수 있을 것이다.

하지만 헷깔릴수 있는 소지가 다분하다. 바로 팩토리 이녀석도 추상적인 개념을 넣어서 interface구조 또는 abstract구조로 나뉘어져있기 때문이다.




위의 소스의 구성을 보면 복잡하게 느낄 수도 있겠지만 사실은 간단하다.

 

 

AddressFactory.java


Client.java


KRAddress.java


KRAddressFactory.java


USAddress.java


USAddressFactory.java


abstractFactoryTest.java




소스를 보기 전에 간단히 설명을 하면



인터페이스와 이를 구현하는 구조로 되어있다. 즉, 만들어야 할 객체와 팩토리가 인터페이스+구현부 자바로 되어있다는 것이다.
 

 

package kr.pe.acet.abstractFactory;

public interface Address {

public String getFullAddress();

}

위의 Address 를 구현한 것이 아래의 KRAddress.java 인 것이다.
package kr.pe.acet.abstractFactory;

public class KRAddress implements Address{

	@Override
	public String getFullAddress() {
		// TODO Auto-generated method stub
		return "서울시 은평구 신사1동";
	}
}
팩토리를 추상화 시켜 놓은 것이다.
package kr.pe.acet.abstractFactory;

public interface AddressFactory {

	public Address createAddress();
	
	
}
위의 AddressFactory.java를 구현 한 것이 아래의 KRAddressFactory.java 이다.
package kr.pe.acet.abstractFactory;

public class KRAddressFactory implements AddressFactory{

	KRAddressFactory krAddressFactory = null;
	@Override
	public Address createAddress() {
		return new KRAddress();
	}
	

}

특히, 내가 추상 팩토리 패턴을 구현 하면서 제일 어려웠던 것은 Client.java이다. 어떤식으로 연결을 해주어야 할지 막막 하였다..
package kr.pe.acet.abstractFactory;

public class Client {

	AddressFactory addressFactory = null;
	
	
	public Address createAddress(String countryType) {
		// TODO Auto-generated method stub
		AddressFactory addressFactory = getAddressFactory(countryType);
		return addressFactory.createAddress();
	}

	private AddressFactory getAddressFactory(String countryType) {
		// TODO Auto-generated method stub
		if("KR".equals(countryType)){
			return new KRAddressFactory();
		}else if("US".equals(countryType)){
			return new USAddressFactory();
		}
		return null;
	}
	
	

}

TEST쪽에서 client 객체를 생성하여 아래처럼 접근하면..끝이다! 
팩토리와 객체 모두 생성이 되어진다. 내부적으로 알아서~~ 
Address addressKr = client.createAddress("KR"); 
그리고 Address를 구현한 객체를 생성 한 뒤 리턴을 해주고 그 생성한 객체의 메소드를 접근 할 수 있게 된다. System.out.println("abstract Factory output=>"+addressKr.getFullAddress());


 Part2. 추상팩토리 끝~



2013/07/21 - [Architecture/DesignPattern] - [첫번째 스터디] singleton 패턴


반응형