티스토리 뷰
부스트코스를 수강하면서 배운 내용과 추가로 알고 싶은 내용을 정리하기로 했다
이번에 정리한 부분은 디자인패턴에 대한 내용이다
디자인패턴
- GoF : "특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스에 대한 설명"
- 라만(C. Larman) : "숙력된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리(repertorire)를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 쳬계화되고 명명된 것이다."
- 소프트웨어를 설계할 때 특정 상황에서 자주 사용하는 패턴을 정형화한 것, 좋은 소프트웨어 설계를 위한 개발자들의 경험적 산물
디자인 패턴의 분류
- 목적 : 패턴이 무엇을 하는지 정의하는 것으로 "생성", "구조", "행위" 중의 한 가지 목적을 가짐
- 생성(Creational Pattern) : 객체의 생성 과정에 관여하는 패턴
- 구조(Structural Pattern) : 클래스나 객체의 구성을 통해 더 큰 구조로 만들 수 있게 해주는 것과 관련된 패턴
- 행위(Behavioral Pattern) : 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
- 범위 : 패턴을 클래스에 적용하는지 아니면 객체에 적용하는지에 따라 구분되는 패턴
- 클래스 패턴(Class Pattern) : 클래스들과 하위 클래스 간의 관계를 다루는 패턴 - 컴파일 시에 관계가 결정
- 객체 패턴(Object Patterns) : 객체 간의 관계를 다루며 보통 구성을 통해 정의, 객체 패턴은 일반적으로 실행시간에 관계가 생성되기 때문에 더 동적이면서 유연
디자인 패턴의 종류
- 싱글턴 패턴(Singleton Pattern)
- 목적 : 생성
- 범위 : 객체
- 객체의 생성에 관련된 패턴으로 특정 클래스의 인스턴스가 오직 하나임을 보장하고 이 인스턴스에 접근할 방법을 제공
- 퍼사드패턴(Facade Pattern)
- 목적 : 구조
- 범위 : 객체
- 건물의 정문에 있는 안내소처럼 개발자가 사용해야하는 서브 시스템의 가장 앞쪽에 위치, 하위 시스템에 있는 객체들을 사용할 수 있도록 하는 역할, 시스템의 복잡성을 줄이기 위해 서브 시스템을 구조화, 서브 시스템으로의 접근을 하나의 퍼사드 객체로 제공
- 옵저버 패턴(Observer Pattern)
- 목적 : 행위
- 범위 : 객체
- 객체의 상태변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴
- 스트래티지 패턴(Strategy Pattern)
- 목적 : 행위
- 범위 : 객체
- 알고리즘을 담당하는 각각의 클래스를 만들어 책임을 분산하기 위한 목적으로 만든 행위 패턴
- 팩토리 패턴(Factory Pattern)
- 목적 : 생성
- 범위 : 클래스
- 객체를 생성하기 위한 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이루어지도록 인스턴스 생성의 책임을 떠넘기는 패턴
- 어댑터 패턴(Adapter Pattern)
- 목적 : 구조
- 범위 : 클래스, 객체
- 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해줌
생각해보기
싱글턴 패턴은 iOS 애플리케이션의 다양한 곳에서 사용되고 있다. 어디에 사용되고 있을까?
- naroti님의[NAROTi][iOS 개발] Singleton Pattern과 소들님의Swift) 싱글톤 패턴(Singleton Pattern)에서 알게된것
- 싱글톤 패턴의 사용
- let screen = UIScrenn.main
- let userDefaults = UserDefailts.standard
- let application = UIApplication.shared
- let fileManager = FileManager.default
- let notification = NotificaitonCenter.default
싱글톤패턴?
- 특정용도로 객체를 하나 생성하여 공용으로 사용하는 방법
- 주로 환경설정, 로그인정보 등을 특정용도로 생성해둔 객체에 넣어두고 여러 객체에서 접근 가능하도록 함, 객체는 임의로 메모리에서 해제해주지 않는 이상 프로그램이 실행되고 끝날 때 까지 메모리에 유지됨
싱글톤패턴의 생성
- 클래스를 정의할 때 내부에 해당 클래스와 같은 타입의 타입프로퍼티를 생성하여 접근
- 이때 타입프로퍼티는 지연(lazy)생성 되기 때문에 생성 되기 전까지는 메모리에 올라가지 않는다 그래서 Thread-Safe한 방법이 된다
- 여러번 생성되는 것을 막기 위해 해당 클래스의 이니셜라이저를 private로 설정한다
1 2 3 4 5 6 7 | class Singleton{ static let shared = Singleton() private init () { } var data = 0 } | cs |
'Swift' 카테고리의 다른 글
[부스트코스-iOS] 추가 공부5 - MVC (0) | 2021.03.20 |
---|---|
[부스트코스-iOS]추가 공부3 - iOS View 체계 (0) | 2021.03.12 |
[부스트코스-iOS]추가 공부2 - 오토레이아웃 (0) | 2021.03.10 |
[부스트코스-iOS]추가 공부1 - 앱시닝, 에셋 카탈로그 (0) | 2021.03.03 |
[Firebase]토이프로젝트 (1) - Storage (0) | 2020.11.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Human Interface Guideline
- Swift
- 온라인저지
- 싱글톤
- apple
- ios
- 백준
- storage
- HumanInterfaceGuidelines
- UIView
- HIG
- 디자인패턴
- Firebase
- MVC
- DP
- 알고리즘
- Human Interface Guidelines
- 부스트코스
- 오토레이아웃
- 분할정복
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함