프로그래밍 디자인패턴이란?

seuhong·2022년 9월 9일
0

디자인패턴은 객체지향 분석/설계, 도메인 설계, 프로세스 조직/설계, UI설계 등 다양한 분야에서 패턴과 패턴언어에 대한 책들이 출간 후 객체지향 프로그래밍 개발에서 디자인 패턴이 폭넓게 사용되기 시작되었음.


디자인 패턴이란?

  • GoF
    : " 특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명이다."

  • 라만(C.Laman)
    : "숙련된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 체계화되고 명명된 것이다."

프로그래밍 디자인 패턴은 소프트웨어를 설계할 때 특정 상황에서 자주 사용하는 패턴을 정형화한 것이며, 좋은 소프트웨어 설계를 위한 개발자드르이 경험적 산물이라고 할 수 있습니다.


프로그래밍 디자인 패턴의 특징

  1. 경험을 통하여 얻을 수 있다.
  2. 특정한 형식을 갖고 체계적으로 작성된다.
  3. 패턴에는 각기 다른 추상화 수준이 존재하며 진화한다.

프로그래밍 디자인 패턴의 장점

  1. 의사소통에 도움을 준다.

    디자인 패턴을 알고 있는 설계자들은 공통으로 알고 있는 패턴을 이용하여 논의를 하게 되므로 원활한 의사소통이 가능함

  2. 개발비용을 줄일 수 있다.

    검증된 지식인 패턴을 사용하면 빠른시간에 높은 완성도 있는 디자인을 만들어 낼 수 있다.

  3. 재사용이 쉽다.

    좋은 설계나 아키텍처가 패턴이라는 이름으로 명명되어 있기 때문에 설계나 구조를 쉽게 이해할 수 있기 때문에 새로운 소프트웨어로의 재사용이 쉬워진다.


디자인 패턴의 분류

새로운 소프트웨어를 개발할 때마다 대부분의 개발자는 어떤 클래스를 만들고 어느 시점에 객체를 생성하고 소멸시킬지, 데이터 처리와 구조 및 설계를 고민하게 된다. 디자인 패턴 분류는 위와 같은 반복적인 상황에서 설계를 용이하게 하며 코드의 재사용이 용이하도록 패턴을 정리하여 놓은 것이다.

이중 GoF의 패턴 분류방법은 목적범위로 디자인 패턴을 분류하였음

  • 목적
    : 패턴이 무엇을 하는 지 정의함. "생성", "구조", "행위" 중 한 가지의 목적을 가진다.
    • 생성 : 객체의 생성과정에 관여하는 패턴
    • 구조 : 클래스나 객체의 구성을 통해 더 큰 구조로 만들 수 있게 해주는 패턴
    • 행위 : 패턴을 주로 클래스 또는 객체에 적용하는지에 따라 구분되는 패턴
  • 범위
    : 패턴을 클래스 또는 객체에 적용하는 지에 따라 구분되는 패턴
    • 클래스 패턴 : 클래스들과 하위 클래스 간 관계를 다루는 패턴
    • 객체 패턴 : 객체간 관계를 다루며 구성을 통해 정의됨. 동적이면서 유연함.

디자인 패턴의 종류

싱글턴 패턴(Singleton Pattern)

객체의 생성에 관련된 패턴으로 특정 클래스의 인스턴스가 오직 하나임을 보장하며 이 인스턴스에 접근할 방법을 제공함.

싱글턴 패턴은 iOS app의 다양한 곳에 사용되고 있다고함
-> UIApplication, FileManager, NotificationCenter, UserDefault, URLSession 등..

옵저버 패턴(Observer Pattern)

객체의 상태변화를 관찰하는 관찰자들인 옵저버의 목록을 객체에 등록하여 상태 변화가 일어날 때마다 메서드 등을 통하여 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴임.

팩토리 패턴(Factory Pattern)

객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이뤄지도록 인스턴스의 생성의 책임을 떠넘기는 특징이 있는 패턴임.


MVC 패턴 (Model-View-Controller)

iOS app개발에 주로 적용되는 디자인패턴 중 하나.
app의 객체를 모델, 뷰, 컨트롤러의 세 역할 중 하나로 할당하는 특징이 있음.

MVC 패턴 이미지

Model

app과 관련된 데이터를 캡슐화하여 처리함. 클래스 또는 구조체를 활용함.

View

app 내에서 사용자가 볼 수 있는 객체.
모델 객체의 데이터를 보여주고 해당 데이터를 편집하는 역할.

Controller

view와 model 사이의 코디네이터 또는 중개자 역할을 함.
controller는 사용자의 동작들을 해석하여 model 객체에 전달하는 등의 매개체의 역할을 하게됨.
다른 객체들의 life cycle을 관리함.

  • 대표적으로 ViewController

ex) 사용자가 view에 동작을 전달하면 controller에게 전달되어 다시 view에 화면을 업데이트 해주거나 또는 asset과 의사소통 하는 등의 시나리오...


참조

profile
완씨의 개발기록

0개의 댓글