/iOSInterviewquestions

πŸ‘¨πŸ»β€πŸ’»πŸ‘©πŸ»β€πŸ’»iOS 면접에 λ‚˜μ˜¬ μ§ˆλ¬Έλ“€ 총 정리

Primary LanguageSwift

iOSInterviewquestions

iOSκ°œλ°œμžλ“€μ—κ²Œ ν•„μš”ν•œ μžλ£Œλ“€μ„ μ •λ¦¬ν•˜κ³  μžˆλŠ” μ€‘μž…λ‹ˆλ‹€.

λ©΄μ ‘λ•Œ 받은 μ§ˆλ¬Έμ΄λ‚˜ κ³΅λΆ€ν•œλ‚΄μš©λ“€

μˆ˜μ •ν•΄μ•Όν•  λ‚΄μš©μ΄λ‚˜ μΆ”κ°€ν•΄μ•Όν•  λ‚΄μš©μ€ μ–Έμ œλ“ μ§€ PRλ‚ λ €μ£Όμ„Έμš”!

λͺ¨λ‘μ˜ νž˜μ„ λͺ¨μ•„λ΄…μ‹œλ‹€ πŸ‘―β€β™€οΈπŸ‘―β€β™‚οΈ κ°μ‚¬ν•©λ‹ˆλ‹€:)

Required

μ•„λž˜ λ‚΄μš©λ“€μ€ μ΅œλŒ€ν•œ 많이 κ³΅λΆ€ν•΄λ†“λŠ”κ²ƒμ΄ μ’‹μŠ΅λ‹ˆλ‹€ πŸ“

iOS

  • Bounds 와 Frame 의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • μ‹€μ œ λ””λ°”μ΄μŠ€κ°€ 없을 경우 개발 ν™˜κ²½μ—μ„œ ν•  수 μžˆλŠ” 것과 μ—†λŠ” 것을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • 앱이 foreground에 μžˆμ„ λ•Œμ™€ background에 μžˆμ„ λ•Œ μ–΄λ–€ μ œμ•½μ‚¬ν•­μ΄ 있고, μƒνƒœ 변화에 따라 λ‹€λ₯Έ λ™μž‘μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 델리게이트 λ©”μ„œλ“œλ“€μ„ μ„€λͺ…ν•˜μ‹œμ˜€.
  • scene delegate에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • 앱이 In-Active μƒνƒœκ°€ λ˜λŠ” μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.
  • NSOperationQueue 와 GCD Queue 의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • GCD API λ™μž‘ 방식과 ν•„μš”μ„±μ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • μžμ‹ λ§Œμ˜ Custom Viewλ₯Ό λ§Œλ“€λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • iOS 앱을 λ§Œλ“€κ³ , User Interfaceλ₯Ό κ΅¬μ„±ν•˜λŠ” 데 ν•„μˆ˜μ μΈ ν”„λ ˆμž„μ›Œν¬ 이름은 무엇인가?
  • Foundation Kit은 무엇이고 ν¬ν•¨λ˜μ–΄ μžˆλŠ” ν΄λž˜μŠ€λ“€μ€ μ–΄λ–€ 것이 μžˆλŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Delegateλž€ 무언인가 μ„€λͺ…ν•˜κ³ , retain λ˜λŠ”μ§€ μ•ˆλ˜λŠ”μ§€ κ·Έ 이유λ₯Ό ν•¨κ»˜ μ„€λͺ…ν•˜μ‹œμ˜€.
  • NotificationCenter λ™μž‘ 방식과 ν™œμš© λ°©μ•ˆμ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • UIKit ν΄λž˜μŠ€λ“€μ„ λ‹€λ£° λ•Œ κΌ­ μ²˜λ¦¬ν•΄μ•Όν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ“°λ ˆλ“œ 이름은 무엇인가?
  • TableViewλ₯Ό λ™μž‘ 방식과 화면에 Cell을 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ΅œμ†Œν•œ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” DataSource λ©”μ„œλ“œλ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.
  • ν•˜λ‚˜μ˜ View Controller μ½”λ“œμ—μ„œ μ—¬λŸ¬ TableView Controller 역할을 ν•΄μ•Ό ν•  경우 μ–΄λ–»κ²Œ κ΅¬λΆ„ν•΄μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • App Bundle의 ꡬ쑰와 역할에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • View 객체에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • UIView μ—μ„œ Layer κ°μ²΄λŠ” 무엇이고 μ–΄λ–€ 역할을 λ‹΄λ‹Ήν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • UIWindow 객체의 역할은 무엇인가?
  • UINavigationController 의 역할이 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • λͺ¨λ“  View Controller 객체의 μƒμœ„ ν΄λž˜μŠ€λŠ” 무엇이고 κ·Έ 역할은 무엇인가?
  • 앱이 μ‹œμž‘ν•  λ•Œ main.c 에 μžˆλŠ” UIApplicationMain ν•¨μˆ˜μ— μ˜ν•΄μ„œ μƒμ„±λ˜λŠ” κ°μ²΄λŠ” 무엇인가?
  • UIApplication 객체의 컨트둀러 역할은 어디에 κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ”κ°€?
  • μ•±μ˜ μ½˜ν…μΈ λ‚˜ 데이터 자체λ₯Ό μ €μž₯/λ³΄κ΄€ν•˜λŠ” νŠΉλ³„ν•™ 객체λ₯Ό 무엇이라고 ν•˜λŠ”κ°€?
  • μ•± ν™”λ©΄μ˜ μ½˜ν…μΈ λ₯Ό ν‘œμ‹œν•˜λŠ” 둜직과 관리λ₯Ό λ‹΄λ‹Ήν•˜λŠ” 객체λ₯Ό 무엇이라고 ν•˜λŠ”κ°€?
  • Swift의 ν΄λ‘œμ €μ™€ Objective-C의 블둝은 μ–΄λ–€ 차이가 μžˆλŠ”κ°€?
  • App의 Not running, Inactive, Active, Background, Suspended에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • App thinning에 λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Global DispatchQueue 의 Qos μ—λŠ” μ–΄λ–€ μ’…λ₯˜κ°€ μžˆλŠ”μ§€, 각각 μ–΄λ–€ μ˜λ―ΈμΈμ§€ μ„€λͺ…ν•˜μ‹œμ˜€.

