2017년 1월 20일 금요일

Swift 속의 C Pointer 이야기 - 기타 도구들

이 글은 포인터에 관련이 있거나 간접적인 접근 방법에 대한 글이다.

Swift 속의 C Pointer 이야기 - UnsafeBufferPointer, UnsafeMutableBufferPointer

버퍼(Buffer)라는 용어는 대체로 연속적인 메모리 공간을 의미한다. 메모리를 할당해서 구한 포인터는 이 버퍼의 시작 주소를 담고 있다고 볼 수 있다. 버퍼는 메모리 덩어리 그 자체다.

하지만 스위프트(Swift)는 포인터를 쓸 수 있는 언어가 아니기 때문에 연속적인 메모리를 액세스 하는 것이 불가능하다. 그래서 위의 버퍼 개념이 맞지 않는다.

Swift 에서는 버퍼를 대체하기 위해 배열(Array)을 대신 사용한다. 랜덤 액세스도 되고 이터레이션도 되는 그 배열 말이다.

UnsafeBufferPointer 와 UnsafeMutableBufferPointer 는 이런 Swift 버퍼와 C 버퍼 사이의 상호호환을 위해 제공되는 특수한 컨테이너다.

Swift 속의 C Pointer 이야기 - UnsafeRawPointer, UnsafeMutableRawPointer

이번 이야기는 Raw Pointer 대충 번역하면 생포인터에 대한 이야기다. 쉽게 표현하자면 이 생포인터는 타입이 지정되지 않은(Untyped) 포인터이다. 포인터 시작편에서 언급했지만 이 생포인터는 타입이 명시되지 않았다는 점 때문에 Swift 에서 배척(?)받을 지도 모르는 존재일지도 모르겠다. (뇌내망상)

이 생짜포인터를 액세스 하기 위해 Swift 에서는 UnsafeRawPointer 와 UnsafeMutableRawPointer 등의 컨테이너를 제공한다.

Swift 속의 C Pointer 이야기 - UnsafePointer, UnsafeMutablePointer

UnsafeMutablePointer 는 지정된 타입의 포인터를 다루는 가장 일반적인 컨테이너이다. Mutable 이라는 이름에서 유추가 가능하겠지만, 이 포인터 컨테이너는 포인터가 가리키는 메모리를 조작(?)할 수 있는 녀석이다.

Swift 속의 C Pointer 이야기 - 시작

Swift 에서 C 포인터(Pointer)는 왜 쓰는가. 모호할 때도 있고 쓰기도 귀찮고 문제도 자주 일으키는 그 개념을 말이다.

그런데 답은 C 포인터 라는 이름에서 이미 나와있다. 당연히 C로 구현된 함수가 포인터를 사용하게 되니 이 함수를 쓰려면 포인터를 다뤄야 한다는 것이다.

C 가 점점 대중(?)들에게 잊혀져 가는 현재로썬 포인터는 거의 쓸 일이 없어졌다고 볼 수도 있다. 하지만 동일개념을 사용하는 C++도 아직 현역이고 암호화 등 바이너리 연산 계통에선 여전히 C가 현역이다. 거기에 포인터도 거의 따라나니다 보니 아직은 땔 수 없는 애증(?)의 관계인 것 같다.

이번 글은 예전에 썼던 포인터 글이 오래된 것 같아 새롭게 Swift 3 기준으로 C 포인터에 대해서 작성해 본다.

2017년 1월 10일 화요일

UserDefaults (NSUserDefaults) 에 대한 소소한 이야기

UserDefaults (Objective-C 에서는 NSUserDefaults) 는 대체로 앱의 설정 값을 저장하고 나중에 읽기 위한 용도로 종종 사용된다. 별도의 파일이나 데이터베이스 엑세스 없이 쓸 수 있다. 굉장히 쉽고 다방면에 활용되어서 글로 정리하는게 피곤한(?) 일이 될 정도인데, 개인적으로 궁금해서 찾아본 몇 가지 정보를 더해서 글로 정리해 본다.

2017년 1월 6일 금요일

Objective-C 코드의 Swift 별명 이야기 (Swift 3 기준)

편의성 측면도 있겠지만 애플에서 Swift 를 강력하게 밀고 있기에 아무래도 macOS나 iOS용 개발 언어는 Swift 가 주류가 될 가능성이 높다. 하지만 그렇더라도 한동안은 Objective-C 와의 동거를 끝낼 수는 없을 것이다. 그 증거로 애플에서는 Xcode 나 Swift 가 업데이트 될 때 마다 Objective-C 코드와의 공존에 대한 기능을 계속 발전시키고 있다.

이번 글은 Objective-C 코드가 Swift 에서 어떻게 읽혀지는지 혹은 Swift 용 별명을 지어서 언어간 차이를 완화시키는 방법이 있는지를 간단히(?) 적어볼까 한다.

2017년 1월 5일 목요일

Swift Documentation - 스위프트 코드 기반 문서화 예제들

앞서 살펴본 내용에서 소스 코드 문서화의 기초적인(것 같지만 거의 대부분인 -_-) 내용을 살펴 봤다. 이번 글에서는 좀 더 다양한 예제를 통해 어떻게 하면 문서화가 되는지를 간략히 살펴보자.

2017년 1월 4일 수요일

Swift Documentation - 스위프트 코드 기반 문서화

제목을 뭘로 표현하면 좋을까 고민했는데 최대한 직설적으로 적었다. 이번 주제는 코드 자동 문서화인데 별도의 레퍼런스 매뉴얼로 만들어 내는 것 보다는 Xcode 내에서 참조 할 때 표시되는 도움말 팝업 위주이다.