iOS Development Guide

iOS 개발 상식 100선

범위를 넓게 잡은 iOS 개발 상식 체크리스트다. 경력 구간 표현 없이, “이 개념을 설명할 수 있는가”, “실무에서 왜 중요한지 말할 수 있는가”를 기준으로 사용한다.

이 문서는 `개발상식` 기준 문서다. 항목은 짧게 적었고, 필요한 주제는 개별 상세 문서로 계속 분리해 나간다.
목록 업데이트 날짜

2026-04-09

1. Swift 언어 기본기 1-10

  1. value type과 reference type 차이
  2. struct와 class를 언제 각각 선택하는지
  3. let과 var의 의미 차이
  4. mutating 메서드가 왜 필요한지
  5. optional과 nil 처리 방식
  6. guard와 if let의 사용 기준
  7. escaping closure와 non-escaping closure 차이
  8. capture list와 weak self가 필요한 이유
  9. generic이 왜 필요한지
  10. protocol과 protocol-oriented programming의 장점

2. 메모리와 ARC 11-20

  1. ARC가 객체 생명주기를 어떻게 관리하는지
  2. strong, weak, unowned 차이
  3. retain cycle이 생기는 대표 사례
  4. 클로저와 self에서 순환 참조가 생기는 이유
  5. deinit이 언제 호출되는지
  6. 값 타입과 참조 타입이 메모리에서 다뤄지는 방식
  7. copy-on-write 개념
  8. 대형 이미지가 메모리를 많이 쓰는 이유
  9. 메모리 누수와 메모리 증가의 차이
  10. Instruments로 메모리 문제를 보는 기본 관점

3. 앱 생명주기와 구조 21-30

  1. AppDelegate와 SceneDelegate 역할 차이
  2. 앱 foreground / background 상태 변화
  3. UIViewController 생명주기 순서
  4. loadView, viewDidLoad, viewWillAppear 차이
  5. container view controller 기본 개념
  6. 탭, 네비게이션, 모달 전환 차이
  7. root view controller를 바꾸는 시점과 주의점
  8. MVC, MVVM, Clean Architecture를 어떻게 구분하는지
  9. DI가 왜 필요한지
  10. identity가 중요한 객체와 값 모델의 차이

4. UIKit 기본기 31-40

  1. frame 기반 레이아웃과 Auto Layout 차이
  2. intrinsicContentSize가 무엇인지
  3. content hugging / compression resistance 의미
  4. UIStackView의 arrangedSubviews 개념
  5. UITableView와 UICollectionView 차이
  6. cell reuse가 왜 필요한지
  7. prepareForReuse에서 주로 정리해야 할 것
  8. main thread에서만 UI를 다뤄야 하는 이유
  9. run loop가 UI와 어떤 관련이 있는지
  10. scroll 성능이 나빠지는 대표 원인

5. 네트워크와 데이터 41-50

  1. HTTP의 기본 메서드와 의미
  2. status code를 어떻게 해석하는지
  3. URLSession의 기본 동작
  4. async/await 기반 URLSession 사용법
  5. completion-handler 방식과 async/await 차이
  6. JSONDecoder / JSONEncoder 기본 사용법
  7. Codable의 장단점
  8. 에러 핸들링을 네트워크 레이어에서 어떻게 나눌지
  9. retry가 필요한 경우와 위험한 경우
  10. API 응답 캐시와 앱 내부 캐시 차이
관련 문서: GCD vs Swift Concurrency

6. 이미지와 렌더링 51-60

  1. 이미지 다운로드와 디코딩은 다른 단계라는 점
  2. UIImage(data:) 이후에도 첫 렌더링 비용이 남는 이유
  3. 다운샘플링이 필요한 이유
  4. 대형 이미지가 스크롤을 버벅이게 하는 이유
  5. 메모리 캐시와 디스크 캐시 차이
  6. 이미지 로딩 시 잘못된 셀에 이미지가 들어가는 이유
  7. cancelation이 이미지 요청에 왜 중요한지
  8. cornerRadius + masksToBounds가 성능에 미치는 영향
  9. offscreen rendering이 무엇인지
  10. Core Animation과 실제 화면 표시의 관계

8. 동시성 심화 71-80

  1. async let과 TaskGroup 차이
  2. structured concurrency가 왜 중요한지
  3. detached task를 조심해야 하는 이유
  4. actor가 shared mutable state를 어떻게 보호하는지
  5. actor-isolated와 cross-actor reference 차이
  6. 왜 다른 actor 접근에 await가 필요한지
  7. Sendable이 무엇인지
  8. @Sendable 클로저가 왜 캡처를 제한하는지
  9. non-Sendable class 캡처가 왜 막히는지
  10. shared mutable state와 동시성 안전성

9. 저장소와 데이터 영속화 81-90

  1. UserDefaults를 써도 되는 경우와 안 되는 경우
  2. Keychain이 필요한 데이터 종류
  3. FileManager를 직접 쓸 때의 장단점
  4. Core Data의 기본 역할
  5. SQLite와 Core Data 차이
  6. 캐시 데이터와 영속 데이터의 구분
  7. 오프라인 대응을 위해 어떤 저장 전략이 필요한지
  8. 마이그레이션이 왜 필요한지
  9. 동시 접근 시 저장소 일관성을 어떻게 지킬지
  10. 백업 대상 데이터와 아닌 데이터를 구분하는 이유

10. 품질, 빌드, 배포 91-100

  1. unit test와 UI test 차이
  2. mock과 stub을 왜 쓰는지
  3. 회귀 테스트가 중요한 이유
  4. crash log를 읽을 때 먼저 봐야 할 것
  5. symbolication이 필요한 이유
  6. scheme, target, build configuration 차이
  7. Debug와 Release 빌드 차이
  8. code signing과 provisioning profile이 왜 필요한지
  9. App Store 배포 전 체크해야 할 것
  10. 로그, 모니터링, 분석 도구를 왜 같이 봐야 하는지

재구성 메모

  • 항목은 암기용보다 설명 가능 여부 점검용으로 재구성했다.
  • 기초 문법, 메모리, UIKit, 네트워크, 이미지, 동시성, 저장소, 품질까지 균형 있게 포함했다.
  • 세부 기술은 이미 작성한 상세 문서들과 연결해 계속 확장한다.

활용 방법

  • 모르는 항목은 개별 문서로 파고든다.
  • 설명이 막히는 항목은 예제 코드까지 같이 정리한다.
  • 반복해서 읽을 때는 카테고리 단위로 공부한다.

운영 원칙