no image
[iOS공통] 랜더루프로 알아보는 터치부터 랜더링까지의 여정
안녕하세요! 오랜만에 글로 돌아왔습니다. iOS개발(취준)기간이 길어질 수록 점점 딥한내용이 궁금해지고, 사용하는 경우가 늘어나는 것 같아요.오늘은 최근 관심있게 보았던 WWDC내용인 랜더 루프에 대해서 다뤄보겠습니다. 개요iOS앱을 개발할 때 UIView의 draw(rect:)함수를 보신적이 있으실 겁니다.저 개인적인 경험으로는 해당 함수를 사용하면 View의 영역을 직접 그릴 수 있다 정도로 이해하고 그쳤던 것 같습니다.뷰를 그린다는 것은 어떤 것을 말하는 걸까요? 아마 아래 사진을 보신적이 있을 것입니다.UIKit을 처음 공부할 때는 "아 그렇구나, 이런식으로 생명주기가 돌구나"정도로 해석했지만, 자세히 살펴보면 해당 단계에는 명확한 이유가 있습니다.시각적인 요소를 만드는 것을 도화지에 그림을 그리..
2025.06.13
[iOS 공통] Objective-C와 Swift의 매서드 호출의 차이(with method swizzling)
안녕하세요! UIKit을 사용하다 보면 UIButton을 사용하신 경우가 있으실 것입니다.보통 아래와 같은 코드를 작성하게 되는대요, @objc, #selector 등등 Swift만 학습했다면 다소 생소한 개념들입니다.override func viewDidLoad() { super.viewDidLoad() let button = UIButton() button.addTarget(self, action: #selector(onTap(_:)), for: .touchUpInside)}@objc func onTap(_ sender: UIButton) { ...} 그저, "UIKit이 Objective-C로 만들어졌기 때문에 Swift로 병합하는 과정에서 발생한 어쩔 수 없는 부분이구나" 정..
2025.05.22
no image
[자료구조] 균형 이진 탐색 트리(AVLTree)구현 with Swift(코드 포함)
1️⃣ 동기Swift에는 기본적으로 트리자료형을 지원하지 않습니다.Swift의 딕셔너리의 경우 내부적으로 키값들이 리스트로 반환됩니다.만약 "키값의 크기가 큰 순서대로 20개획득"같은 작업을 해여하는 경우 전체 키값을 추출한 이후 정렬이 필요합니다.즉, 추출하려는 요소의 수와 관계없이 O(N)의 복잡도를 가지게됩니다. 균형트리를 사용하는 경우에 M개의 요소를 오름차순으로 가져오는 연산의 경우를 살펴보겠습니다.우선 가장 깊은 노드를 획득하는데 필요한 복잡도가 트리의 높이 만큼인 O(log N)이 필요합니다.※ 균형 트리임으로 트리의 높이가 log N이 됩니다.그후 부터는 원하는 요소수 만큼의 접근이 이뤄짐으로 O(M)의 복잡도를 가집니다.결과적으로, O(M + logN)의 복잡도를 가지게됩니다. 2️⃣ 활..
2025.04.11
no image
[iOS] Sequence & Collection프로토콜을 자세히 알아보자
안녕하세요  'Swift컬렉션' 이라는 키워드에서 우리는 보통 Array, Dictionary, Set같은 자료형을 떠올립니다.  해당 자료구조들은 내부적으로 Collection프로토콜을 활용하여 만들어진 자료구조입니다.  그리고 Collection프로토콜은 Sequence프로토콜을 내부적으로 채택하고 있습니다.  이번 포스팅은 두 프로토콜에 대해 깊게 알아보며 알게된 점을 정리해보려고 합니다.  가장 상위 개념인 시퀸스 프로토콜부터 시작해 보겠습니다. Sequnece프로토콜해당 프로토콜의 공식 정의는 다음과 같습니다.순차적으로 하나씩 요소들에 접근하는 것을 가능하게 하는 타입 😅(말이 어렵내요) Sequence프로토콜의 경우 요소들의 순차적인 접근을 보장합니다. 시퀸스 프로토콜을 따르는 타입은 for..
2025.04.04
no image
[iOS] 클라이언트에서 API키를 숨기는 방법들(with 코드 난독화)
안녕하세요  개발을 하다보면 외부 API를 사용해야하는 경우가 많이 발생합니다.  보통의 경우 API키를 통해 인증을 진행하고 해당서비스를 이용하게됩니다.  인증키를 노출하게되면 원치않는 과금이 발생할 수 도 있기에 클라이언트 환경에 API키를 포함할 경우 각별한 주의가 필요합니다.  오늘은 클라이언트 환경에서 API키를 보유해야 하는 경우 어떠한 방법들이 있는지 다뤄보겠습니다.  방법1: xcconfig, info.plist에 포함하는 경우 대부분의 경우 이 방법을 많이 사용하실 것 같습니다.  swift코드에 포함하게 될 경우 깃허브에 해당파일을 올려 즉시 노출이 발생하게되기 때문에  xcconfig와 같은 파일에 키를 저장하고 해당 파일을 ignore하는 방식을 많이 사용합니다.  하지만, 아시다시..
2025.03.25
no image
[iOS] '오르비 알람' 프로젝트 진행과정 회고(기획, 협업, 개발)
안녕하세요  최근에 활동했던(지금은 운영진) IT동아리 활동을 마치게 되어 회고를 작성해 보려고 합니다.  전체적으로 프로젝트가 진행됬던 흐름되로 작성하며 회고를 해보겠습니다.  기획해당 프로젝트는 IT동아리에서 진행하는 프로젝트라, 뚜렷한 기획을 가지고 시작하는 프로젝트는 아니였습니다.  물론 팀원중 PM직군이 있었지만, 기획 아이디어는 모든 팀원이 함께 선정해야했습니다.  프로젝트 기간이 촉박했기에 빠른 아이템 선정이 필요했습니다.  그렇다고 기획적으로 부실한 프로젝트를 시작할 경우 랜턴없이 동굴속으로 들어가는 것이겠죠.   소프트웨어 마이스트로 연수생시절에 기획때문에 어려움을 겪었던 경험이 있었습니다.  그 당시에 아이디어를 도출하고 검증하기 위해 사용했던 방법론들을 활용할 수 있겠다고 생각했습니다..
2025.03.25
[Swift] why에 집중한 Swift concurrency, Sendable, Actor ...
안녕하세요! 오늘은 Swift concurrency와 Actor에 대해 설명하는 글을 남겨봅니다. 두 기능은 이제 나온지가 오래됬다고 말할 수 있는데요, 사용할 일이 없다고 생각하게 되는 점점 멀어지는 느낌입니다. 하지만, 해당 기능이 생겨나게된 이유를 살펴보는 과정에서 훌륭한 기능이라고 생각하게됬습니다. 잘 정리하여 여러 곳에 활용할 수 있겠다고 생각하였습니다. Swift concurrency는 왜 등장했을까? 이 부분에 대해서는 많이 들으셨을 꺼라고 생각합니다. 🤔 기존의 비동기 코드 실행방식인 GCD의 문제를 해결하려는 시도가 보입니다. 간략하게 살펴보겠습니다. ☑️ CPU오버헤드 GCD와 가장 큰 차이점은 역시 쓰레드를 어떻게 활용하는가입니다. 쓰레드가 많아지면 다음과 같은 문제가 발생합니다..
2025.02.25
no image
[iOS] fastlane을 사용하며 겪은 일들(with Tuist)
안녕하세요 주니오스입니다. 얼마전 소프트웨어 마에스트로 연수과정이 종료되어 잠시 휴식을 취한 후만들고 싶은 개인앱이 생겨열심히 만들고 있습니다.한 2주정도 바짝 개발을 했는데요, MVP버전이 완성되어 현재 심사중입니다.테스트 플라이트 배포 및 앱스토어 배포과정에서 처음으로 fastlane이라는 툴을 사용해보았습니다.해당 서비스를 사용하며 맞닥드린 문제 및 여정을 적어보려고 합니다. fastlane - App automation done rightThe easiest way to build and release mobile apps. fastlane handles tedious tasks so you don’t have to. Developer hours saved 10,558,200fastlane...
2025.01.02
no image
[iOS] 나만의 이미지 캐싱 SDK만들기(다운샘플링, 디스크 & 메모리 캐싱)
저번글에서 이미지 캐싱에 대해 다뤘던 적이 있습니다. 추가적으로 학습을 하다보니 제가한 설계한 객체가 다소 객체지향에 어긋나고, 이미지 최적화에 있어 다소 미흡함을 알게되었습니다.  그래서 추가적인 학습을 통해 객체지향적 설계를 확립하고 다운샘플링 기술을 적용한 나만의 SDK를 만들어보자고 결정했습니다.   우선 앞선 iOS환경에서 바이너리 정보가 어떻게 이미지로 표출되는 지 이해할 필요가 있었습니다.  iOS의 이미지 프로세싱 우선 인터넷 서비스를 통해 혹은 로컬 저장소에서 불러온 이미지 정보는 모두 단순히 이진 데이터입니다. 해당 데이터들이 디코딩을 통해서 iOS내에서 시각화할 수 있는 이미지 버퍼(UIImage)로 변환되게됩니다. 최종적으로 시각화 형태의 데이터만이 지속적으로 메모리에 남게됩니다. ..
2024.11.22