O-O-wl / iOSInterviewquestions

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

iOSInterviewquestions

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

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

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

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

Required

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

iOS

  • Bounds 와 Frame 의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.

    ⚠️ 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 λ©”μ„œλ“œμ˜ 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.

    ⚠️ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” class/structκ°€ μ΄ˆκΈ°ν™”λ˜μ–΄ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό 톡해 μ ‘κ·Ό κ°€λŠ₯ν•œ λ©”μ†Œλ“œμ΄λ‹€.

    • κ·ΈλŸ¬λ―€λ‘œ ν•΄λ‹Ή λ©”μ†Œλ“œμ—μ„œ μƒνƒœλ₯Ό λ³€κ²½ν•˜λ©΄ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ§Œ μƒνƒœκ°€ λ³€κ²½λœλ‹€.

    ⚠️ Class λ©”μ†Œλ“œμ˜ 경우 νƒ€μž…μ— μ˜μ‘΄ν•˜λ―€λ‘œ νƒ€μž…μ„ λͺ…μ‹œν•¨μœΌλ‘œμ¨ λ©”μ†Œλ“œμ— μ ‘κ·Όκ°€λŠ₯ν•˜λ‹€.

    • κ·ΈλŸ¬λ―€λ‘œ ν•΄λ‹Ή λ©”μ†Œλ“œμ—μ„œ μƒνƒœλ₯Ό λ³€κ²½ν•˜κ²Œλ˜λ©΄ ν•΄λ‹Ή νƒ€μž… κ·Έ 자체의 μƒνƒœκ°€ λ³€κ²½λœλ‹€.
  • Delegate νŒ¨ν„΄μ„ ν™œμš©ν•˜λŠ” 경우λ₯Ό 예λ₯Ό λ“€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€.

  • Singleton νŒ¨ν„΄μ„ ν™œμš©ν•˜λŠ” 경우λ₯Ό 예λ₯Ό λ“€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€.

  • KVO λ™μž‘ 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

  • Delegates와 Notification λ°©μ‹μ˜ 차이점에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

  • λ©€ν‹° μ“°λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” 앱을 μž‘μ„±ν•˜κ³  싢을 λ•Œ κ³ λ €ν•  수 μžˆλŠ” 방식듀을 μ„€λͺ…ν•˜μ‹œμ˜€.

  • MVC ꡬ쑰에 λŒ€ν•΄ 블둝 그림을 그리고, 각 μ—­ν• κ³Ό 흐름을 μ„€λͺ…ν•˜μ‹œμ˜€.

  • ν”„λ‘œν† μ½œμ΄λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.

    ⚠️ ν”„λ‘œν† μ½œμ€ κ°μ²΄κ°„μ˜ μ†Œν†΅μ—μ„œ ν•„μš”ν•œ κ΄€λ ¨μžˆλŠ” κΈ°λŠ₯λ“€μ˜ λͺ…μ„Έμ˜ 집합이닀.

    ⚠️ ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” μˆœκ°„ ν•΄λ‹Ή κΈ°λŠ₯λ“€μ˜ κ΅¬ν˜„μ„ κ°•μ œν•˜κΈ°ν•œλ‹€.

    • κ·Έλ ‡κΈ° 떄문에 ν•΄λ‹Ή ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•œλ‹€λ©΄, κ·Έ 객체가 ν•΄λ‹Ή κΈ°λŠ₯듀을 μˆ˜ν–‰ν• μˆ˜ μžˆμŒμ„ 보μž₯ν•  수 μžˆλ‹€.

  • Hashable이 무엇이고, Equatable을 μ™œ 상속해야 ν•˜λŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€.


  • mutating ν‚€μ›Œλ“œμ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

    ⚠️ κ°’νƒ€μž…μ˜ ν”„λ‘œνΌν‹°λ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ†Œλ“œμ— μž‘μ„±ν•΄μ•Όν•˜λŠ” ν‚€μ›Œλ“œμž…λ‹ˆλ‹€.

    ⚠️ mutating ν‚€μ›Œλ“œκ°€ 뢙은 λ©”μ†Œλ“œλŠ” 사싀 ν”„λ‘œνΌν‹°λ₯Ό λ°”κΎΈλŠ” 것이 μƒˆλ‘œμš΄ κ°’ νƒ€μž…μ„ μƒμ„±ν•΄μ„œ λŒ€μΉ˜μ‹œν‚€λŠ” κ³Όμ •μ΄λ―€λ‘œ, 이λ₯Ό μ»΄νŒŒμΌλŸ¬μ—κ²Œ λͺ…μ‹œν•΄μ£ΌλŠ” ν‚€μ›Œλ“œμž…λ‹ˆλ‹€.


  • νƒˆμΆœ ν΄λ‘œμ €μ— λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜μ‹œμ˜€.

    ⚠️ ν΄λ‘œμ €λŠ” μŠ€μœ„ν”„νŠΈμ—μ„œ μ°Έμ‘° νƒ€μž…μ΄λ©°, ν΄λ‘œμ €λ₯Ό ν•¨μˆ˜μ˜ 인자둜 전달할 수 μžˆλ‹€.

    ν΄λ‘œμ €λ₯Ό 전달받은 ν•¨μˆ˜κ°€ λλ‚˜κ³  μ œμ–΄νλ¦„μ„ λ°˜ν™˜ν•˜κΈ° 전에 ν΄λ‘œμ €λ₯Ό ν˜ΈμΆœν•œλ‹€λ©΄ λ¬Έμ œκ°€ λ˜μ§€ μ•Šμ§€λ§Œ, μ œμ–΄νλ¦„μ„ λ°˜ν™˜ν•˜κ³  κ·Έ 이후 ν˜ΈμΆœλ˜λŠ” ν΄λ‘œμ €λ“€μ΄ μžˆλ‹€. DispatchQueue.async 와 같은 μ˜ˆμ œκ°€ μžˆλ‹€. 이 경우 ν΄λ‘œμ €κ°€ λ©”λͺ¨λ¦¬μ— μœ μ§€λ  지 뢈투λͺ…ν•˜λ‹€.

    ⚠️ 이런 경우 λ©”λͺ¨λ¦¬μ—μ„œ ν΄λ‘œμ €λ₯Ό ν•΄μ œλ˜μ§€ μ•Šκ²Œ @escaping을 ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ„œ, λ©”λͺ¨λ¦¬μ— 남아 있게 ν•  수 μžˆλ‹€.


  • Extension에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

    ⚠️ κΈ°μ‘΄ (κ°’,μ°Έμ‘°)νƒ€μž…λ“€μ„ μˆ˜ν‰μ μœΌλ‘œ ν™•μž₯ν•˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

    ⚠️ κΈ°μ‘΄νƒ€μž…μ— μ‚¬μš©μž μ •μ˜λ©”μ†Œλ“œ, κ³„μ‚°ν”„λ‘œνΌν‹°λ“±μ„ μΆ”κ°€ν•˜λŠ” ν™•μž₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    ⚠️ ν”„λ‘œν† μ½œμ˜ μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œλ₯Ό κΈ°λ³Έκ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    ⚠️ κ΄€λ ¨λœ μ½”λ“œλΈ”λŸ­λ“€μ„ λΆ„λ¦¬ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • Class/ struct/ enum 차이점과 μ‚¬μš©ν•˜λŠ” λ‚˜μ˜ 기쀀에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

  • μ ‘κ·Ό μ œμ–΄μžμ˜ μ’…λ₯˜μ—” μ–΄λ–€κ²Œ μžˆλŠ”μ§€ μ„€λͺ…ν•˜μ‹œμ˜€

    βœ… open - λͺ¨λ“  μˆ˜μ€€μ˜ 접근이 μ—΄λ € μžˆλ‹€.

    βœ… pubilc - ν•΄λ‹Ή λͺ¨λ“ˆμ—μ„œλ§Œ 상속을 ν†΅ν•œ νƒ€μž…ν™•μž₯이 κ°€λŠ₯ν•˜λ‹€.

    βœ… internal - ν•΄λ‹Ή λͺ¨λ“ˆμ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€. , Default μ ‘κ·Όμ œν•œμžμ΄λ‹€.

    βœ… fileprivate - ν•΄λ‹Ή νŒŒμΌμ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€.

    βœ… private - 접근을 μ œν•œν•œλ‹€.

  • deferλž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… μ œμ–΄κΆŒμ„ ν˜„μž¬ μŠ€μ½”ν”„μ—μ„œ λ‹€λ₯Έ μŠ€μ½”ν”„λ‘œ 전달할 λ•Œ, ν˜ΈμΆœλ˜λŠ” 지연 블둝

    βœ… μžμ› λ°˜λ‚©κ³Ό 같은 ν›„μ²˜λ¦¬ 뢀뢄을 μ§€μ—°λΈ”λ‘μ—μ„œ μ²˜λ¦¬ν•œλ‹€.

    βœ… μ—λŸ¬κ°€ λ°œμƒν•΄λ„ 지연블둝을 ν˜ΈμΆœλ˜λ―€λ‘œ ν›„μ²˜λ¦¬μ— μ ν•©ν•˜λ‹€.

  • deferκ°€ ν˜ΈμΆœλ˜λŠ” μˆœμ„œλŠ” μ–΄λ–»κ²Œ 되고, deferκ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠλŠ” 경우λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… μ„ μ–Έλœ μˆœμ„œμ™€ μ—­μˆœμœΌλ‘œ ν˜ΈμΆœλœλ‹€

    βœ… λ§Œμ•½ defer 블둝에 λ„λ‹¬ν•˜κΈ°λ„ 전에 reture λœλ‹€λ©΄ κ·Έ 이전에 λͺ…μ‹œλœ defer ꡬ문만이 ν˜ΈμΆœλœλ‹€

  • μƒμ„±μž(designated/convenience/required)의 차이점과 νŠΉμ§•μ„ μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… designated init 은 λͺ¨λ“  λ©€λ²„λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™”ν•˜λŠ” μ§€μ •μ΄λ‹ˆμ…œλΌμ΄μ €

    • λ§Œμ•½ ν•˜μœ„νƒ€μž…μ˜ init이라면 super.init 을 ν˜ΈμΆœν•΄μ•Όν•œλ‹€.
    • λ§Œμ•½ superν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•œλ‹€λ©΄, ν™•μž₯된 ν”„λ‘œνΌν‹°λ₯Ό μ΄ˆκΈ°ν™”ν›„ super.init을 ν˜ΈμΆœν•΄μ•Όν•œλ‹€.

    βœ… convenience init 은 λ‚΄λΆ€μ—μ„œ designated init을 ν˜ΈμΆœν•΄μ•Όν•œλ‹€.

    • μ΄λ‹ˆμ…œλΌμ΄μ € μœ„μž„μœΌλ‘œ, self.init이 ν˜ΈμΆœμ„ ν•˜κΈ° μ΄μ „μ—λŠ” self에 μ ‘κ·Ό ν•  수 μ—†μœΌλ―€λ‘œ, designated init의 superμ™€λŠ” λ°˜λŒ€λ‘œ λ¨Όμ € self.init을 ν˜ΈμΆœν•΄μ•Όν•œλ‹€.

    βœ… required init은 ν•΄λ‹Ή νƒ€μž…μ˜ μ„œλΈŒν΄λž˜μŠ€λ“€μ—κ²Œ νŠΉμ • init의 κ΅¬ν˜„μ„ κ°•μ œν•˜λŠ” μ΄λ‹ˆμ…œλΌμ΄μ €μ΄λ‹€.

    λͺ¨λ“  μ΄ˆκΈ°ν™”λŠ” μ•„λž˜μ˜ 단계λ₯Ό κ±°μΉœλ‹€.

    1. Designated init 이 ν˜ΈμΆœλœλ‹€ - convenience init 을 ν†΅ν•œ κ°„μ ‘ν˜ΈμΆœλ„ ν¬ν•¨λœλ‹€
    2. μ΄ˆκΈ°ν™”λœ self.prop 을 μˆ˜μ •ν•  κΈ°νšŒκ°€ 주어진닀.
  • ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ‹œμ˜€.

