본문 바로가기

전체 글

(426)
[iOS] Static 그리고 Dynamic Dispatch 1. Static Dispatch & Dynamic Dispatch Dispatch 란 어떠한 메서드를 호출할 것인지를 결정하여 그것을 실행하는 메커니즘을 의미합니다. Swift에서는 Static 방식과 Dynamic 방식을 지원하며 이는 내가 호출할 함수를 컴파일 타임에 결정하는가, 런타임에 결정하는가를 의미합니다. Static Dispatch(Direct Call) “컴파일 타임” 에 호출될 함수를 결정하여 런타임때 그대로 실행합니다. 컴파일 타임에 결정이 나기 때문에 성능상 이점을 갖습니다. Dynamic Dispatch(Indirect Call) “런타임" 에 호출될 함수를 결정하여 그대로 실행합니다. 때문에 Swift에서는 클래스마다 함수 포인터들의 배열 vTable(Virtual Dispatc..
[iOS] CleanArchitecutre 톺아보기 3 - Data CleanArchitecture 톺아보기 3 - Data 안녕하세요! ian 입니다. 이번에는 저번 포스팅에 이어 Data 계층에 대하여 톺아보도록 하겠습니다. 예제는 기존 예제를 그대로 살펴보도록 할게요! Data 계층 Data 계층에는 이전에 살펴봤던 Domain 계층에 존재하던 레포지터리 인터페이스를 구현한 레포지터리 구현체가 존재하며 실제 앱에서의 서비스를 처리하기 위해 필요한 데이터를 가져오는 데이터소스를 담당합니다. 여기서 말하는 데이터소스란 리모트 혹은 로컬(ex: Persistent DB) 등을 의미하며 Data 계층 또한 Domain 계층에 대한 의존성을 갖습니다. 자 그러면 레포지터리 구현체부터 톺아보도록 해요:D Repository 이전 포스팅에서 Repository 인터페이스들을 살..
[iOS] CleanArchitecture 톺아보기 2 - Domain CleanArchitecture 톺아보기 2 - Domain 저번 포스팅에 이어서 이번에는 Domain 계층에 대해 톺아보도록 하겠습니다! Domain 계층에는 앱에서 사용되는 주요 데이터 모델인 Entity, 서비스 동작 시나리오 UseCase, 데이터에 관련 로직을 위한 기능들을 추상화 한 Repository Interface가 존재합니다. 하나씩 살펴보도록 할게요! Entity Entity는 비즈니스 모델을 의미합니다. 해당 예제(영화 검색 서비스) 에서는 영화가 주요 Entity 입니다. struct Movie: Equatable, Identifiable { typealias Identifier = String enum Genre { case adventure case scienceFiction ..
[iOS] CleanArchitecutre 톺아보기 1 - DIContainer & Coordinator CleanARchitecture 톺아보기 1 해당 게시글에서는 CleanArchitecture 예제를 톺아보며 학습한 내용을 기록합니다. AppDIContainer final class AppDIContainer { lazy var appConfiguration = AppConfiguration() // MARK: - Network lazy var apiDataTransferService: DataTransferService = { let config = ApiDataNetworkConfig(baseURL: URL(string: appConfiguration.apiBaseURL)!, queryParameters: ["api_key": appConfiguration.apiKey, "language": NS..
[iOS] Swift API Design Guidelines Swift API Design Guidelines Swift.org 목차 1.Fundamentals - 기초 2.NAMING - 명명 Promote Clear Usage - 사용법을 분명히 하세요 Strive for Fluent Usage - 편리한 사용성을 위해 노력하세요 User Terminology Well - 용어를 제대로 사용하세요 CONVENTIONS General Conventions - 일반적인 컨벤션 Parameters - 파라미터 Argument Labels - 인자명 Special Instructions Fundamentals - 기초 사용하는 쪽 입장에서 명확하다고 느끼게 하는 것이 가장 중요한 목표입니다. 💡 메소드, 프로퍼티와 같은 요소들은 일반적으로 한번 선언하고 반복적으로 참..
[iOS] Clean Architecture + MVVM Example Clean Architecture + MVVM 예제 이번에는 저번 시간에 공부했던 Clean Architecture + MVVM 을 기반으로 만들어진 프로젝트를 한번 톺아보며 각각의 계층들을 어떻게 풀어냈는지 살펴보도록 할게요. 예제 애플리케이션은 간단한 영화검색 앱이며 영화를 검색하면 해당 단어가 포함되는 영화들을 보여주고, 스크롤시 데이터를 더 불러옵니다. 상세페이지로 이동시에는 영화의 사진, 제목, 설명을 보여주며 검색 기록까지 함께 남겨주는 앱입니다. 이제 프로젝트를 열어보겠습니다. 프로젝트 네비게이터를 살펴보니 앞서 공부했던것과 같이 Domain, Presentation, Data Layer에 따라 그룹핑이 되어있습니다. Domain 폴더 내에는 비즈니스 모델 역할을 하는 Entities와 비즈..
[iOS] Clean Architecture Clean Architecture 사이드 프로젝트에서 MVVM에 더불어 Clean Architecture를 함께 사용하게 되었습니다. 이번 기회에 간략하게만 알고있던 Clean Architecture를 실제 프로젝트 레벨에 사용해보기 앞서 간략하게 공부한 내용을 정리해보겠습니다. Clean Architecture 먼저 Clean Achitecture란 무엇인지 알아보도록 할게요. 위 사진과 같이 앱의 아키텍처를 구성한 것을 Clean Architecture라고 합니다. 우리는 여태 시스템 아키텍처에 대한 다양한 다이어그램을 봐왔습니다. 대부분의 아키텍처들의 경우 세세한 부분은 모두 다르지만 기본적으로 공통된 성질을 가지고 있습니다. 그것은 바로 관심사의 분리(SoC, Separation of Concen..
[iOS] iOS 15 SwiftUI Features Introduce 본 문서에서는 iOS15 SwiftUI의 주요 변경 Feature들을 간단한 예시 코드와 함께 소개합니다. What’s New in SwiftUI 3.0(iOS 15.0) Markdown 지원 및 새로운 AttributedString API Apple Developer Documentation Apple Developer Documentation developer.apple.com iOS 15 부터는 Apple의 Foundation 프레임워크 및 SwiftUI에서 Markdown 기능을 제공합니다. 따라서 아래와 같이 SwiftUI의 Text에서 Markdown 문법을 사용하여 문자열을 추가할 수 있습니다. Text("**Connect** on [Twitter](url)!") 또한 이를..