개발/iOS

디자인패턴들 정리(1) - Singleton, Factory, Decorator

빙수킹 2021. 6. 17. 03:59

디자인 패턴이란?

문제를 해결하는 어떤 정형화된 해결책, 템플릿, 개발 패턴

 

종류

  1. Creational - 객체들을 어떻게 생성히고 인스턴스화 하는가 / 인스턴스가 어떻게 만들어지는지 캡슐화하여 완전히 감춘다.
  2. Structural - 객체들이 어떻게 구성되고 결합되는가
  3. Behavior - 객체들이 서로 어떻게 소통하는가

 

어떤것들이 있는가?

 

Singleton(Creational)

: 전역 인스턴스 한놈만 쓴다. 근데 싱글톤은 웬만하면 쓰지말자하

싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "Open closed principle" 을 위배하게 된다.

다 같이 한놈을 공유하기 때문에 수정이 발생하면 그걸 쓰는놈을 다 수정해야 할 수도 있다.

* 싱글톤을 사용하면서 주의할점

1. final하게 만들고 2. private init해줘야 한다. (다른데서 init 못쓰게)

 

 

Factory(Creational)

: 서브클래스에서 넣는 인풋값에 따라 인스턴스가 결정된다. 슈퍼클래스에서 인스턴스를 내려준다.

ex) 인형공장에서.. 곰인형 만들어주세요! 하면 곰인형 나오고. 토끼인형 만들어주세요! 하면 토끼인형 나오는것

뭔가 enum형 input을 넣어 객체를 받을 수 있을 듯.

→ 결합도를 느슨하게 하며(Loosely Coupled), 확장을 쉽게 합니다. OCP 만족.

→ 객체 만드는 로직이 숨겨진다.

 

 

Decorator(S) 장식자

: 기존의 코드를 건드리지 않고 확장하도록 합니다.

Open-Closed principle 준수

4가지 요소들

  • Component 추상 클래스로 데코레이터로 감싸져 사용될 수 있음.
  • ConcreteComponent 인터페이스를 동적으로 추가함.
  • Decorator Decorator 안에는 Component 객체를 가짐. 자신이 장식할 구성요소와 같은 인터페이스 또는 추상 클래스를 구현함.
  • ConcreteDecorator Decorator가 감싸고 있는 Component 객체를 위한 인스턴트 변수가 있어 Component 상태를 확장할 수 있음.

 

 

 

 

 

참조한곳

http://minsone.github.io/programming/designpattern-decorator

 

[DesignPattern]데코레이터 패턴(Decorator Pattern)

데코레이터 패턴(Decorator Pattern) 데코레이터 패턴은 기존의 코드를 건드리지 않고 확장하도록 합니다. 디자인의 원칙 중 하나인 OCP(Open-Closed Principle)을 준수합니다. 출처 : Head First Design Pattern Compo

minsone.github.io