디자인패턴은 객체지향 분석/설계, 도메인 설계, 프로세스 조직/설계, UI설계 등 다양한 분야에서 패턴과 패턴언어에 대한 책들이 출간 후 객체지향 프로그래밍 개발에서 디자인 패턴이 폭넓게 사용되기 시작되었음.
GoF
: " 특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명이다."
라만(C.Laman)
: "숙련된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 체계화되고 명명된 것이다."
프로그래밍 디자인 패턴은 소프트웨어를 설계할 때 특정 상황에서 자주 사용하는 패턴을 정형화한 것이며, 좋은 소프트웨어 설계를 위한 개발자드르이 경험적 산물이라고 할 수 있습니다.
디자인 패턴을 알고 있는 설계자들은 공통으로 알고 있는 패턴을 이용하여 논의를 하게 되므로 원활한 의사소통이 가능함
검증된 지식인 패턴을 사용하면 빠른시간에 높은 완성도 있는 디자인을 만들어 낼 수 있다.
좋은 설계나 아키텍처가 패턴이라는 이름으로 명명되어 있기 때문에 설계나 구조를 쉽게 이해할 수 있기 때문에 새로운 소프트웨어로의 재사용이 쉬워진다.
새로운 소프트웨어를 개발할 때마다 대부분의 개발자는 어떤 클래스를 만들고 어느 시점에 객체를 생성하고 소멸시킬지, 데이터 처리와 구조 및 설계를 고민하게 된다. 디자인 패턴 분류는 위와 같은 반복적인 상황에서 설계를 용이하게 하며 코드의 재사용이 용이하도록 패턴을 정리하여 놓은 것이다.
이중 GoF의 패턴 분류방법은 목적과 범위로 디자인 패턴을 분류하였음
객체의 생성에 관련된 패턴으로 특정 클래스의 인스턴스가 오직 하나임을 보장하며 이 인스턴스에 접근할 방법을 제공함.
싱글턴 패턴은 iOS app의 다양한 곳에 사용되고 있다고함
-> UIApplication, FileManager, NotificationCenter, UserDefault, URLSession 등..
객체의 상태변화를 관찰하는 관찰자들인 옵저버의 목록을 객체에 등록하여 상태 변화가 일어날 때마다 메서드 등을 통하여 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴임.
객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이뤄지도록 인스턴스의 생성의 책임을 떠넘기는 특징이 있는 패턴임.
iOS app개발에 주로 적용되는 디자인패턴 중 하나.
app의 객체를 모델, 뷰, 컨트롤러의 세 역할 중 하나로 할당하는 특징이 있음.
app과 관련된 데이터를 캡슐화하여 처리함. 클래스 또는 구조체를 활용함.
app 내에서 사용자가 볼 수 있는 객체.
모델 객체의 데이터를 보여주고 해당 데이터를 편집하는 역할.
view와 model 사이의 코디네이터 또는 중개자 역할을 함.
controller는 사용자의 동작들을 해석하여 model 객체에 전달하는 등의 매개체의 역할을 하게됨.
다른 객체들의 life cycle을 관리함.
- 대표적으로 ViewController
ex) 사용자가 view에 동작을 전달하면 controller에게 전달되어 다시 view에 화면을 업데이트 해주거나 또는 asset과 의사소통 하는 등의 시나리오...
참조