개발/iOS
디자인패턴들 정리(1) - Singleton, Factory, Decorator
빙수킹
2021. 6. 17. 03:59
디자인 패턴이란?
문제를 해결하는 어떤 정형화된 해결책, 템플릿, 개발 패턴
종류
- Creational - 객체들을 어떻게 생성히고 인스턴스화 하는가 / 인스턴스가 어떻게 만들어지는지 캡슐화하여 완전히 감춘다.
- Structural - 객체들이 어떻게 구성되고 결합되는가
- 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