Java/design pattern

[java] 4강 팩토리 메소드 패턴(Factory Pattern)

2020. 1. 22. 21:36

 

강의

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4#

 

 

factory method pattern 구조

 

사전적 의미의 팩토리란??

무언가 물건을 만드는 공장을 의미한다. 팩토리 메소드 패턴도 뭔가 만드는(객체) 공장으로 이해하시면 됩니다.

 

팩토리메소드의 정의

객체 생성 처리를 서브 클래스로 분리 해 처리하도록 캡슐화하는 패턴이다. 즉, 객체의 생성 코드를 별도의 클래스/메서드로 분리함으로써 객체 생성의 변화에 대비하는 데 유용하고 확장성이 좋아진다는 장점이 있습니다.. 

 

팩토리 메소드 사용 이유는?

팩토리 메소드 패턴을 사용하는 이유는 클래스간의 결합도를 낮추기 위한것입니다. 결합도라는 것은 간단히 말해 클래스의 변경점이 생겼을 때 얼마나 다른 클래스에도 영향을 주는가입니다. 팩토리 메소드 패턴을 사용하는 경우 직접 객체를 생성해 사용하는 것을 방지하고 서브 클래스에 위임함으로써 보다 효율적인 코드 제어를 할 수 있고 의존성을 제거합니다. 결과적으로 결합도 또한 낮출 수 있습니다.

 

<요구사항>

1. 게임 아이템과 아이템 생성을 구현해 주세요

- 아이템을 생성하기 전에 DB에서 아이템 정보 요청

- 아이템을 생성 후 아이템 복제 등의 불법을 방재하기 위해 DB에 아이템 생성 정보를 남김

2. 아이템을 생성하는 주체를 IterCreater로 이름 짓는다.

3. 아이템은 item이라는 interface로 다룰 수 있다.

- item은 use 함수를 기본 함수로 한다.

4. 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있다.

 

                                                                                                                                          

 

 

framework.Item.java

public interface Item {

	public void use();
}

 

framework.ItemCreater.java

public abstract class  ItemCreateor {

	// 이걸 팩토리 메소드 라고 하고 이 메소드를 포함하는 패턴을 팩토리 메소드 패턴이라 한다
    -> 근데 이것이 템플릿 메소드와 같다
	public Item create() {
		
		Item item;
		
		// step1 
		requestItemsInfo();
		
		// step 2
		item = createItem();
		
		// step 3
		createItemLog();
				
		return item;		
		
	}
	
	// 아이템을 생성하기전에 데이터베이스에서 아이템 정보 요청
	abstract protected void requestItemsInfo();
	
	// 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위한 메소드
	abstract protected void createItemLog();
	
	// 아이템을 생성하는 알고리즘
	abstract protected Item createItem();
}

 

concrete.HpCreator.java

import java.util.Date;

import designpattern.chapter4.FactoryMethod_Pattern.framework.Item;
import designpattern.chapter4.FactoryMethod_Pattern.framework.ItemCreateor;

public class HpCreator extends ItemCreateor{

	@Override
	protected void requestItemsInfo() {
		System.out.println("데이터베이스에서 체력 회복 물약의 정보를 가져옵니다");
		
	}

	@Override
	protected void createItemLog() {
		System.out.println("체력 회복 물약을 새로 생성 했습니다." + new Date());
		
	}

	@Override
	protected Item createItem() {
		
		// 작업
		return new HpPotion();
	}

}

 

concrete.HpPotion.java

public class HpPotion implements Item{

	@Override
	public void use() {
		System.out.println("체력 회복 !!");
	}	
}

 

concrete.MpCreator

import java.util.Date;

import designpattern.chapter4.FactoryMethod_Pattern.framework.Item;
import designpattern.chapter4.FactoryMethod_Pattern.framework.ItemCreateor;

public class MpCreator extends ItemCreateor{

	@Override
	protected void requestItemsInfo() {
		System.out.println("데이터베이스에서 마력 회복 물약의 정보를 가져옵니다");
		
	}

	@Override
	protected void createItemLog() {
		System.out.println("마력 회복 물약을 새로 생성 했습니다." + new Date());
		
	}

	@Override
	protected Item createItem() {
		
		// 작업
		return new MpPotion();
	}

}

 

concrete.MpPotion