ARC

  • ARCλž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… Swiftμ—μ„œλŠ” λ©”λͺ¨λ¦¬κ΄€λ¦¬λ₯Ό 참쑰카운트λ₯Ό ν†΅ν•΄μ„œ ν•˜λŠ”λ°, 이것을 μžλ™μœΌλ‘œ κ³„μ‚°ν•΄μ£ΌλŠ” λ©”λͺ¨λ¦¬κ΄€λ¦¬ 방법이닀.

  • Retain Count 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… ν•΄λ‹Ή 객체λ₯Ό λ‹€λ₯Έ κ³³μ—μ„œ μ°Έμ‘°ν•˜κ²Œ 되면 retain count κ°€ μ¦κ°€ν•˜κ³ , μ°Έμ‘°λ₯Ό 마치게 되면 retain countλ₯Ό κ°μ†Œμ‹œν‚¨λ‹€.

    βœ… 객체의 retain count κ°€ 0 이라면 ν•΄λ‹Ή 객체에 μ ‘κ·Όν•  수 μ—†κΈ°λ•Œλ¬Έμ—, 더 이상 μ‚¬μš©λ˜μ§€ μ•Šμ„ 것이라고 νŒλ‹¨ν•΄μ„œ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œν•©λ‹ˆλ‹€.

  • Strong κ³Ό Weak μ°Έμ‘° 방식에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… Strong 은 객체λ₯Ό μ°Έμ‘°ν•˜λ©°, 참쑰카운트λ₯Ό 1 μ¦κ°€μ‹œν‚¨λ‹€. κ·ΈλŸ¬λ―€λ‘œ 객체가 λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλ˜μ§€ μ•ŠμŒμ„ 보μž₯ν•  수 μžˆλ‹€.

    βœ… Weak은 μ°Έμ‘°λ₯Ό ν•˜λ˜, μ°Έμ‘° μΉ΄μš΄νŠΈλŠ” μ¦κ°€μ‹œν‚€μ§€ μ•Šμ•„μ„œ, nil 둜 λ°”λ€” 수 μžˆλŠ” κ°€λŠ₯성을 가지고 μžˆλ‹€. κ·Έλž˜μ„œ Optionalκ³Ό var 을 μ‚¬μš©ν•œλ‹€.

  • Unowned 와 weak 의 차이점에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

    βœ… Weak μ°Έμ‘°λŠ” μ°Έμ‘°ν•˜λŠ” μΈμŠ€ν„΄μŠ€κ°€ 더 짧은 생λͺ…μ£ΌκΈ°λ₯Ό κ°€μ§ˆ λ•Œ μ‚¬μš©ν•œλ‹€. nil κ°€λŠ₯성을 λ‚΄ν¬ν•˜κ³  μžˆλ‹€. μ°Έμ‘°κ°€ 0 이 되면 Zeroing μ΄λΌλŠ” μž‘μ—…μ„ 톡해 dangling pointer κ°€ μ•„λ‹Œ nil 을 ν• λ‹Ήν•œλ‹€.

    βœ… unownedλŠ” μ°Έμ‘°ν•˜λŠ” μΈμŠ€ν„΄μŠ€κ°€ ν˜„μž¬ μΈμŠ€ν„΄μŠ€μ˜ 생λͺ…주기보닀 κΈΈκ±°λ‚˜ 같을 λ•Œ μ‚¬μš©ν•œλ‹€.

  • 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의 차이λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.

About

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


Languages

Language:Swift 100.0%