iOS 개발자를 위한 면접 질문 목록 (레벨 0)

1. 컴퓨터 시스템에서 CPU, RAM, 저장 장치의 역할과 이들이 어떻게 상호작용하는지 설명해주세요. 💡 힌트: 앱 실행 과정을 단계별로 생각해보세요. 저장 장치에서 앱 바이너리 로드 RAM에 코드와 초기 데이터 적재 CPU가 명령어 실행 필요시 추가 리소스 로드 답변: CPU는 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 장치입니다. RAM에는 현재 실행되는 프로그램의 명령어와 데이터를 저장합니다. 전원을 끄면 저장된 내용이 사라지는 휘발성 저장 장치입니다. 보조 기억 장치에는 전원이 꺼져도 보관할 프로그램을 저장합니다. RAM보다 느리지만 많의 양의 데이터를 저장할 수 있습니다. ...

September 22, 2025 · 15 min · 3006 words · Me

ESTsoft KDT 부트캠프 (iOS 2기) 수강 후기 및 회고

안녕하세요. 김소월입니다. 2025년 6월부터 9월까지 약 4개월 동안 ESTsoft KDT 부트캠프 iOS 2기를 수료하며, 그 소회를 간단하게 정리하고자 합니다. 처음 KDT 과정 소식을 접하고 많은 고민이 있었습니다. 초심자를 대상으로 하는 과정이라는 점에서 우려가 있었고, 무엇보다 국비 출신 개발자라는 꼬리표가 달라붙을까 두려웠던 것도 사실입니다. 하지만 결론적으로 말씀드리자면, 매우 만족스럽고 유익한 시간이었습니다. 그동안 영어 원서와 Udemy 강의로만 UIKit과 SwiftUI를 독학했는데, 이번 과정을 통해 내가 올바른 길을 걷고 있는지, 놓친 부분은 없는지 확실하게 점검할 수 있었습니다. 또한 빠른 속도로 핵심 개념을 익히고, Photos, AVFoundation, ActivityKit처럼 독학하기 어려운 영역도 체계적으로 학습할 수 있었습니다. ...

September 15, 2025 · 8 min · 1537 words · Me

Data Race vs. Race Condition (Swift)

동시성 프로그래밍(Concurrent Programming)은 작업이 언제 끝날지 알 수 없는 비동기 작업(예: 네트워크 통신, 파일 I/O 등)을 효율적으로 처리하는 기술입니다. 이 기법은 여러 작업을 번갈아 실행하여 마치 동시에 수행되는 것처럼 보이도록 하는 방식으로 동작합니다. 이를 통해 시간이 오래 걸리는 작업이 진행되는 동안에도 다른 작업을 실행할 수 있어 애플리케이션의 응답성을 향상시킬 수 있습니다. 예를 들어, 네트워크에서 데이터를 가져오는 동안 UI가 멈추지 않고 사용자가 원활하게 앱을 조작할 수 있도록 하려면 동시성 프로그래밍이 필수적입니다. ...

March 13, 2025 · 5 min · 963 words · Me

CALayer의 anchorPoint 톺아보기

개요 CALayer는 이미지 기반의 콘텐츠를 관리하고, 해당 콘텐츠에 애니메이션을 적용할 수 있도록 하는 객체입니다. 레이어는 뷰의 백킹-스토어(backing-store) 역할을 할 뿐만 아니라, 뷰 없이도 콘텐츠를 직접 표시할 수 있습니다. 레이어의 주요 역할은 제공된 시각적 콘텐츠를 관리하는 것이지만, 배경 색상, 테두리와 그림자를 설정할 수 있는 자체적인 시각적 속성도 가지고 있습니다. 이뿐만 아니라 CALayer는 다양한 속성을 활용하여 이동(Translate), 크기(Scale)나 회전(Roate) 등 레어어에 변형을 가할 수 있습니다. 그리고 이러한 변형은 모두 기본적으로 레이어의 정중앙을 기준으로 일어나게 됩니다. 일반적으로 이 기준은 크게 문제가 되지 않지만, 항상 예외가 존재하기 마련입니다. 이 기준점을 변경하는 데 도움을 주는 anchorPoint와 position 속성 및 그 관계에 대해 자세히 살펴보겠습니다. ...

February 28, 2025 · 4 min · 675 words · Me

[번역] The Nested Closure Trap (Besher AI Maleh)

DispatchWorkItem 내부에 중첩된 애니메이션 클로저를 실행하는 코드가 있다고 가정해보겠습니다. 여기 세 가지 버전의 코드가 있습니다. 어느 코드가 순환 참조(retained cycle)를 유발하는지 말해주실 수 있나요? class ViewControllerA: UIViewController { var workItem: DispatchWorkItem? override func viewDidLoad() { let workItem = DispatchWorkItem { UIView.animate(withDuration: 1.0) { self.view.backgroundColor = .red } } self.workItem = workItem } } class ViewControllerB: UIViewController { var workItem: DispatchWorkItem? override func viewDidLoad() { let view = self.view let workItem = DispatchWorkItem { UIView.animte(withDuration: 1.0) { [weak self] in view?.backgroundColor = .red } } self.workItem = workItem } } class ViewControllerC: UIViewController { var workItem: DispatchWorkItem? override func viewDidLoad() { let workItem = DispatchWorkItem { UIView.animate(withDuration: 1.0) { [weak self] in self?.view.backgroundColor = .red } } self.workItem = workItem } } 정답은 세 가지 버전 모두입니다! 심지어 클로저 바깥에서 _view_에 대한 참조를 생성하는 버전 B도 순환 참조를 유발합니다. ...

