디자인패턴 16

오브젝트: 코드로 이해하는 객체지향 설계 14장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 14장을 읽으며 느낀점서비스 발전하면서 계속 코드 수정하게 되는데, 그때는 맞고 지금은 틀리다가 가장 정확한 표현인 것 같다  일관성 있는 협력객체는 협력을 위해 존재하며, 협력은 객체가 존재하는 이유와 문맥을 제고잘 설계된 애플리케이션은 이해하기 쉽고, 수정이 용이하며, 재사용 가능합 협력의 모임일관성 있는 패턴을 적용하면 이해하기 쉽고 직관적이며 유연해진다는 것코드 재사용을 위한 상속은 해롭다두 클래스 사이의 강한 결합도는 설계 개선과 기능의 추가를 방해 설계에 일관성 부여하기일관성 있는 설계를 만드는데 가장 훌룡한 조언은 다양한 설계 경험을 익히는 것풍부한 설계를 가진 사람은, 그 변경을 어떻게 다뤄야 하는지에 대한 통찰력을 가짐일관성을 제공하기 위해 어떤 ..

ReactorKit + RxDataSources #1(SectionModelType)

ReactorKit + RxDataSources #1(SectionModelType) 개발환경ReactorKit 3.2.0RxDataSources 5.0.2SnapKit 5.6.0Xcode 14.0 RxDataSources 를 활용한 코드 플로우 간단 정리섹션마다 다른 셀을 적용tableView를 활용하여 동적 높이를 구현함.ReactorKit + RxDataSource를 활용하면 궁합이 좋음cellReactor에 initialState의 값을 Model로 초기화 결과물 UI  전체 코드 샘플코드는 하나씩 플로우를 따라가면서 볼 예정 Step 1. 모델을 정의하기// ✅ 0. 사용할 모델읠 정의class GWRxDataSourceModel { var id = UUID().uuidString ..

Swift 디자인패턴 Coodinator Pattern (코디네이터 패턴)

Swift 디자인패턴 Coodinator Pattern (코디네이터 패턴) Coordinator 패턴은 화면 전환 및 네비게이션 로직을 분리하여 ViewController의 역할을 단순화하고, 앱의 화면 흐름을 관리하기 위한 아키텍처 패턴. 히스토리2022-07-07: 디자인 패턴 스터디 정리2024-11-29: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경   Coordinator Pattern코디네이터 패턴은 일반적으로 아래의 구조로 구성Coordinator는 모든 구체적인 Coordinator들이 반드시 구현해야 하는 메서드와 속성을 정의하는 인터페이스children과 router를 정의하며, 화면 전환 메서드인 present와 dismiss도 정의Concrete Coordinator ..

Swift 디자인패턴 Chain-of-Responsibility Pattern (책임 연쇄 패턴)

Swift 디자인패턴 Chain-of-Responsibility Pattern (책임 연쇄 패턴) Chain of Responsibility 패턴은 요청을 처리할 수 있는 여러 객체를 연결하여, 요청이 처리될 수 있는 객체를 찾는 행동 패턴.요청을 보낸 객체와 요청을 처리하는 객체를 분리하여, 요청을 처리할 수 있는 객체가 여러 개일 때 유용 히스토리2022-07-05: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 스스로 만든 예제로 변경   Chain-of-Responsibility PatternChain-of-Responsibility Pattern은 일반적으로 3개지 개념으로 구성됨Handler Protocol: 요청을 처리할 수 있는 인터페이스Concrete Handler: ..

Swift 디자인패턴 Mediator Pattern (중재자 패턴)

Swift 디자인패턴 Mediator Pattern (중재자 패턴) Mediator Pattern은 객체 간의 복잡한 의사소통을 캡슐화하는 행동 패턴 히스토리2022-06-15: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 예제 변경  Mediator Pattern객체들이 직접 상호작용하지 않고, 중재자(Mediator)를 통해서만 소통하도록 설계.객체 간의 강한 결합을 줄이고 코드의 유연성을 높일 수 있음중재자 패턴은 일반적으로 4가지 개념으로 구성Colleague: 의사소통에 참여하는 객체로, 각 동료는 Mediator를 통해 간접적으로 소통Colleague Protocol: Colleague들이 구현해야 하는 메서드와 속성을 정의Mediator: Colleague 간의 의사소..

Swift 디자인패턴 FlyWeight Pattern (플라이웨이트 패턴)

