앱을 개발하다보면 UI에 문제는 없는지, 혹은 특정 기능이 잘 작동하는지 검증을 해야 한다.규모가 작은 앱이라면 기기에 빌드해서 전체 기능을 직접 테스트 해볼 수는 있..겠으나,기능이나 화면이 너무 많은 경우나, 여기에 작은 기능 하나만 추가되었을 때 A부터 Z까지 전부 다 직접 테스트하는것은 비효율적일 것이다. 그래서 Swfit는 XCTest(혹은 SwiftTesting)를 통해 UI/기능을 테스트할 수 있는 프레임워크를 제공한다. 이번 글에서는 Test에 대한 소개와 함께 Testable한 코드에 대해서 알아보도록 하겠다. Test 알아보기먼저 Test의 목적과 종류에 대해 알아보겠다.Test는 말 그대로 "앱을 사용함에 있어 문제가 없는지를 확인"하는 과정이다.이러한 개념은 당연히 iOS에만 있는 ..
SwiftUI로 View를 구성하다보면`var body: some View { ... }` 라는 연산 프로퍼티 내에 뷰를 그리는 코드를 작성하게 된다. 여기서 body라는 프로퍼티의 타입인 `some View`는 대체 어떤 구조이며, 왜 이런식으로 사용하는지 궁금해졌다. 이번 글에서는 컴파일 최적화 관점에서의 Opaque Type을 알아보도록 하겠다. Opaque Type이란?SwiftUI의 body는 다음과 같이 구성되어있다.var body: some View { Button("버튼") { let value = type(of: self.body) print(value) }}여기서 body의 타입을 확인해보면 `Button`임을 알 수 있는데,그럼 body의 타입을 다..
네트워크 통신을 통해 이미지를 받아와야 하는 경우지금까지는 Kingfisher라는 라이브러리를 사용해 해당 이미지를 처리했었다. 그러던 와중에 외부 라이브러리를 쓰지 않고, 이미지를 로드하고 캐싱하는 기능을 구현하고 싶었다. 이번 글에서는 이미지 캐싱에 대해 알아보고, MemoryCash와 DiskCashe를 실제로 구현해보도록 하겠다.이미지 캐싱이란?먼저 캐시라는 개념에 대해 알아보도록 하자.캐시는 컴퓨터 과학 에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다.즉, 캐싱이란 데이터를 미리 캐시라는 별도에 장소에 복사해놓고, 이후에 접근할 때 더 빠른속도로 접근할 수 있게 하는 것을 말한다. 예를..
Combine을 살펴보면 RxSwift에서 용어만 바뀐 느낌이 든다.예를 들어RxSwift에서의 Observable은 Combine에서 Publisher이고,Observer는 SubscriberDisposable은 AnyCancellable...이런 식으로 말이다. 물론 더 깊이 들어가면,RxSwift는 class기반이고, Combine은 protocol 기반,Combine에서는 에러 대응을 항상 해줘야 함.. 등차이점은 더 있을 수 있겠으나, 대부분 RxSwift와 1:1로 대응해서 생각하면 이해하기는 어렵지 않았다. 그런데, 그 중 궁금증이 생긴 부분이 있었다.RxSwift에서의 `.disposed(by: disposeBag)` 부분에 해당하는 코드가 Combine에서는 `.store(in: &can..
Swift의 의존성 주입과 관련해서 DI와 DIP라는 용어를 듣게 될 것이다.처음에는 DI나 DIP나 그냥 의존성 주입을 하는 애구나.. 정도로만 알고있었다.그런데, 좀 더 자세히 알아보니 이 둘은 (당연히) 서로 다른 개념이며, 의존성 주입을 해야하는 이유에 대해서도 생각해보게 되었다. 이번 글에서는 DI와 DIP에 대해 알아보도록 하겠다. DI (Dependency Injection)DI는 Dependency Injection의 약어로, 의존성 주입을 뜻한다.먼저 DI가 필요한 상황과, 그 방법에 대해 알아보자. A클래스가 B클래스에 의존하는 상황이라면, B클래스에서 변화가 일어날 때 A클래스에까지 영향을 미치는 상황이 있다./*Guest 클래스는 A_Restaurant 에, A_Restaurant는..
이전에 프로젝트를 진행하면서 '네트워크 응답값을 담는 struct 정도로 DTO라는 용어를 사용한 적이 있었다.그러나, 공부를 하다보니 이는 DTO에 대한 이해가 없이 사용했던, 잘못된 표현이었다. 이번 글에서는 DTO 그리고 Entity에 대해서 간단히 알아보도록 하겠다.DTO란?DTO는 Data Transfer Objcet의 약자로, 우리말로 '데이터 전송 객체'라는 뜻을 가지고 있다.그렇다면 데이터 전송 객체는 무엇인가?찾아보니 조금씩 다른 말로 설명하고 있지만,쉽게 말해 네트워크 통신에서 클라이언트와 서버간 데이터 전달을 위한 객체라고 생각하면 될것같다. 다음과 같은 식당 정보가 담긴 JSON 응답값이 온다고 가정해보자.{ "documents": [ // ... { "address_name..