Autolayout

  • μ˜€ν† λ ˆμ΄μ•„μ›ƒμ„ μ½”λ“œλ‘œ μž‘μ„±ν•˜λŠ” 방법은 무엇인가? (3가지)
  • hugging, resistance에 λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Intrinsic Size에 λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ‹œμ˜€.
  • μŠ€ν† λ¦¬λ³΄λ“œλ₯Ό μ΄μš©ν–ˆμ„λ•Œμ˜ μž₯단점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Safearea에 λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Left Constraint 와 Leading Constraint 의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.

Swift

  • Optional μ΄λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Fast Enumration μ΄λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Struct κ°€ 무엇이고 μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • instance λ©”μ„œλ“œμ™€ class λ©”μ„œλ“œμ˜ 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Delegate νŒ¨ν„΄μ„ ν™œμš©ν•˜λŠ” 경우λ₯Ό 예λ₯Ό λ“€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Singleton νŒ¨ν„΄μ„ ν™œμš©ν•˜λŠ” 경우λ₯Ό 예λ₯Ό λ“€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • KVO λ™μž‘ 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Delegates와 Notification λ°©μ‹μ˜ 차이점에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • λ©€ν‹° μ“°λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” 앱을 μž‘μ„±ν•˜κ³  싢을 λ•Œ κ³ λ €ν•  수 μžˆλŠ” 방식듀을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • MVC ꡬ쑰에 λŒ€ν•΄ 블둝 그림을 그리고, 각 μ—­ν• κ³Ό 흐름을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • ν”„λ‘œν† μ½œμ΄λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Hashable이 무엇이고, Equatable을 μ™œ 상속해야 ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • mutating ν‚€μ›Œλ“œμ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • νƒˆμΆœ ν΄λ‘œμ €μ— λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Extension에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • μ ‘κ·Ό μ œμ–΄μžμ˜ μ’…λ₯˜μ—” μ–΄λ–€κ²Œ μžˆλŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€
  • deferλž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • deferκ°€ ν˜ΈμΆœλ˜λŠ” μˆœμ„œλŠ” μ–΄λ–»κ²Œ 되고, deferκ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠλŠ” 경우λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.

ARC

  • ARCλž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Retain Count 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Strong κ³Ό Weak μ°Έμ‘° 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • ARC λŒ€μ‹  Manual Reference Count λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  λ•Œ κΌ­ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” λ©”μ„œλ“œλ“€μ„ μ“°κ³  역할을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • retain κ³Ό assign 의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • μˆœν™˜ 참쑰에 λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜μ‹œμ˜€.
  • κ°•ν•œ μˆœν™˜ μ°Έμ‘° (Strong Reference Cycle) λŠ” μ–΄λ–€ κ²½μš°μ— λ°œμƒν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • νŠΉμ • 객체λ₯Ό autorelease ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 사항과 과정을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Autorelease Pool을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 상황을 두 가지 이상 예둜 λ“€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ–΄λ–€ 일이 λ°œμƒν• κΉŒ μΆ”μΈ‘ν•΄μ„œ μ„€λͺ…ν•˜μ‹œμ˜€. Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];

Functional Programming

  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • κ³ μ°¨ ν•¨μˆ˜κ°€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Swift Standard Library의 map, filter, reduce, compactMap, flatMap에 λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜μ‹œμ˜€.

Optional

