jay's devnote
  • README
  • 자료구조 & 알고리즘
    • 자료구조
    • 알고리즘
  • 디자인 패턴
    • 디자인 패턴 원칙, 요약, 분류
    • IS-A 와 HAS-A
    • 전략 패턴
    • 옵저버 패턴
    • 데코레이터 패턴
    • 팩토리 패턴
    • 싱글턴 패턴
    • 커맨드 패턴
    • 어댑터, 퍼사드 패턴
    • 템플릿 메소드 패턴
    • 반복자, 컴포지트 패턴
    • 상태 패턴
    • 프록시 패턴
    • 복합 패턴
  • WWDC
    • 2015, Building Better Apps with Value Types in Swift
    • 2015, Protocol-Oriented Programming in Swift
    • 2016, Understanding Swift Performance
    • 2016, Protocol and Value Oriented Programming in UIKit Apps
    • 2017, Engineering for Testability
    • 2018, High Performance Auto Layout
    • 2018, Testing Tips & Tricks
    • 2020, Advances in UICollectionView
    • 2020, Lists in UICollectionView
  • 패러다임
    • 객체지향 프로그래밍, SOLID 원칙
      • SRP, 단일 책임 원칙
      • OCP, 개방 폐쇄 원칙
      • LSP, 리스코프 치환 원칙
      • ISP, 인터페이스 분리 원칙
      • DIP, 의존성 역전 원칙
    • 만들면서 느껴보는 POP
    • Swift로 함수형 프로그래밍 시작하기
  • 아키텍쳐
    • ReactorKit
      • Pulse(EN)
      • Pulse(KR)
    • Coordinator Pattern
  • iOS
    • Safari로 웹뷰의 세션/쿠키 정보 확인하기
    • App Icon 동적으로 변경하기
    • WKDataDetectorTypes의 데이터 탐지
    • Xcode에서 메모리 누수 확인하기
    • 개발 인증서 관리하기
    • required init?(coder: NSCoder)
    • UIFontMetrics 와 UIFont.preferredFont
    • 제약조건을 줄여주는 UIStackView
    • UICollectionView.CellRegistration<Cell, Item>
  • Swift
    • Swift API Design Guidelines
    • 패턴 매칭
    • allSatisfy()
    • 생성자
    • 프로토콜의 동적 디스패치와 정적 디스패치
    • Swift 문법 정리
  • RxSwift
    • RxSwift 핸드북
    • Just, From, Of
    • withLatestFrom
  • SwiftUI
    • SwiftUI에서의 마크다운 문법
    • @State, @Binding
    • ObservableObject, @ObservedObject, @Published
    • @ObservedObject vs @StateObject
  • Git
    • Git gitignore
    • Github API Rate limit
    • GitKraken(깃크라켄) 활용하기
    • GitKraken으로 Git-flow 활용하기
  • Etc
    • Struct을 [String: Any]로 변환할 때, Encodable의 Extension을 사용 해야 하나요?
    • Podfile, Dependency Rule(SPM)
    • 맥으로 고정 IP 연결하는 방법
    • SwiftPlantUML으로 UML 다이어그램 쉽게 그리기
    • Playground 가 열리지 않는 오류 해결하기
    • CocoaPods 제거하기
  • Python
    • 파이썬과 스위프트 문법 비교
    • 파이썬과 스위프트 문법 요약
  • Firebase
    • Storage를 API처럼 사용해보기
    • RealTime Database를 API처럼 사용해보기
Powered by GitBook
On this page
  • 객체지향 디자인 원칙
  • 디자인 패턴 한 줄 요약
  • 디자인 패턴 분류하기
  • Reference
  1. 디자인 패턴

디자인 패턴 원칙, 요약, 분류

Previous디자인 패턴NextIS-A 와 HAS-A

Last updated 2 years ago

객체지향 디자인 원칙

디자인 패턴 한 줄 요약

패턴
설명

