SMALL
Factory Pattern 정의 

객체의 생성 동작을 별도 클래스로 분리하여 처리합니다.

또는 별도의 메서드를 호출하여 객체의 생성 동작을 처리합니다.

 

팩토리 패턴이 등장한 이유는 객체들 간의 의존관계를 분리하기 위해서 이다.

문제가 되는 Case를 보자 

public class Hello {
	public String greeting() {
//		return "안뇽!";
		Korean ko = new Korean();
		return ko.text();
	}
}

public class Korean {
	public String text() {
		return "안녕하세요";
	}
}

위의 Case에서는 Hello와 Korean 사이에 강한 결합 관계가 존재한다. 

 

이러한 관계를 끊어 주기 위해서, Factory Pattern을 사용한다. 

예시를 아래에서 보자.

public class Hello {
	public String greeting() {
//		return "안뇽!";
//		Korean ko = new Korean();
//		return ko.text();
		
		Language language = Factory.getInstance();
		return language.text();
	}
}

public interface Language {
	public String text();
}

public class Korean implements Language{
	
	@Override
	public String text() {
		return "안녕하세요";
	}

}

public class Factory {
	public static Language getInstance() {
		
		return new Korean();
	}
}

Hello 클래스에서 기존에 Korean 객체를 바로 생성하는 코드 대신에 Factory 클래스의 메서드를 호출하여 

강력한 결합력을 느슨한 관계로 변경하였다. 

 

또한, 추가적으로 Language Interface를 implement 하는 다양한 클래스를 두어 Factory를 통해서 다양한 객체를 반환해줄 수 있다. 

public class Hello {
	public String greeting() {
//		return "안뇽!";
//		Korean ko = new Korean();
//		return ko.text();
		
		Language language = Factory.getInstance("ko");
		return language.text();
	}
}

public class Factory {
	public static Language getInstance(String type) {
		
		if (type.equals("ko")) {
			return new Korean();	
		} else {
			return new English();
		}
		
	}
}
public interface Language {
	public String text();
}

public class Korean implements Language{
	
	@Override
	public String text() {
		return "안녕하세요";
	}

}

public class English implements Language{

	@Override
	public String text() {
		return "Hello !";
	}

}

 

Factory Pattern 장단점

팩토리 패턴을 통해 객체를 생성하면 유연한 코드 작성이 가능하고 동작도 쉽게 변경할 수 있다.

 

장점

  • 코드에서 생성과 관련된 모든 처리를 별도의 클래스 객체로 위임 가능
    ( 사용과 생성을 분리하는 과정에서 중복된 코드를 정리하는 효과 )
  • 유연성과 확장성 
    ( 개발 과정에서 클래스 이름이 변경돼도 코드를 일일이 수정하지 않고 팩토리 객체를 통해 변경 )

단점

  • 객체 생성을 위임하는 데 별도의 새로운 클래스가 필요
    ( 관리할 클래스 파일이 늘어난다 )

 

 

LIST

+ Recent posts