오블완 21

iOS 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현

iOS 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현 멀티캐스트 패턴을 활용해 로그인 기능을 구현 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현 : https://rldd.tistory.com/706Combine을 활용해 로그인 상태 관리 기능 구현 : https://rldd.tistory.com/707   목차배경고려사항데모 샘플 구현 코드멀티캐스트 기능 구현 모듈로그인 기능 구현체이벤트 수신(사용 예제)구현 후 분석 배경 앱 내에서 카카오, 네이버, 페이스북 등 여러 소셜 로그인을 지원하고 있음.로그인이 되지 않은 상태에서도 로그인 페이지가 나타나는 것이 아닌, 각 페이지마다 별도의 정책이 적용되며 다른 UI가 나타남.웹뷰, 웹 등 로그아웃 버튼이 아니더라도 로그아웃 처리시킬 수..

계약에 의한 설계

계약에 의한 설계 느낀점부록 A인데 계약에 의한 설계를 읽어보면서 프레임워크나 라이브러리를 내부를 어떻게 구현하고, 외부에 어떤 인터페이스들을 어떻게 제공하면 좋은지 더 생각하는 부록이었음.  계약에 의한 설계인터페이스를 다듬고 명령과 쿼리를 분리했다고 하더라도 명령으로 인해 발생하는 부수효과를 명확하게 표현하는 데는 한계가 존재주석으로 부수효과를 설명하는 것도 가능하겠으나, 파급효과를 명확하게 전달하기가 쉽지 않을 뿐더러 시간이 흐를수록 구현을 정확하게 반영하지 못할 가능성도 높음메서드의 구현이 단순하다면 부수효과를 쉽게 이해할 수 있을지도 모르지만, 부수효과를 가진 다수의 메서드들을 연이어 호출하는 코드를 분석하는 경우에는 실행결과를 예측하기 어려울 수 있음명령의 부수효과를 쉽고 명확하게 표현할 수 ..

오브젝트: 코드로 이해하는 객체지향 설계 나아가기를 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 나아가기를 읽으며 느낀점패턴에 대해서 더 상세히 알게 되었음. 컴포넌트 재사용과 합성이 이상적으로는 좋지만 현실에서는 아쉬웠다는 포인트에서 합성은 정말 좋은 방법이지만 모든 문제를 이 형태로 강제하여 해결하려는 건 어렵다고 생각하게 되었음  나아가기새로운 기술을 학습하기 위해서는 3가지 단계를 거침따라하는 수준적합한 열 가지 절차가 있더라도 모든 절차를 한번에 습득하는건 불가하여 한 가지 절차를 학습하고 그대로 모방분리 수준단 하나의 절차만으로는 모든 문제를 해결할 수 없는 사실을 깨닫고 다양한 절차를 학습하고 트레이드오프 함.모든 경우에 올바른 절차란 존재하지 않는다는 사실을 이해하고 각 상황에 따라 판단력과 유연함을 익힘.거침없는 수준이제 절차는 중요하지 않은..

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

오브젝트: 코드로 이해하는 객체지향 설계 15장을 읽으며 느낀점패턴에 대해서 더 상세히 알게 되었음. 컴포넌트 재사용과 합성이 이상적으로는 좋지만 현실에서는 실패했다는 이야기에서 내 코드에서도 일부는 일관성있는 구조를 시간 및 여러가지 사유로 어긴 케이스가 있어서 이에 대한 근거를 찾으려고 마련하게 되었던 것 같음.  디자인 패턴과  프레임워크소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법을 디자인 패턴이라고 부름디자인 패턴의 목적은 설계를 재사용하는 것디자인 패턴을 익히고 나면 변경의 방향과 주기를 이해하는 것만으로도 필요한 역할과 책임, 역할들의 협력 방식을 순간적으로 떠올릴 수 있음프레임워크는 설계와 코드를 함께 재사용하기 위한 것프레임워크는 아키텍처를 구현..

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

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

UICollectionView Crashes on iOS 18 with Xcode 16: Troubleshooting Guide

