2025/11 7

[Swift] Code Smell에 관하여....0

프롤로그코드를 작성할 때면 코드 한 줄 한 줄은 치열한 고민이 있어야 한다. 시간 내에 빨리 제출해야 하는 테스트 패스용 코드가 아닌 이상은 각 코드의 한 줄 한 줄은 고민이 있어야 한다. 그리고 경력자의 코드 한 줄 한 줄이 대충 짜인 것처럼 보일지라도 경력동안 해 온 고민들이 합쳐져 만들어진 결과물이어야 한다. 강연을 하면서 'Loop 혹은 Branch를 위한 코드가 비단 for와 if 뿐만이 아닌 것은 while과 switch의 용도가 분명하기 때문이다'라는 말을 자주 한다. 내가 작성하는 코드는 1차적으로 창조한 사람의 의도를 읽어야 한다. 가령 Python을 예로 들면, 귀도 반 로섬이 Python을 만들 때에 담고자 했던 철학을 이해해야 한다. Java라면 제임스 고슬링이 이 프로젝트를 시작했..

[FP] 함수형/선언형에 대한 고찰

프롤로그요즘 AI Transformation으로 IT 사업이 새로운 국면으로 넘어가는 것 같다. 그래서 최근에 이와 관련된 글도 작성했었다. 그런데 이번에는 함수형과 선언형에 대해서 얘기해보고 싶다. 이는 오래된 주제이기도 하고, 필자가 2016년부터 깊게 파고 있는 주제이다. 필자가 짠 코드가 의도된 대로만 동작하도록 제어하고 싶은 맘에서 학부 시절부터 디자인 패턴과 소프트웨어 공학에 심취했던 나였다. 그런 필자에게 새롭게 다가왔던 개념은 함수형이었다. 함수형은 내가 작성한 코드가 내가 의도한 대로 코드가 동작하도록 하는 강력한 무기가 되었다. 발생할 수 있는 예외 케이스 또한 내가 정의한 에러 코드를 통해서 예측 가능한 범주 내로 가이드해주었다. 진정한 함수형/선언형 코드를 작성했다면, 심지어 코드 ..

[Architecture] 미디어 플레이어의 구조에 대한 고찰

Background처리해야 할 데이터가 많은 경우에는 멀티 코어 프로세서의 환경을 적극 활용하여, 최대한 가용한 리소스를 극한까지 사용해야 할 필요가 있다. 미디어 처리를 최대한 빠르게 처리하여 사용자에게 seemless 한 사용자 경험을 제공하는 것이다. 이를 위해서 여러 가지의 방법이 동원되게 된다. 그리고 소프트웨어 구조에 대해서 얘기하자면, 소프트웨어 구조는 확장성이 가능하도록 구현되어야 한다. 기본적으로 응집도를 높이고 결합도를 낮추라는 말을 많이 들었을 것이다. 예전부터 나는 이에 대해 어마무시하게 집중을 했다. 그리고 실제로 많이 중요하다. 실제로 회사에서 소속되어 개발을 하다 보면, 이를 무시하고 거대한 코드 뭉치를 만들어서 손도 못 대도록 구현할 때가 있다. 그리고 본인이 만든 코드 뭉치..

Engineering/OS 2025.11.17

[iOS] 센서 이야기 - 자이로스코프

Background스마트폰에는 여러 가지의 센서들이 들어가 있다. 자기력계, 가속도계, 자이로스코프, 기압계, 고도계, 위치센서(GPS, Glonass, Galileo, Beidou), 조도센서, 근접센서 등이 대표적이다. 모든 센서들은 자기들의 영역이 있다. 자기력계는 자기장 측정, 가속도계는 가속력 측정, 자이로스코프는 기울기, 기압/고도/조도/근접 등등 모두 현실 세계의 물리량을 수치로 환산하여 OS에 제공하는 역할을 한다. 이번에는 그중에서도 자이로스코프와 가속도계의 협업에 대해서 얘기해보려고 한다. Gyroscope누구냐, 넌?아래는 일반적으로 우리가 보는 자이로스코프의 이미지이다. 원래의 자이로스코프는 중심에 횡방향으로 고속 회전하는 회전판이 있다. 정확한 원리의 이름이 이제는 기억나지 않으나..

[iOS] AVFoundation Foundation

PrologAsset과 Track의 이해asset은 하나 혹은 다수의 track으로 이루어져있다. track은 비디오 프레임, 오디오, 자막 등으로 재생에 이용되는 개별 컨텐츠를 의미한다. 이러한 컨텐츠들이 asset이라는 컨테이너에 담긴다. 플레이어는 asset이라는 컨테이너를 읽어와서, 각 track을 적절한 시간에 표시하여 재생한다. AVAsset과 AVPlayerItem의 이해AVAsset은 미디어를 담은 컨테이너인 asset의 데이터를 읽어오고 편집 등을 하기 위한 용도로 사용한다. 편집된거나 합성한 데이터를 읽거나 쓰기 위해서 사용되는 미디어 파일 그 자체라고 생각하면 된다. AVPlayerItem은 AVAsset을 재생하기 위해 사용하는 데이터 모델로서, 플레이어에서 재생에 관한 모든 제어..