본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


디자인 패턴

디자인패턴 - 팩토리 패턴

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 5. 2.

 

 

디자인 패턴은 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴으로 알려져 있으며 실제 자바, php, node.js 등등 여러 개발언어에서 자주 사용되는 개발방식이다.

그중 팩토리 패턴은 객제를 생성하는데 쉽고 편리하게 제공해주는 방법이라고 나와있다.

예제코드를 보면,


public class DesignPtn1 {

	interface Body {  //부모
		void whoAreYou();
	}
	
	static class Arm implements Body{  //자식1
		@Override
		public void whoAreYou() {
			System.out.println("This is Arm");
		}
	}
	
	static class Leg implements Body{   //자식2
		@Override
		public void whoAreYou() {
			System.out.println("This is Leg");
		}
	}
	
 	static class BodyFactory{  //메소드를 통해서 객체 생성
		public Body getData(String name){
			if(name.equals("arm")){
				return new Arm();
			} else if(name.equals("leg")){
				return new Leg();
			} 
			return null;
		}
	}
 	
	public static void main(String[] args) {
		BodyFactory factory = new BodyFactory();
		
		Body body =  factory.getData("arm");
		body.whoAreYou();
		
		body =  factory.getData("leg");
		body.whoAreYou();
	}

}

Body라는 인터페이스를 Arm과 Leg라는 클래스가 상속을 받아서 사용중에 있다.

또한 BodyFactory라는 클래스는 getData라는 메소드를 통해서 파라미터인 name을 통해서 해당 값의 여부에 따라서 객체를 생성해서 되돌려 준다.

BodyFactory라는 클래스에서 메소드 1개만 사용하면 Body클래스로 원하는 기능을 탑재 한 클래스를 받을 수 있게 되는 것이다. 사용자는 getData에 파라미터만 입력하고 whoAreYou 메소드만 사용하면 되는 것이다.

불필요하게 다른 행위를 전혀 하게 될 필요가 없다.

만약 팩토리 패턴을 적용하지 않는다면?

	public static void main(String[] args) {
		/**기능과 클래스가 늘어나면..n개에 해당하는 클래스를 전부 알아야 된다.**/
		Leg leg = new Leg();
		Arm arm = new Arm();
		leg.whoAreYou();
		arm.whoAreYou();
	}

위 처럼 일일이 클래스를 new 해서 생성해야되고, 클래스명이 뭔지도 일일이 알아야 될 것이다.

반응형

'디자인 패턴' 카테고리의 다른 글

디자인패턴 - 프로토타입 패턴  (0) 2019.05.02
디자인패턴 - 빌더 패턴  (0) 2019.05.02
디자인패턴 - 싱글톤 패턴  (0) 2019.05.02
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글