UniformTypeIdentifiers
예제는 해당 모듈을 import 하는 걸로 시작한다.
utf-8이나 utf-16으로 인코딩 된 파일을 읽기 위해 사용한다고 하는데 조금 자세히 알아보자.
The Uniform Type Identifiers framework provides a collection of common types that map to MIME and file types. Use these types in your project to describe the file types in your app.
해석하면 MIME과 파일 타입에 대한 형식을 제공한다는 의미이다.
아직도 모르겠으니 조금 더 찾아보자.
UniformTypeIdentifiers로 검색해 보면 다른 자료를 찾을 수 있다.
UTI의 주된 설계적 목표 중 하나는 MIME 타입, 파일 확장자, 타입 또는 크리에이터 코드의 파일 콘텐츠 추론과 관련된 모호성과 문제를 제거하는 것이다
줄여서 UTI라고 부르고, 아니나 다를까 '애플'에서 사용하는 식별자라나 보다.
그렇다고 아예 의미가 없는 행보인 것은 아닌데, 연결되는 다른 문서에서 '왜 필요하다고 생각했는지'에 대한 답을 얻을 수 있다.
컴퓨터는 모든 것을 '0'과 '1'로 표현하기에 이를 저장하는 것도 당연히 '0'과 '1'로써 저장한다.
우리는 원하는 데이터를 더블 클릭해 확인할 수 있다.
사진이라면 포토샵이나 미리 보기 앱이 실행될 것이고, 음악이라면 음악 앱이, 한글 파일이라면 한글이 실행된다.
설정에서 확장자 명을 표시하도록 했으니 문제가 없어 보이지만 확장자 명을 가리게 되면 의문이 시작된다.
우리에게 확장자 이름을 표시해 주는 것부터 컴퓨터는 이 파일이 어떤 형식의 파일인지를 인지하고 있다는 의미가 된다.
바로 '0'과 '1'로부터 말이다.
저장된 '0'과 '1'의 나열로부터 어떤 파일인지를 판단하는 것이 가장 기본적인 생각이지만, 이는 상당히 고비용의 작업에 해당한다.
그래서 '확장자 명'이 필요하다.
이제 다른 문제가 생긴다.
'.jpeg'는 JPEG 파일이다.
하지만 '.jpg'와 '.jpe'는? 또한 JPEG 파일이다.
웹의 상황은 어떨까?
웹서버는 확장자 명 대신 'MIME'과 'media type'을 사용한다.
'.jpeg'는 JPEG 파일이다.
하지만 '.jpg'와 '.jpe'는? 또한 JPEG 파일이다.
또한 'image/jpeg'와 'image/jpg*'도 JPEG 파일이다.
JPEG 파일 하나를 표현하는데 필요한 방식이 너무 많다는 것이다.
이 모든 방식을 애플에서는 UTI를 통해 하나로 통일한다.
'.jpeg'는 JPEG 파일이다.
하지만 '.jpg'와 '.jpe'는? 또한 JPEG 파일이다.
또한 'image/jpeg'와 'image/jpg*'도 JPEG 파일이다.
애플에서는 'public.jpeg'가 JPEG이다.
물론 사진의 형식에는 여러 가지가 존재한다.
JPEG, PNG, TIFF, HEIC, RAW, DNG...
당연히 이 모든 형식들도 따로 두지 않는다.
'.jpeg'는 JPEG 파일이다.
하지만 '.jpg'와 '.jpe'는? 또한 JPEG 파일이다.
또한 'image/jpeg'와 'image/jpg*'도 JPEG 파일이다.
애플에서는 'public.jpeg'가 JPEG이다.
또한 'public.image'는 '사진'이다.
이러한 방식으로 애플은 데이터의 형식을 계층화한다.
저장공간에 기록된 모든 파일은 'public.data'로, 폴더와 심 링크를 포함한 모든 것들은 'public.item'으로 대체된다.
이러한 방식은 모든 파일에 대해 지정하지 않고 뭉뚱그려 '이건 사진입니다.'라고 간편하게 표현할 수 있게 된다는 장점을 가진다.
'png, jpeg, tiff, gif, dng... 는 사진이야.'라고 표현하는 것보다는 훨씬 간편하다.
예제에서 UTI를 사용하는 이유는 단순하다.
'public.text' 이하에 존재하는 'plaintext'를 사용하기 위해서다.
'프로젝트 > Universal textEditor' 카테고리의 다른 글
04. 동작 검증, 더 나아가기 (0) | 2022.10.24 |
---|---|
03. 프로젝트 설정 변경 (0) | 2022.10.24 |
02. 구현 (0) | 2022.10.21 |
00. 시작하며 (0) | 2022.10.21 |