Swift 디자인패턴 FlyWeight Pattern (플라이웨이트) 플라이웨이트 패턴은 메모리 사용량과 처리 과정을 최소화하기 위한 구조 패턴. 히스토리2022-06-09: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경 FlyWeight Pattern메모리를 효율적으로 사용하는 디자인 패턴으로, 공유 가능한 상태(공통 속성)를 분리하여 객체 생성 비용을 줄이는 방법을 제공대량의 객체를 생성해야 할 때 유용특히 반복적인 데이터를 다루는 경우 메모리 사용량을 크게 줄일 수 있음캐시를 구현하는데도 사용할 수 있음플라이웨이트 패턴은 일반적으로 3가지 개념으로 구성됨Intrinsic State: 공유 가능한 상태로 객체 간 공통된 데이터Extrinsic ..

Swift 디자인패턴 Facade Pattern (퍼사드 패턴)

Swift 디자인패턴 Facade Pattern (퍼사드 패턴) 퍼사드 패턴은 복잡한 시스템의 인터페이스를 단순화하여 사용자가 시스템을 더 쉽게 사용할 수 있도록 하는 구조 패턴 히스토리2022-06-07: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경   Facade Pattern여러 개의 서브시스템을 하나의 통합된 인터페이스로 감싸서 클라이언트가 복잡한 내부 구조를 알 필요 없이 간단하게 기능을 사용할 수 있도록 제공여러 서브시스템을 하나의 간단한 인터페이스로 통합클라이언트는 서브시스템의 세부 사항에 의존하지 않고 Facade를 통해 필요한 기능 호출시스템 내부 구조가 변경되더라도 Facade 인터페이스가 변하지 않으면 클라이언트 코드에 영향..

Swift 디자인패턴 Multicast Delegate Pattern (멀티캐스트 딜리게이트 패턴)

Swift 디자인패턴 Multicast Delegate Pattern (멀티캐스트 딜리게이트 패턴) 멀티캐스트 델리게이트 패턴은 델리게이트 패턴을 확장하여, 하나의 객체가 여러 개의 델리게이트에게 알림을 전송. 히스토리2022-06-07: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 예제 변경 Multicast Delegate Pattern멀티캐스트 객체가 델리게이트 객체와의 관계가 일대일이 아닌 일대다로 확장되며, 여러 개의 델리게이트 객체가 이벤트를 수신하고 반응할 수 있음이 패턴의 핵심은 멀티캐스트 델리게이트 헬퍼 클래스로, 이 클래스는 여러 델리게이트를 관리하고, 델리게이트 객체들이 이벤트를 받을 수 있도록 함.헬퍼 클래스를 통해 한 객체가 여러 델리게이트에게 동일한 이벤트를..

Swift 디자인패턴 Iterator Pattern (반복자 패턴)

Swift 디자인패턴 Iterator Pattern (반복자 패턴) Iterator Pattern은 컬렉션(집합체)에 저장된 요소를 순차적으로 접근하는 방법을 제공하는 행동 디자인 패턴.컬렉션의 내부 구현 방식을 노출하지 내부 요소들은 탐색할 수 있도록 함. 히스토리2022-05-13: 디자인 패턴 스터디 정리2024-11-28: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경   Iteractor Pattern두 가지 개념으로 구성됨Iterator: 컬렉션의 요소를 하나씩 탐색하는 객체. 주로 next(), hasNext() 같은 메서드를 제공.Iterable: 반복자 객체를 반환하는 makeIterator() 메서드를 제공하여, 컬렉션이 반복 가능하도록 함.이터레이터 패턴 장점컬렉션 내부 ..

Swift 디자인패턴 Adapter Pattern (어댑터 패턴)

Swift 디자인패턴 Adapter Pattern (어댑터 패턴) Adapter Pattern은 서로 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간 역할을 하는 구조 패턴.기존 코드를 변경하지 않고, 원하는 인터페이스를 갖춘 어댑터를 추가하여 두 시스템을 연결 히스토리2022-05-13: 디자인 패턴 스터디 정리2024-11-28: 포스팅 글 재정리 및 예제 변경 Adapter Pattern어댑터 패턴은 4가지 구성요소로 이루어져 있음클라이언트(Client):특정 인터페이스를 기대하며 동작하는 코드.타겟(Target): 클라이언트가 호출하려는 인터페이스.어댑터(Adapter): 타깃 인터페이스를 구현하여, 실제 서비스를 제공하는 어댑티(Adaptee)를 감싸는 객체.어댑티(Ada..