티스토리 뷰

부스트코스를 수강하면서 배운 내용과 추가로 알고 싶은 내용을 정리하기로 했다
이번에 정리한 부분은 디자인패턴에 대한 내용이다


디자인패턴

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

디자인 패턴의 분류

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

디자인 패턴의 종류

  1. 싱글턴 패턴(Singleton Pattern)
    • 목적 : 생성
    • 범위 : 객체
    • 객체의 생성에 관련된 패턴으로 특정 클래스의 인스턴스가 오직 하나임을 보장하고 이 인스턴스에 접근할 방법을 제공
  2. 퍼사드패턴(Facade Pattern)
    • 목적 : 구조
    • 범위 : 객체
    • 건물의 정문에 있는 안내소처럼 개발자가 사용해야하는 서브 시스템의 가장 앞쪽에 위치, 하위 시스템에 있는 객체들을 사용할 수 있도록 하는 역할, 시스템의 복잡성을 줄이기 위해 서브 시스템을 구조화, 서브 시스템으로의 접근을 하나의 퍼사드 객체로 제공
  3. 옵저버 패턴(Observer Pattern)
    • 목적 : 행위
    • 범위 : 객체
    • 객체의 상태변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴
  4. 스트래티지 패턴(Strategy Pattern)
    • 목적 : 행위
    • 범위 : 객체
    • 알고리즘을 담당하는 각각의 클래스를 만들어 책임을 분산하기 위한 목적으로 만든 행위 패턴
  5. 팩토리 패턴(Factory Pattern)
    • 목적 : 생성
    • 범위 : 클래스
    • 객체를 생성하기 위한 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이루어지도록 인스턴스 생성의 책임을 떠넘기는 패턴
  6. 어댑터 패턴(Adapter Pattern)
    • 목적 : 구조
    • 범위 : 클래스, 객체
    • 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해줌

생각해보기

싱글턴 패턴은 iOS 애플리케이션의 다양한 곳에서 사용되고 있다. 어디에 사용되고 있을까?

싱글톤패턴?

  • 특정용도로 객체를 하나 생성하여 공용으로 사용하는 방법
  • 주로 환경설정, 로그인정보 등을 특정용도로 생성해둔 객체에 넣어두고 여러 객체에서 접근 가능하도록 함, 객체는 임의로 메모리에서 해제해주지 않는 이상 프로그램이 실행되고 끝날 때 까지 메모리에 유지됨

싱글톤패턴의 생성

  • 클래스를 정의할 때 내부에 해당 클래스와 같은 타입의 타입프로퍼티를 생성하여 접근
  • 이때 타입프로퍼티는 지연(lazy)생성 되기 때문에 생성 되기 전까지는 메모리에 올라가지 않는다 그래서 Thread-Safe한 방법이 된다
  • 여러번 생성되는 것을 막기 위해 해당 클래스의 이니셜라이저를 private로 설정한다
1
2
3
4
5
6
7
class Singleton{
    static let shared = Singleton()
    private init () { }
    var data = 0
}
 
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함