본문 바로가기

전체 글

[Swift 문법] 프로토콜을 사용한 조건문 줄이기 안녕하세요. 이번 글에선 프로토콜을 사용해서 코드의 가독성을 높이는 방법에 대해 알아보도록 하겠습니다.  저같은 경우 프로토콜을 처음 접했을때 어떤 상황에서 사용하는게 좋은건지 몰랐지만 지금 제가 소개하는 간단한 예제를 통해서프로토콜을 사용하면 불필요한 반복문도 줄이고 유연하게 만들 수 있구나를 알아가시면 좋을 것 같네요. 먼저 예제로 살펴볼 코드는 프로토콜을 사용하지 않은 예 입니다.class Car { func drive() { print("차를 운전합니다.") }}class Bicycle { func drive() { print("자전거를 탑니다.") }}func activateVehicle(_ vehicle: Any) { if vehicle is .. 더보기
[Swift 문법] if case 를 사용한 패턴매칭 오늘은 Swift 의 if case 를 사용한 패턴매칭에 대해 알아보려합니다.이름만 들었을땐 이게 뭐지 생각하실 수도 있지만  막상 코드를 보면 아 이럴때 사용하던거였구나 하실 겁니다.사용하기에 앞서 enum 타입을 먼저 살펴보겠습니다. enum T1 { case top(name: String, years: Int) case jungle(name: String, years: Int) case mid(name: String, years: Int) case ad(name: String, years: Int) case support(name: String, years: Int)}let zeus = T1.top(name: "최우제", years: 4)let oner = T1.jungl.. 더보기
[Combine] ViewModel 에서 Input, Output 구현하기 MVVM 구조로 작업을 하다보면 자연스럽게 Input, Output 에 대한 개념을 접하게 됩니다.  그래서 이번 글에선 왜 이런 구조가 필요했고, 어떻게 사용하는지를 알아보려 합니다. 같이 예시로 살펴볼 화면은 인스타그램의 피드입니다.  사용자들은 좋아요를 누르기도 하고 DM을 보낼 수도 있고저장하기 기능도 사용할 수 있게 됩니다. 그러면 댓글 모두 보기를 클릭하게 될 경우엔 어떤 화면이 노출될까요?피드를 덮은 상태로 상위에 댓글View 가 보이게 됩니다. 즉, 사용자가 클릭을 하고(Input), 클릭에 대한 결과로 댓글View가 올라오게 됩니다(Output).(물론, 피드가 셀로 구성되어 있어서 중간에 많은 단계가 있을 수 있겠지만 이번 글에선 간단하게 생각만하고 넘어갑니다..!) 개발을 진행하면서 .. 더보기
[디자인 패턴의 아름다움] 2장. 객체지향 프로그래밍 패러다임 책을 보고 정리하고 싶은 내용을 작성하는것이니 이해되지 않는 부분이 있을 수 있어요. 참고 부탁드립니다. 1. 캡슐화 - 접근 가능한 인터페이스를 제한하는 것 - 클래스가 제공하는 메서드를 통해서만 내부 정보나 데이터에 대한 외부 접근을 허가 하는 것을 의미한다. - 과도한 유연성은 제어할 수 없음을 의미하고 속성이 여러 가지 이상한 방식으로 수정될 수 있으며 수정 논리가 코드의 모든 구석에 흩어져 코드의 가독성과 유지 관리 용이성에 영향을 줄 수 있다. - 속성을 캡슐화하고 몇 가지 필요한 메서드만 노출하면 모든 비즈니스 세부 정보를 완벽하게 이해하지 않아도 잘못 사용할 가능성이 크게 줄어들 수 있다. 2. 추상화 - 메서드의 내부 구현을 숨기는 것 - 구현이 아닌 기능에만 초점을 맞춘 설계 사상인 추.. 더보기
[Combine] ViewModel 의 상태변화를 View 에게 알려주고 싶다면 어떻게 해야할까? 오늘은 업무를 진행할때 겪은 어려움을 해결했던 과정에 대해 글을 작성해보려 합니다. 제목 그대로 ViewModel 의 상태변화를 View 에게 알려주고 싶다면 어떻게 해야할까요? @ObservedObject private var contentViewModel: ContentViewModel 이런식으로 @ObservedObject 를 붙여주게 된다면 ViewModel 의 값이 바뀔때 마다 View 가 알 수 있게 됩니다. 그렇다면, ViewModel 안에 또 다른 ViewModel 의 상태 변화를 알고 싶다면 어떻게 해야할까요? final class ContentViewModel: ObservableObject { @ObservedObject var detailViewModel: DetailViewMode.. 더보기
[Combine] SwiftUI 에서는 Publisher 를 어떻게 구독할까? 안녕하세요. 이전 글에서 Publisher, Subscriber 를 구독하는 방법에 대해 알아봤습니다. 이번엔 SwiftUI 에서는 어떻게 구독하는지에 대해 알아보려합니다. 크게 3가지로 알아보겠습니다. 1. onReceive 2. ObservableObject & @Published 3. ViewModifier 사용 1. onReceive onReceive는 SwiftUI 에서 가장 간단한 Publisher 구독 방법이라 볼 수 있습니다. struct ContentView: View { @State private var data: String = "🌧️" private var cancellables: Set = [] let somePublisher = Just("🌈") var body: some Vie.. 더보기
[Combine] Subject 알아보기 (PassthroughSubject / CurrentValueSubject) 이번 글에선 Subject 에 대해 알아보도록 하겠습니다. 공식 문서에도 보이듯 Subject 는 Publisher 프로토콜을 따르는 것을 확인할 수 있습니다. 설명을 살펴보면 Subject 는 스트림에 send(_:) 메서드를 호출해서 값을 주입(inject) 할 수 있는 publisher 라고 작성되어 있습니다. Subject 내부는 어떻게 만들어져 있는지 살펴보면 3가지의 send 메서드가 있는것을 확인할 수 있습니다. 중요한건 value, completion, subscription 을 subscriber 에게 전달하는 것을 확인할 수 있습니다. 그렇다면 subject 라는 것도 프로토콜이니 누군가 채택을 해서 사용할텐데 이를 채택해서 사용하는 것은 CurrentValueSubject, Passt.. 더보기
[Combine] Publisher 와 Subscriber 는 어떻게 연결할 수 있을까? 지난번 글을 통해 간단하게 Combine 이 무엇이고 Publisher, Operator, Subscriber 에 대해 알아봤습니다. 이번엔 좀 더 나아가 어떻게 사용하는지 확인해보겠습니다. Publisher 와 Subscriber 를 연결해주는 보편적인 방법으로는 1. .subscribe 2.sink 3. assign(to:on:) 으로 볼 수 있습니다. sink 는 이전 글에서도 한번 다룬적이 있지만 다시 한번 설명을 위해 작성해보도록 하겠습니다. 1. .subscribe let coupangPublisher = ["요거트","사과","아이폰","에어팟"].publisher class CoupangSubscriber: Subscriber { typealias Input = String typealia.. 더보기