[iOS] 프로그래밍 디자인 패턴

승아·2021년 4월 12일
0

부스트코스-iOS 앱 프로그래밍

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

프로그래밍 디자인 패턴

  • GoF
    "특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명이다."
  • 라만(C. Larman)
    "숙련된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리(repertoire)를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 체계화되고 명명된 것이다."
  • 프로그래밍 디자인 패턴은 소프트웨어를 설계할 때 특정 상황에서 자주 사용하는 패턴을 정형화한 것이며, 좋은 소프트웨어 설계를 위한 개발자들의 경험적 산물

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

  • 의사소통에 도움을 줌. 디자인 패턴을 알고 있는 설계자들은 특정 문제에 대해 공통으로 알고 있는 패턴을 이용해 해결책에 대해 논의를 할 수 있기 때문에 더욱 원활하게 의사소통할 수 있음
  • 검증된 지식인 패턴을 사용하면 높은 완성도의 디자인을 빠른 시간에 만들어 낼 수 있기 때문에 소프트웨어 개발 비용을 줄일 수 있어서 경제적임. 또한, 코드의 수준을 한 단계 높여 주고 적은 수의 클래스로 원하는 목적을 달성할 수 있는 환경이 제공됨.
  • 좋은 설계나 아키텍처가 패턴이라는 이름으로 명명되어 있어 개발자는 그 패턴의 이름만으로도 그 소프트웨어의 구조를 알 수 있음. 이를 바탕으로 이전의 소프트웨어 개발에서 사용한 설계나 구조를 쉽게 이해할 수 있고, 새로운 소프트웨어로 빠르게 적용할 수 있어서 소프트웨어 재사용을 쉽게 해줌.

GoF의 디자인 패턴의 분류

  • 목적
    패턴이 무엇을 하는지 정의하는 것으로 "생성", "구조", "행위" 중의 한 가지 목적을 갖습니다.
    - 생성 (Creational Pattern)
    객체의 생성 과정에 관여하는 패턴입니다.
    - 구조 (Structural Pattern)
    클래스나 객체의 구성을 통해 더 큰 구조로 만들 수 있게 해주는 것과 관련된 패턴입니다.
    - 행위 (Behavioral Pattern)
    패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지에 따라 구분되는 패턴입니다.
  • 범위
    패턴을 클래스에 적용하는지 아니면 객체에 적용하는지에 따라 구분되는 패턴입니다.
    - 클래스 패턴 (Class Pattern)
    클래스들과 하위 클래스 간의 관계를 다루는 패턴입니다. 컴파일 시에 관계가 결정됩니다.
    - 객체 패턴 (Object Patterns)
    객체 간의 관계를 다루며 보통 구성을 통해 정의됩니다. 객체 패턴은 일반적으로 실행시간에 관계가 생성되기 때문에 더 동적이면서 유연합니다.

디자인 패턴의 종류

  • 싱글턴 패턴 (Singleton Pattern)
    - 목적 : 생성
    - 범위 : 객체
    - 객체의 생성에 관련된 패턴으로서 특정 클래스의 인스턴스가 오직 하나임을 보장하고 이 인스턴스에 접근할 방법을 제공합니다.

  • 퍼사드 패턴 (Facade Pattern)
    - 목적 : 구조
    - 범위 : 객체
    - 건물의 정문에 있는 안내소처럼 개발자가 사용해야 하는 서브 시스템의 가장 앞쪽에 위치하면서 하위 시스템에 있는 객체들을 사용할 수 있도록 하는 역할을 합니다. 시스템의 복잡성을 줄이기 위해 서브 시스템을 구조화하고 서브 시스템으로의 접근을 하나의 퍼사드 객체로 제공하는 패턴입니다.

  • 옵저버 패턴 (Observer Pattern)
    - 목적 : 행위
    - 범위 : 객체
    - 객체의 상태변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴입니다.

  • 스트래티지 패턴 (Strategy Pattern)
    - 목적 : 행위
    - 범위 : 객체
    - 알고리즘을 담당하는 각각의 클래스를 만들어 책임을 분산하기 위한 목적으로 만든 행위 패턴입니다.

  • 팩토리 패턴 (Factory Pattern)
    - 목적 : 생성
    - 범위 : 클래스
    - 객체를 생성하기 위한 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이루어지도록 인스턴스 생성의 책임을 떠넘기는 패턴입니다.

  • 어댑터 패턴 (Adapter Pattern)
    - 목적 : 구조
    - 범위 : 클래스, 객체
    클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해줍니다.

💡 싱글턴 패턴은 iOS 애플리케이션의 다양한 곳에 사용되고 있습니다. 어디에 사용되고 있는지 생각해봅시다.

  • 앱 전체에 하나 존재하는 UIApplication 객체
  • 파일 접근을 돕는 FileManager
  • 알림 센터 NotificationCenter 객체
  • 데이터 지속성이 필요한 정보(앱 내 설정) UserDefaults 객체
  • 네트워크 통신을 위한 URLSession 객체

0개의 댓글