추상팩토리 패턴은 도대체 언제 사용해야할까요?

Simple factory pattern과 차이점은 무엇일까요?

 

사실 필자가 생각하기론 Simple factory pattern과 추상팩토리패턴 (Abstarct Factory pattern)은 거의 흡사하다고 봅니다.

 

다만, 군(플랫폼, 환경, 개체군)으로 관리해야하는 상황이 생기거나 군 밑의 자식클래스(Concrete class)의 잦은 수정이 생길것으로 판단될 때, 추상 팩토리 패턴을 적용해야 미래에 변경용이성을 가져가실 수 있습니다.

 

다시한번 말씀드리지만, 군으로 관리해야하느냐 아니냐에 따라 추상팩토리를 사용하느냐 Simple facotry Pattern을 사용하느냐로 결정하시면 됩니다.

 

 

추상팩토리 패턴이란?

Product class의 생성을 책임지는 생성에 관한 패턴으로써, 군 별로 Product class 를 책임지고 생성하는 Desgin Pattern

 

 

 

예제상황

View개발자들이 있는데 이 개발자들은 자기가 담당하는 View들이 따로있다. (Button, EditText, CloseButton 등등)

그런데 Window와 Linux 에 따라 각각의 View 군들의 Product class들의 생성을 따로 해야하는 상황이다.

 

 

 

Class Diagram

 

Abstract factory class diagram

 

소스코드

파일구성

ButtonView.java
EditTextView.java
FactoryCreator.java
LinuxButtonView.java
LinuxEditTextView.java
LinuxViewFactory.java
Main.java
ViewFactory.java
WindowButtonView.java
WindowEditTextView.java
WindowViewFactory.java

소스코드 Github 

https://github.com/control-man/design_pattern_sample/tree/master/abstarct_factory

 

간략한 소스코드 소개

public class FactoryCreator {
	
	static ViewFactory createViewFactory(String OS) {
		if (OS.equals("window")) {
			return new WindowViewFactory();
		} else if (OS.equals("linux")){
			return new LinuxViewFactory();
		} else {
			return null;
		}
	}
}

public class WindowViewFactory implements ViewFactory {

	@Override
	public ButtonView createButtonView() {
		return new WindowButtonView();
	}

	@Override
	public EditTextView createEditTextView() {
		return new WindowEditTextView();
	}

}

public class LinuxViewFactory implements ViewFactory {

	@Override
	public ButtonView createButtonView() {
		return new LinuxButtonView();
	}

	@Override
	public EditTextView createEditTextView() {
		return new LinuxEditTextView();
	}

}


public class Main {

	public static void main(String[] args) {

		ViewFactory viewFactory = FactoryCreator.createViewFactory("window");
		ButtonView buttonView = viewFactory.createButtonView();
		EditTextView editTextView = viewFactory.createEditTextView();
		
		buttonView.doButtonSomething();
		editTextView.doEditTextSomething();
		
		viewFactory = FactoryCreator.createViewFactory("linux");
		buttonView = viewFactory.createButtonView();
		editTextView = viewFactory.createEditTextView();

		buttonView.doButtonSomething();
		editTextView.doEditTextSomething();
	}

}



 

실행결과

 

장점

- Product 의 하위 클래스인 Concrete Product 클래스의 수정이나 확장이 발생해도 Client Side에서는

영향을 받지 않는다.

 

- 군별로 Product를 생성하는 Factory 클래스를 완전 분리함으로써, 코드 가독성이 올라간다.

 

 

 

단점

Product의 종류가 증가되면 수정되는(영향을 받는) 클래스의 수가 많아진다.

(그러므로 개체의 종류는 최대한 미리 정해놓고 진행하는것이 좋음)

 

만약 Product 가 늘어나면 아래의 Class diagram처럼 변하게 됨 

-> ViewFactory의 인터페이스 수정으로 인해 Concrete View Factory들의 수정사항도 생기고

Client도 변경사항에 대해 영향을 받게 됨.

 

Product가 늘어나게되면 Factory 클래스들의 수정이 발생한다.

 

 

유튜브 강의 링크

 

https://www.youtube.com/watch?v=wu2SIkJpaI0

쿠팡이 추려낸 당신이 현재 관심있어 할 법한 상품들

 

 

 

 

로켓와우

 

골드박스

매일매일 오전 7시, 하루에 한번씩 진행되는 특가상품들 살펴보기

 

 

 

 

 

 

 

 

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

 

 힘을 강하게, 힘차게 라는 표현을 적고싶은데 갑자기 세다,새다,쎄다 중 어떤 것을 사용해야할지 헷갈리는 경우가 생각보다 많아서 이것도 한번 조사해보자라고 마음먹고 살펴보았습니다.

 

 

30년넘게 한국말을 사용하면서 살고 있는데 ㅡㅡ 아직까지도 헷갈리다니...이러니 다른나라말인 영어도 배우기 힘들지라는 생각이 드네요 ㅠㅠ. 아무튼 오늘에서야 한번 제대로 넣어보고자 각성하고 조사해보았습니다.

 

무엇이 맞을까요?

1. 세다

세다는 힘이 강하다, 기세 등등하다, 강력하다 라는 뜻을 갖고 있습니다.

아마도 많은분들이 힘이세다라고 적으셔야 하는데 실수로 힘이쎄다라고 쇤소리나는 발음으로 그대로 적용하기 부지기수일테지요..저또한 포함이구요 ㅠㅠ. 이 포스팅을 검색하시는 분들 대부분이 웬만하면 1번으로 기억하시고 바로 뒤로가기를 누르셔도 될거라 생각합니다ㅎㅎ

 

2. 새다

새다는 돈이 빠져나가거나, 물따위의 액체 혹은 수증기 기체같은것이 틈으로 빠져나가거나, 빛이 틈으로 빠져나가거나 할때 사용하시면 됩니다. 모두들 돈 새지 않게 절약정신을 가집시다.

 

3. 쎄

쎄다는 그냥 기억안하시면 될 것 같습니다. 공식적으로 등재되어있지 않습니다. 즉 표준어가 아닙니다. 그저 세다의 소리나는 글자라고 할 수 있지요...그러니 오늘부로 쎄다를 어딘가에 적으시는것을 하지 마시기 바랍니다!

1.세다

2.새다

3.쎄다

 

3단어를 살펴보았지만 사실상 저희는 2가지만 구분하시면 되겠습니다. (3번은 아예 없는단어니깐)

 

세다와 새다만 유의하셔서 확실히 머릿속에 집어넣으시고 메일이나 작문하실때 사용하시기 바랍니다.

'맞춤법' 카테고리의 다른 글

맞춤법 - 데와 대의 차이 (데 VS 대, 있대 vs 있데)  (0) 2020.02.26

+ Recent posts