디자인 패턴 28

Decorator 패턴

Decorator 패턴은 기본 객체에 추가적인 기능을 동적으로 유연하게 첨가하는 패턴입니다. 구조 Component ConcreteComponent와 Decorator가 구현할 인터페이스입니다. 두 객체를 동등하게 다루기 위해 존재합니다. ConcreteComponent Decorate를 받을 객체입니다. 즉, 기능 추가를 받을 기본 객체를 의미합니다. Decorator Decorate를 할 객체의 추상 클래스입니다. 즉, 기능 추가를 할 객체는 이 객체를 상속받습니다. ConcreteDecorator Decorator를 상속받아 구현할 다양한 기능 객체입니다. 이 기능들은 ConcreteComponent에 추가되기 위해 만들어 집니다. 활용 상황 객체가 상황에 따라 다양한 기능이 추가되거나 삭제되어야 ..

Proxy 패턴

Proxy 패턴은 Proxy 객체를 통해 기본 객체에 접근하는 패턴입니다. 구조 Subject Proxy와 RealSubject가 구현해야하는 인터페이스입니다. 두 객체를 동일하게 다루기 위해 존재합니다. Proxy RealSubject와 Client 요청 사이에 존재하는 객체입니다. Subject를 구현함으로써 Client가 RealSubject를 사용하는 것과 별 차이가 없습니다. RealSubject 실질적으로 요청에 대해 주된 기능을 수행하는 객체입니다. Proxy 객체는 내부적으로 RealSubject 객체를 로직에 맞게 사용합니다. (위임) 활용 상황 기본 객체가 리소스 집약적인 경우에 유용합니다. 자잘한 작업들은 Proxy 객체가 처리하면 됩니다. 기본 객체에 접근을 제어해야하는 경우에 유용..

Composite 패턴

Composite 패턴은 단일 객체와 그 객체들을 가지는 집합 객체를 같은 타입으로 취급하며, 트리 구조로 객체들을 엮는 패턴입니다. 구조 Component Leaf와 Composite가 구현해야하는 인터페이스로, Leaf와 Composite는 모두 Component라는 같은 타입으로 다뤄집니다. Leaf 단일 객체로 Composite의 부분 객체로 들어가게 됩니다. 이때, Component의 형태로 들어갑니다. Composite 집합 객체로 Leaf 객체나 Composite를 자식으로 둡니다. 이때, Component의 형태로 들어갑니다. 클라이언트는 이 Composite를 통해 부분 객체들(Leaf나 Composite)을 다룰 수 있습니다. 활용 상황 객체들 간에 계급 및 계층구조가 있고 이를 표현해..

Clean Swift(VIP) 패턴

일반적인 Clean Swift(VIP) 패턴 VIP 패턴은 VIPER 패턴과 디렉토리와 생성되는 클래스는 동일하지만 플로우를 다른 관점에서 보는 아키텍처입니다 VIPER는 양방향으로 로직이 순환해서 순환참조에 의한 메모리 누수가 발생할 수 있고, 또한 하나의 액션의 기대 결과값을 위해 각 클래스의 프로토콜에 메소드를 만들어야하는 수고스러움이 있습니다 그래서 이런 수고스러움을 덜고자 VIP는 닫는 방향으로 로직이 순환하여 액션에 대한 결과값을 보여주는 형태입니다 역할 및 동작 원리 View 스토리보드, XiB와 같은 사용자와 상호작용이 발생하는 인터페이스 Controller View를 코드에 바인딩하는 레이어 Interactor Controller의 요청을 보내야하는 비즈니스 로직 계층 Presenter ..

디자인 패턴 2021.04.13

VIPER 패턴

일반적인 VIPER 패턴 VIPER 패턴은 MV(X)의 패턴을 대체하기 위해 만들어진 패턴입니다. 역할 및 동작 원리 View 사용자에게 보여지는 View를 생각하시면 됩니다 유저 인터랙션을 받는 역할을 담당합니다 이벤트가 발생할 시 Presenter에게 해당 일을 전달합니다 Presenter의 요청대로 디스플레이하고 사용자의 입력을 Presenter에게 보냅니다 Presenter Entity로부터 받은 업데이트 이벤트를 실행하지만 데이터를 직접적으로 보내지는 않습니다 View 모델의 변경사항을 Interactor에게 알립니다 Interactor로부터 데이터를 가져오고 View로 보내기 위해 데이터를 준비하여 View로 데이터를 디스플레이할 시기를 결정합니다 Interactor Presenter로부터 받..

디자인 패턴 2021.04.13

MVVM 패턴

일반적인 MVVM 패턴 MVVM 패턴은 MVC 패턴에서 Controller를 빼고 ViewModel을 추가한 패턴입니다. 역할 및 동작 원리 View iOS는 ViewController까지 View가 됩니다 사용자가 보여지는 View를 생각하면 된다. 유저 인터랙션을 받는 역할, 인터랙션을 받을 시 ViewModel에게 명령을 내립니다. ViewModel View를 표현하기 위해 만들어진 View를 위한 Model View와는 Binding을 하여 연결후 View에게서 액션을 받고 또한 View를 업데이트합니다 ex) textView에 보여줄 내용을 담당하는 함수 등, View에서 변화가 일어나는 ViewController의 역할을 담당 Model 데이터, 비즈니스 로직, 서비스 클라이언트 등으로 구성 ..

디자인 패턴 2021.04.13

MVP 패턴

일반적인 MVP 패턴 MVP 패턴은 MVC 패턴에서 Controller를 제거하고 Presenter를 추가한 것 입니다. Controller 대신에 Presenter로 대체한 이유는 View와 Model의 의존성을 없애기 위함입니다. 역할 및 동작 원리 Model 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분 domain Data 또는 데이터를 다루는 data access layer를 담당하는 카테고리 View 사용자에게 제공되어 보여지는 UI Presenter View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분 Presenter에는 어떠한 layout code도 담겨져 있지 않습니다 View의 데이터와 상태를 Updating 해주는 역할을 합니다 MV..

디자인 패턴 2021.04.12

MVC 패턴

일반적인 MVC 패턴 MVC 패턴은 일반적으로 널리 사용되는 패턴 중 하나입니다. 위의 그림은 일반적인 MVC 패턴의 모습인데, Controller가 다리 역할이 되어 View의 입력을 Model에 반영합니다. 그리고 그에 따른 Model의 변화를 Controller가 다시 View에게 전달하여 View를 갱신합니다. 역할 및 동작 원리 Model 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분 View 사용자에게 제공되어 보여지는 UI Controller 사용자의 입력을 받고 처리하는 부분 1. Controller로 사용자의 입력이 들어옵니다 2. Controller가 Model의 데이터를 업데이트합니다 3. Model은 해당 데이터를 보여줄 View를 선택해서 사용자에게 보여줍..

디자인 패턴 2021.04.12