FileHandle 사용법

NSData 클래스에는 해당 객체의 데이터를 URL에 기록하는 write(to:atomically:) 라는 메소드가 존재한다. 이 때 atomic하게 쓴다는 말은 온전한 데이터를 기록하거나 혹은 아예 기록하지 않거나 둘 중 하나의 결과만 존재하며, 그 중간인 부분적으로 소실되어 잘못된 데이터가 존재하지 않는다는 것을 말한다.

NSDataNSMutableData의 값 시멘틱 타입인 Data에는 해당 메소드가 존재하지 않는다. 대신 write(to:options:) 메소드가 존재하며, NSData.WritingOptions 타입에 .atomic 값이 정의되어 있어서 동일한 동작을 구현하는데에는 문제가 없다.

파일을 atomic하게 기록하는 방법은 임시 파일을 사용하는 것이다. 하나 혹은 그 이상의 임시 파일을 생성하여 데이터를 기록한 후에, 이상 없이 모든 데이터를 기록하게되면 해당 임시 파일을 최종 목적 파일로 교체하거나 복사하는 방식으로 파일 데이터가 중간에 깨지지 않게 하는 것이다.

FileHandle 사용법 더보기

Codable

많은 프로그래밍 작업은 데이터를 어딘가로 전달하는 것과 관련된다. 네트워크를 통해서 전송하거나, 디스크와 같은 영구 저장소로 전달하여 기록할 수도 있다. 프로그램이 실행시간에 사용하는 데이터는 그 필요와 목적에 맞게 구조화되고 각 단위가 연결되어 입체적인 그래프를 형성하기도 하지만, 전달과정에서 만큼은 일렬로 늘어선 비트의 연속체가 되어야 한다. 따라서 필연적으로 어떤 데이터가 유용성을 가지려면 직렬화 될 수 있어야 하고 그 반대로 역직렬화도 가능해야 한다.

이러한 직렬화 / 역직렬화와 관련하여 Foundation은 오래전부터 NSCoding 이라는 기술을 보유하고 있었다. 이는 간단하게 가장 기본이 되는 몇 가지 타입이 인코딩이 가능하다면, 각 객체의 속성을 키-값 쌍으로 묶어서 인코딩할 수 있다는 가정하에 일반적으로 사용될 수 있는 임의의 타입의 데이터까지 간단하게 확장할 수 있는 기술이다. (물론, 현재도 쓰인다. 단 보안상의 문제로 NSSecureCoding으로 대체되었다.)

Codable 더보기

NSPersistentStoreDescription

NSPersistentStoreDescription은 코어데이터의 영구저장소에 관한 여러 설정 정보들을 담고 있는 클래스이다. 이는 코어데이터 스택을 초기화하는 시점에 NSPersistentContainer나 NSPersistentStoreCoordinator에 의해서 사용된다. NSPersistentContainer를 사용하는 경우에는 디폴트 디스크립션이 자동으로 생성되기 때문에 만들 필요가 없긴한데, 저장소의 위치나 동작 방식을 커스터마징하기 위해 추가로 설정할 수 있다.

NSPersistentStoreDescription 더보기

Swift의 커스텀 타입을 직렬화하기

이 글은 https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types 의 내용을 일부 발췌, 의역한 것입니다.

프로그래밍 분야에서의 많은 작업은 데이터를 디스크에 저장하거나, 네트워크를 통해 전송하거나 API를 호출하기 위해 데이터를 제출하는 등의 일과 관련된다. 이 과정에서 데이터는 전송되는 동안에 적절한 형식으로 인코딩되고 다시 디코딩될 필요가 있다.

Swift의 커스텀 타입을 직렬화하기 더보기

Vision을 이용한 얼굴 인식 – 고급편

Vision을 이용해서 이미지 속에서 얼굴을 인식하는 방법을 살펴본 바 있는데, 당시 글에서 VNDetectFaceLandmarksRequest 를 사용했었다. 사실 얼굴이 들어있는 영역만 찾기 위해서는 VNDetectFaceRectsRequest 를 사용하는 것으로도 충분한데, face landmarks를 찾는다는 것은 얼굴의 주요 요소들 – 눈, 코, 입, 윤곽선 등-을 찾아낸다는 의미이다. 

이 글에서는 VNDetectFaceLandmarksRequest를 사용해서 실제로 얼굴의 각 요소를 추적하는 예제를 소개해 보겠다. 

Vision을 이용한 얼굴 인식 – 고급편 더보기