*Strategy Pattern ( 전략 패턴 )

알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다.

*Observer Pattern ( 옵저버 패턴 )

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many)의존성을 정의합니다.

*Decorator Pattern ( 데코레이터 패턴 )

객체에 추가 요소를 동적으로 더할 수 있습니다.

*Factory Method Pattern ( 팩토리 메소드 패턴 )

객체를 생성할 때 필요한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. 팩토리 메소드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스에게 맡기게 됩니다.

*Abstract Factory Pattern ( 추상 팩토리 패턴 )

구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공합니다. 구상 클래스는 서브 클래스에서 만듭니다.

*Singleton Pattern ( 싱글턴 패턴 )

클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다.

*Command Pattern ( 커맨드 패턴 )

요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화 할 수 있습니다. 이러면 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있습니다.

*Adapter Pattern ( 어댑터 패턴 )

특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와줍니다.

*Facade Pattern ( 퍼사드 패턴 )

서브시스템에 있는 일련의 인터페이스를 모아서 사용하기 쉽게 통합 인터페이스로 묶어줍니다.

*Template Method Pattern ( 템플릿 메소드 패턴 )

알고리즘의 골격을 정의합니다. 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있고, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의 할 수도 있습니다.

*Iterator Pattern ( 반복자 패턴 )

컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공합니다.

*Composite Pattern ( 컴포지트 패턴 )

객체를 트리구조로 구성해서 부분-전체 계층구조를 구현합니다. 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있습니다.

*State Pattern ( 상태 패턴 )

객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다.

*Proxy Pattern ( 프록시 패턴 )

특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)을 제공합니다.

Bridge Pattern ( 브리지 패턴 )

구현과 더불어 추상화 부분까지 변경합니다.

Builder Pattern ( 빌더 패턴 )

제품을 여러 단계로 나눠서 만들도록 제품 생산 단계를 캡슐화 합니다.

Chain of Responsibility Pattern ( 책임 연쇄 패턴 )

1개의 요청을 2개 이상의 객체에서 처리합니다.

Flyweight Pattern ( 플라이웨이트 패턴 )

어떤 클래스의 인스턴스 하나로 여러 개의 '가상 인스턴스'를 제공합니다.

Interpreter Pattern ( 인터프리터 패턴 )

어떤 언어의 인터프리터를 만듭니다.

Mediator Pattern ( 중재자 패턴 )

서로 관련된 객체 사이의 복잡한 통신과 제어를 한곳으로 집중합니다.

Memento Pattern ( 메멘토 패턴 )

객체를 이전의 상태로 복구합니다.

Prototype Pattern ( 프로토타입 패턴 )

어떤 클래스의 인스턴스를 만들 때 자원과 시간이 많이 들거나 복잡할 때 사용합니다. 기존 인스턴스를 복사하기만 해도 새로운 인스턴스를 만들 수 있습니다.

Visitor Pattern ( 비지터 패턴 )

다양한 객체에 새로운 기능을 추가해야 하는데 캡슐화가 별로 중요하지 않다면 사용합니다.

디자인 패턴 분류하기

  • 생성,행동, 구조라는 3가지 범주로 분류

  • 클래스 또는 객체를 다루는 지에 따른 분류

Reference

바뀌는 부분은 캡슐화한다.
상속보다는 구성을 활용한다.
구현보다는 인터페이스에 맞춰서 프로그래밍한다.
상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용해야 한다.
클래스는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다.(OCP)
추상화된 것에 의존하게 만들고 구상 클래스에 의존하지 않게 만든다.(DIP)
진짜 절친에게만 이야기해야 한다.(PoLK, LoD)
먼저 연락하지 마세요. 저희가 연락 드리겠습니다.(Hollywood Principle)
어떤 클래스가 바뀌는 이유는 하나 뿐이어야만 한다.(SRP)
https://www.hanbit.co.kr/store/books/look.php?p_code=B6113501223