접근 제어(Access Control)는 다른 소스 파일과 모듈 등에서 코드 접근에 대해 제한하는 기능이다.접근 제어를 통해 코드의 세부 구현을 숨길수도 있으며, 어디에서까지 해당 코드에 접근할지 범위를 설정할 수 있다. 우리가 흔히 알고있는 Swift의 접근제어자는 5가지가 있다. `private` : 선언된 파일 내에서만 접근 가능`fileprivate` : 같은 파일 내 모든 스코프에서 접근 가능`internal` : 같은 모듈(타겟) 내에서만 접근 가능`public` : 다른 모듈에서도 접근 가능`open` : public과 같으면서, 서브클래싱 및 오버라이드까지 허용 그런데 Swift5.9에서 `package`라는 새로운 접근제어자가 등장했다. 이번 글에서는 이 package 접근제어자에 대해 ..
프라이버시는 애플에서 가장 강조하는 키워드 중 하나이기도 하며,사용자의 입장에서도 앱을 사용함에 있어 자신의 개인정보가 보호되길 기대할 것이다. 그래서 위치기반 서비스가 있다면 사용자에게 위치 권한을 요청해야 하며,카메라로 사진을 찍는 서비스가 있다고 하면 이때 역시 권한을 요청해야 할 것이다. 그런데, 앱을 개발하면서 의문이 든 부분이 있었다.바로 사진 첨부 기능을 추가할 때 별도의 권한 요청이 필요 없었기 때문이다. 분명 사용자는 자신의 갤러리를 열어서, 여러 사진중에 선택을 할텐데이때는 왜 갤러리 접근 권한을 요청하지 않는 것일까? 사진에 비공개 접근프라이버시와 권한 요청에 대해 잘 모를때는 사진 첨부 기능을 위해 권한 요청을 해야 한다고 생각했다.그리고 실제로 Info에서 다음과 같은 Privac..
지난 글에 이어서 Swift의 Test에 대해 더 알아보겠다. 테스트에서 가장 중요한 점은 몇 번의 테스트를 하든 동일한 결과가 나와야 한다는 점이다.그런데 네트워크 통신 메서드의 경우 서버의 상황에 의해서 테스트가 실패할 가능성이 생긴다.즉, 네트워크 통신 테스트의 유의점은 다음과 같다.네트워크 통신이 잘 되는 상황에 대해서만 일관적인 결과를 얻을 수 있다.통신에 문제가 있는 경우 결과가 달라질 수 있다. 즉, 외부 환경에 영향을 받는다.네트워크 통신과 무관한 상태로 테스트 코드를 작성하는게 중요하다.이러한 특징 때문에 네트워크 통신을 추상화하고, 실제 데이터가 아닌 Mock 데이터로 테스트를 하는게 중요하다. 이때 사용하는게 Test Double이라는 객체이다.Test Double이란 실제 객체 대신..
앱을 개발하다보면 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를 실제로 구현해보도록 하겠다.이미지 캐싱이란?먼저 캐시라는 개념에 대해 알아보도록 하자.캐시는 컴퓨터 과학 에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다.즉, 캐싱이란 데이터를 미리 캐시라는 별도에 장소에 복사해놓고, 이후에 접근할 때 더 빠른속도로 접근할 수 있게 하는 것을 말한다. 예를..