목록2025/03 (12)
大器晩成
싱글톤 패턴을 구현하다 보면 항상 클래스로만 구현하는데, 왜 구조체로는 구현을 안 하는 걸까?라는 의문을 가질 수 있고,그렇다면 구조체로 싱글톤 패턴을 구현을 못하는 것이냐라고 한다면, "No"입니다. 구조체로도 싱글톤 패턴을 구현할 수는 있습니다.그렇다면 왜 구조체로 사용하지 않고, 클래스로만 사용할까요? 싱글톤 패턴이란 클래스나 구조체의 단일 인스턴스만을 생성하고, 이를 전역적으로 공유하기 위해 사용되는 디자인 패턴입니다. (특정한 유일한 데이터/관리 객체가 필요한 경우 사용) -> 유일하게 1개만 존재하는 객체입니다. (단일 인스턴스)즉, 한 번 실행되면 앱이 종료할 때까지 1개의 객체로써 메모리에 상주합니다. class Monster { static let shared = Monste..

MVC, MVVM, InOut Pattern 등 iOS를 개발하면서 너무 많은 패턴들이 존재하지만, 추가적으로 Coordinator 패턴도 있습니다.coordinate의 사전적 의미중, "(몸의 움직임을) 조정하다" 라는 뜻이 있습니다. 이처럼 코니데이터를 조정하는 사람 즉, 조정자를 의미합니다. 이 패턴은 Soroush Khanlou라는 개발자가 2015년에 NSSpain 컨퍼런스에서 처음 소개했습니다. 그는 기존의 iOS 개발에서 UIViewController가 너무 많은 책임을 가지고 있다는 문제를 해결하고자 했습니다. (우리가 MVC -> MVVM으로 변하게 된 이유도 ViewController가 너무 많은 책임을 가지고 있기 때문이죠.) 특히 내비게이션 로직이 뷰 컨트롤러 내부에 깊숙이 들어..
DI (Dependency Injecting)- DI를 직역하자면 의존성 주입이고, 하나의 객체가 다른 객체의 의존성을 제공하는 기술입니다. 주입은 의존성을 사용하려는 객체로 전달하는 것입니다. 우선 의존성이 뭔지 고민을 해보면 다음과 같은 예제를 들어볼 수 있습니다.class Monster { var name: String init(name: String) { self.name = name } func printMonster() { print("이 몬스터는 \(self.name)입니다." ) } }class Maple { let pig = Monster(name: "리본 돼지") }let maple = Maple()maple..
RxSwift를 사용하다 보면, 클로저를 많이 사용하게 됩니다.이때, 강한 참조 사이클이 발생하게 되어, guard let self = self else { return } 구문을 많이 쓰게 되는데, 이 구문을 왜 쓰고, 왜 가능한지 정리해보려고 합니다. 우선 RxSwift에서 강한 참조 사이클을 방지하기 위해 bind(with:)을 많이 사용하는데 내부 구조를 보면 다음과 같습니다. public func bind( with object: Object, onNext: @escaping (Object, Element) -> Void ) -> Disposable { self.subscribe(onNext: { [weak object] in g..