[iOS공통] Task Context와 Structured Concurrency
안녕하세요!오늘은 Task Context와 Structured Concurrency(구조화 동시성)에 대한 포스팅입니다. 배경Swift Concurrency는 동시성환경에서 작업을 Task인스턴스를 사용하여 표현합니다.Task인스턴스는 독립적인 작업처럼 보이지만, 사실 Task간에는 관계가 존재합니다.하위 테스크는 상위 테스크로부터 Context를 상속한다는 말과, 테스크간에는 부모-자식 관계가 성립된다 라는 말을 들어보신적이 있을실 것입니다. 이번 포스팅은 해당 개념을 명확하게 정리하기하여, Concurrency를 정확하게 사용하기 위해 작성했습니다. Task Context란 무엇일까?Task는 자신을 생성한 Task의 Context를 상속합니다.컨텍스트 상속이 발생하는 코드는 아래와 같습니다.Task..
2025.07.15
no image
[iOS공통] Combine의 퍼블리셔, 구독자 관계를 깊게 들여다보자
안녕하세요! 최근 운이 좋게도 기술면접을 할 기회가 생겼었는데요, 받은 질문중 인상적이였던 질문이 있어 정리해보려고 합니다.우선 면접관분의 질문은 아래와 같습니다. Combine을 사용하셨는데, CancellableBag은 왜사용하는 걸까요? 답변: 음,, 컴바인의 경우 옵저버 패턴을 사용하여 퍼블리셔와 구독자가 서로의 구체적인 타입이 무엇인지 관계없이 느슨한 결합을 유지합니다. 이런 느슨한 결합을 유지하기위해 중간에 Subscription이라는 매개자가 존재하고 둘을 참조하고 있는 것으로 알고있습니다.. 대충알고 있었던 개념에 대해 허쩜을 찔린 것 같은 기분이였습니다. 따라서 이번 글에서는 Subscription이란 무엇이고 Combine은 왜 해당 객체를 사용하는지에 대해 애플의 공식 문서를 기반으..
2025.06.26
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