μ•„λž˜λΆ€ν„°λŠ” μΆ”κ°€λ‘œ 곡뢀λ₯Ό ν•˜λ©΄ 쒋을 λ‚΄μš©λ“€μž…λ‹ˆλ‹€.

Objective-cλ‚˜ rxλŠ” νšŒμ‚¬, νŒ€λ§ˆλ‹€ μ‚¬μš©ν•˜λŠ”κ³³μ΄ μ°¨μ΄κ°€μžˆκ³  μ‹ μž…μ΄λ‚˜ μ£Όλ‹ˆμ–΄κΈ°μ€€μœΌλ‘œ ν•„μˆ˜λΌκ³  μ—¬κ²¨μ§€μ§€μ•ŠκΈ°μ— μ˜΅μ…”λ„μ— μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

Objective-C

  • Mutable 객체과 Immutable κ°μ²΄λŠ” 어떀것이 μžˆλŠ”μ§€ 예λ₯Ό λ“€κ³ , 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • dynamicκ³Ό property μ˜λ―Έμ™€ 차이λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.
  • @property둜 μ„ μ–Έν•œ NSString* title 의 getter/setter λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄λ³΄μ‹œμ˜€.
  • @propertyμ—μ„œ atomicκ³Ό nonatomic 차이점을 μ„€λͺ…ν•˜κ³ , 어떀것이 μ•ˆμ „ν•œμ§€, μ–΄λŠκ²ƒμ΄ 기본인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • @property둜 μ„ μ–Έν•œλ‹€λŠ” κ²ƒμ˜ 의미λ₯Ό μ„€λͺ…ν•˜κ³ , .h에 넣을 κ²½μš°μ™€ .m에 넣을 경우 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • -performSelector:withObject:afterDelay: λ©”μ‹œμ§€λ₯Ό 보내면 μΈμžκ°’μ˜ κ°μ²΄λŠ” retainλ˜λŠ”κ°€? κ·Έ 이유λ₯Ό ν•¨κ»˜ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Objective-C μ—μ„œ μΊ‘μŠν™”λœ 데이터λ₯Ό μ ‘κ·Όν•˜κΈ° μœ„ν•œ 방법듀을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • unnamed category 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Category ν™•μž₯κ³Ό Subclass ν™•μž₯의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Category 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Objective-C μ—μ„œ Protocol μ΄λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Objective-C++ 방식이 무엇인지 μ„€λͺ…ν•˜κ³ , μ–΄λ–€ 경우 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • method swizzling이 무엇이고, μ–΄λ–¨ λ•Œ μ‚¬μš©ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.

Advanced

  • NSCoder ν΄λž˜μŠ€λŠ” μ–΄λ–€ μƒν™©μ—μ„œ μ–΄λ–»κ²Œ 써야 ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Responder Chain ꡬ쑰에 λŒ€ν•΄ μ„€λͺ…ν•˜κ³ , First Responder 역할에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • NSObjectλΆ€ν„° UIButton κΉŒμ§€ 상속 κ³Όμ •μ˜ 계측과 역할을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • shallow copy와 deep copy의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • Push Notification 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Foundation κ³Ό Core Foundation ν”„λ ˆμž„μ›Œν¬μ˜ 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • NSURLConnection μ—μ„œ μ‚¬μš©ν•˜λŠ” Delegate λ©”μ„œλ“œλ“€μ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • Synchronous 방식과 Asynchronous λ°©μ‹μœΌλ‘œ URL Connection을 μ²˜λ¦¬ν•  경우의 μž₯단점을 λΉ„κ΅ν•˜μ‹œμ˜€.
  • Plist 파일 ꡬ쑰와 Plist νŒŒμΌμ— μ €μž₯된 데이터λ₯Ό 닀루기 μ ν•©ν•œ 클래슀λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.
  • Core Data와 Sqlite 같은 데이터 베이슀의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.
  • JSON 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방식과 νŒŒμ„œ, 객체 λ³€ν™˜ 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.
  • XML Parserλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.
  • μ›Ή μ„œλ²„μ™€ HTTP 연결을 μ‚¬μš©ν•΄μ„œ 데이터λ₯Ό μ£Όκ±°λ‚˜ λ°›μœΌλ €λ©΄ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” ν΄λž˜μŠ€μ™€ λ™μž‘μ„ μ„€λͺ…ν•˜μ‹œμ˜€.
  • DOM 방식과 SAX 방식 XML Parser의 차이점을 μ„€λͺ…ν•˜κ³  iOS XML ParserλŠ” μ–΄λ–€ 방식인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • In-App Purchase Product type 을 μ„€λͺ…ν•˜μ‹œμ˜€.

Architecture

  • μ˜μ‘΄μ„± μ£Όμž…μ— λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜μ‹œμ˜€.

Rx

  • Reactive Programming이 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.
  • RxSwiftμ—μ„œ Hot Observableκ³Ό Cold Observable의 차이λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.