2017년 1월 20일 금요일

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 내에서 참조 할 때 표시되는 도움말 팝업 위주이다.

2016년 11월 29일 화요일

[macOS] 개발중인 앱에서 키보드를 눌렀을 때 에러음(Beep)이 들리는 경우

macOS 용 앱에서 '드앵~' 이라고 들리는 에러비프음(Beep, NSBeep)이 들리는 경우는 대체로 사용자가 잘못된 동작을 하는 경우이다. 물론 이 경우 이런 소리가 들리는 건 맞겠지만, 앱에서 의도한 기능의 단축키를 NSView 가 아닌 NSEvent 의 local monitor 형태로 구현했다거나 혹은 다른 사정으로 소리가 안울리길 원할 수도 있다. 의도한 기능의 키를 누르면 시도 때도 없이 울리는 에러음이 좋을 리는 없다.

그렇다면 어떻게 하면 이 에러음을 잡을 수 있을까? 개인적으론 세 가지 요소가 필요하다고 본다. 다른 더 좋은 방법이 있을지도 모르겠지만 관련 자료가 부실(?)해서 삽질로 알아낸 내용임을 감안하자.

2016년 11월 23일 수요일

2016년 11월 15일 화요일

[macOS] 광역(?) 마우스 및 키보드 이벤트 인식

제목이 약간의 오해가 있을 수도 있어서 좀 더 자세히 적어보자면, 앱 내부의 마우스나 키 입력을 받는게 아니라 앱 윈도우에 포커스가 없는 상태에서 마우스나 키보드 이벤트를 받기 위한 내용이다. 흔히 쓰이는 윈도우의 '키보드 후킹'이라는 표현이 많이 비슷하기도 하다.