November 5, 2024 · 3 min · 511 words · Me

[번역] You don't (always) need [weak self] (Besher AI Meleh)

사이클.. 아니, 위 그림에 보이는 그런 사이클이 아닙니다. 강한 순환 참조(strong reference cycles)를 의미하며, iOS 앱에서 뷰 컨트롤러가 메모리 누수를 유발하는 원인이 됩니다. 더 구체적으로, 참조 사이클을 피하기 위해 Swift 클로저 내부에서 [weak self]의 사용법과 self를 약하게 캡처(capture)하는 게 필요하거나 필요없는 경우에 대해 살펴보고자 합니다. 이 글에서 다루는 주제는 애플 공식 문서, 다양한 블로그 포스트와 튜토리얼을 읽고, 시행착오와 실험을 통해 배웠습니다. 어딘가 실수가 있다고 생각이 되면, 자유롭게 댓글이나 트위터로 알려주세요. 또한, 메모리 누수가 일어나는 다양한 시나리오와 어디서 [weak self]를 불필요하게 사용하는지 보여주는 작은 앱도 첨부합니다. ...

October 30, 2024 · 12 min · 2511 words · Me

[번역] Clean Architecture and MVVM on iOS (Oleh kudinov)

소프트웨어를 개발할 때는 디자인 패턴뿐만 아니라 아키텍처 패턴을 잘 사용하는 것도 중요합니다. 소프트웨어 엔지니어링에서 무수히 많은 다양한 아키텍처 패턴이 있습니다. 모바일 소프트웨어 엔지니어링에서 가장 널리 쓰이는 아키텍처 패턴으로 MVVM, 클린 아키텍처와 리덕스(redux) 패턴이 있습니다. 이 글에서는 MVVM​과 클린 아키텍처​를 iOS 앱에 적용하는 방법을 예제 프로젝트로 보여드릴 겁니다. 리덕스를 배우는 데에도 관심이 있다면 Advanced iOS App Architecture 도서를 참조하세요. 클린 아키텍처에 대한 자세한 정보는 Clean Architecture를 참조하세요. 클린 아키텍처 그래프에서 보다시피, 애플리케이션에는 서로 다른 레이어가 있습니다. 안쪽 레이어는 바깥쪽 레이어에 의존성을 가져서는 아니됩니다. 바깥쪽에서 안쪽으로 향하는 화살표는 의존성 규칙을 나타냅니다. 의존성은 바깥쪽 레이어에서 안쪽으로만 존재할 수 있습니다. ...

October 15, 2024 · 14 min · 2961 words · Me

Swift 불투명한 타입(some) 알아보기

개요 Swift 5.1에 새롭게 등장한 불투명한 타입(opaque type)은 프로토콜을 준수하는 실제 타입(underlying type)에 대한 자세한 정보를 숨깁니다. 불투명한 반환 타입을 가지는 함수는 자신이 반환하는 타입에 대한 구체적인 정보를 외부에 드러내지 않습니다. Swift는 프로토콜을 준수하는 실제 타입을 불투명한 타입과 박스형 프로토콜 타입으로 외부에 드러내지 않고 감출 수 있습니다. 겉으로 보이는 기능은 동일해 보이지만, Swift 컴파일러가 해당 타입을 처리하는 내부 방식에는 큰 차이가 있으며, 이는 성능에도 큰 영향을 끼칩니다. 따라서 이러한 차이를 정확히 이해하고 적재적소에 적용할 필요가 있습니다. ...

September 3, 2024 · 7 min · 1468 words · Me

[번역] iOS: 왜 UI는 메인 스레드에서만 업데이트를 해야 할까? (Dywanedu)

개발을 하는 동안에, 우리는 종종 UIKit 컴포넌트를 백그라운드 스레드(Background Thread)에서 호출해 본 적이 있습니다. 백그라운드 네트워크 콜백에서 imageView.image = anImage 구문을 실행하거나, UIApplication.sharedApplication을 백그라운드 스레드에서 호출하는 일을 꼽을 수 있습니다. 이러한 일이 발생하면, 런-타임 에러가 발생하고, 우리는 해당 에러를 고치게 됩니다. 한번 생각해봅시다. 왜 UI는 메인 스레드에서만 업데이트를 해야 할까요? UI를 백그라운드 스레드에서 업데이트하게 된다면 어떤 일이 벌어질까요? 메인 스레드를 블록킹(Blocking)하는 걸 막기 위해 UI를 백그라운드 스레드에서 업데이트하는 게 더 좋지 않을까요? 본 글은 이 질문을 기초로 하고 있습니다. ...

May 25, 2024 · 4 min · 827 words · Me