public class MpPotion implements Item{

	@Override
	public void use() {
		System.out.println("마력 회복 !!");
	}
}

 

Main.java

public class Main {

	public static void main(String[] args) {
		
		ItemCreateor creator;
		Item item;
		
		creator = new HpCreator();
		item = creator.create();
		item.use();
		
		
		creator = new MpCreator();
		item = creator.create();
		item.use();
		
	}
}

 

 

참고

https://jdm.kr/blog/180

 

팩토리 메소드 패턴(Factory Method Pattern) :: JDM's Blog

이번 포스팅은 팩토리 메소드 패턴Factory Method Pattern에 대해 알아보고자 합니다. Factory Method Pattern 기본적으로 팩토리는 공장이란 뜻을 내포하고 있습니다. 따라서 팩토리 메소드 패턴도 무언가를 위한 공장이라고 보면 됩니다. 일반적으로 팩토리 메소드 패턴은 다음처럼 말할 수 있습니다. 객체를 만들어내는 부분을 서브 클래스Sub-Class에 위임하는 패턴. 즉, new 키워드를 호출하는 부분을 서브 클래스에 위임하는 겁

jdm.kr

 

https://niceman.tistory.com/143

 

Java(자바) 디자인패턴 - 팩토리(Factory Method) 패턴 설명 및 예제소스

Java 디자인패턴 - 팩토리 메소드 패턴 이번 시간에는 자바 디자인 패턴 중 팩토리 메소드 패턴(Factory Method Pattern)에 대해서 쉬운 예제와 함께 설명 드리려 합니다. 팩토리 메소드 패턴은 요약해서 말씀드리..

niceman.tistory.com

 

소스코드

https://github.com/garam-park/java-designpattern

 

garam-park/java-designpattern

Java Design Patter Example for Coders in korean. Contribute to garam-park/java-designpattern development by creating an account on GitHub.

github.com

 

'Java > design pattern' 카테고리의 다른 글

[java] 6강 프로토 타입 패턴(Prototype Pattern)  (2) 2020.01.22
[java] 5강 싱글톤 패턴(singleton pattern)  (0) 2020.01.22
[java] 3강 템플릿 메소드 패턴(Template Method Pattern)  (0) 2020.01.13
[java] 2강 어댑터 패턴(adapter pattern)  (0) 2020.01.13
[java] 1강 스트래티지 패턴(strategy pattern)  (0) 2020.01.08
'Java/design pattern' 카테고리의 다른 글
  • [java] 6강 프로토 타입 패턴(Prototype Pattern)
  • [java] 5강 싱글톤 패턴(singleton pattern)
  • [java] 3강 템플릿 메소드 패턴(Template Method Pattern)
  • [java] 2강 어댑터 패턴(adapter pattern)
향찡
향찡
백엔드 개발자
향찡
Dev Story
향찡
전체
오늘
어제
  • 분류 전체보기 (97)
    • Java (42)
      • design pattern (7)
      • JavaCafe Study (4)
    • Kotlin (2)
    • Spring (4)
    • TypeScript (1)
    • DevOps (2)
      • AWS (1)
    • DB (4)
      • Real Mysql (2)
      • Redis (1)
    • OS (3)
      • Linux (3)
    • Algorithm (7)
    • Clean Code (1)
    • Git (5)
    • 환경 설정 (2)
    • 그냥 생각 (1)
    • 서평 (12)
      • 한빛미디어, 나는리뷰어다 2022 (4)
    • 세미나 (11)
    • 기타 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 코딩자격증
  • fastcampus
  • Kotlin
  • 코딩테스트
  • 코딩교육
  • git #github #doit #형상관리
  • Real MySQL
  • 유스콘
  • 패캠
  • 파이썬
  • 패스트캠퍼스
  • 한빛미디어
  • 자바스터디
  • 알고리즘
  • 제이펍
  • 자바
  • 자바카페
  • 백준
  • java
  • 깃 #깃허브
  • 자바스크립트
  • 스터디
  • OKKY
  • 인프런
  • LeetCode
  • 백기선
  • 스터디할래
  • 패스트캠퍼스후기
  • java #study
  • 스터디올래

최근 댓글

최근 글

hELLO · Designed By 정상우.
향찡
[java] 4강 팩토리 메소드 패턴(Factory Pattern)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.