UICollectionView Crashes on iOS 18 with Xcode 16: Troubleshooting Guide 기존 운영중인 코드에서 Xcode 16, iOS 18 에서만 UICollectionView 크래시 발생 크래시 상황 분석상황 분석Xcode 16 + iOS 17.7 ✅ 크래시 미발생Xcode 16 + iOS 18 + ❌ 크래시 발생즉, Xcode 16과 iOS 18 기기 한정해서 발생하는 걸로 보임. 크래시 현상 재현 코드deque를 2회이상 수행하면 크래시가 발생.import UIKitclass ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionV..

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

오브젝트: 코드로 이해하는 객체지향 설계 13장을 읽으며 느낀점상속과 관련된 설계에서 부모 클래스와 자식 클래스 간의 계약이 어떻게 정의되고 지켜져야 하는지 알게 되었음. 부모 클래스에서 정의된 규칙과 제약을 자식 클래스가 확장하거나 변경할 때, 이를 위반하지 않고 일관성을 유지하는 것이 객체지향 설계의 핵심상속이 단순히 코드 재사용을 위한 도구가 아니라, 명확하고 견고한 계약을 기반으로 하는 책임의 연속성을 의미.계약에 의한 설계에서 계약 위반이 발생했을 때 시스템이 얼마나 취약해질 수 있는지에 설득력 있었고, 상속보다는 합성(composition)을 활용해 계약을 명시적으로 정의하고 관리하는 것이 때로는 더 효과적일 것 같음.  서브클래싱과 서브타이핑상속의 첫번째 용도는 타입 계층을 구현하는 것타입 ..

Combine ReadOnly Publisher

Combine ReadOnly PublisherCombine을 통해 개발하는데, Read만 가능한 Publiser가 필요한 상황이 생김.Combine과 SwiftUI에서 기본 제공되는 PassthroughSubject, CurrentValueSubject, @Published로는 읽기 전용으로 제한하기에 마땅치 않아서 커스텀하게 만들어서 사용하고자 함. 목차 모듈 전체 코드 CurrentValueSubject을 통한 구현 PassthroughtSubject을 통한 구현 PassthroughSubject를 활용한 구현에서 value를 지원하는 형태 간단 사용 예제 모듈 전체 코드구현할 때 고려했던 것들Swift Package를 활용해서 모듈 형태로 구현해서 접근제어자 활용...

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

오브젝트: 코드로 이해하는 객체지향 설계 12장을 읽으며 느낀점self, super 등 다형성에 점점 더 지식이 늘어가는 것 같다 가끔 수동 배포 할 때 ad hoc이란 용어가 있었는데, 임시라는 의미였다니! 다형성코드 재사용을 목적으로 상속을 사용하면 변경하기 어렵고 유연하지 못한 설계에 이를 확률이 높아짐상속의 목적은 코드 재사용이 아님상속은 타입 계층을 구조화하기 위해 사용해야 함.클라이언트 관점에서 인스턴스들을 동일하게 행동하는 그룹으로 묶기 위해서라면 사용하지 말아야 함.상속의 일차적인 목적은 코드 재사용이 아닌 서브 타입의 구현이라는 사실을 이해할 것객체지향에서 다형성은 유니버셜 다형성과 임시(ad Hoc) 다형성으로 분류할 수 있음유니버셜 다형성은 매개변수(Parametric) 다형성과 포함..

Swift Mixin and Trait

Swift Mixin and Trait iOS 프로그래밍에서 주로 사용되는 언어는 Swift로 다중 상속을 지원하지 않음.Swift에서는 인터페이스(Interface)를 프로토콜(protocol)로 사용하고 있어서 프로토콜이라는 용어와 인터페이스의 의미는 같음. 목차배경mixin이란?interface(protocol), mixin, trait예제를 통해 알아보기 1예제를 통해 알아보기 2예제를 통해 알아보기 3swift 다중 상속 컴파일 오류몇가지 실험들둘 다 채택한 경우명시적 캐스팅배경객체지향 프로그래밍에서 상속의 사용은 코드의 결합도를 크게 증가시킴. 이로 인하여 많은 문제점들이 발생.상속을 코드 중복을 해결하기 위한 수단으로 사용하면 안됨.상속은 부모와 자식간의 높은 결합도를 가지게 되어 코드의 ..