Bibi's DevLog πŸ€“πŸŽ

[Apple Developer Docs] Choosing Between Structures and Classes (ꡬ쑰체와 클래슀 μ‚¬μ΄μ—μ„œ μ„ νƒν•˜κΈ°) λ³Έλ¬Έ

πŸ“±πŸŽ iOS/🍏 Apple Developer Documentation

[Apple Developer Docs] Choosing Between Structures and Classes (ꡬ쑰체와 클래슀 μ‚¬μ΄μ—μ„œ μ„ νƒν•˜κΈ°)

λΉ„λΉ„ bibi 2023. 1. 31. 15:35

원본 λ¬Έμ„œ : Apple Developer Documentation

ꡬ쑰체와 클래슀 μ‚¬μ΄μ—μ„œ μ„ νƒν•˜κΈ°

데이터와 λͺ¨λΈ 행동을 μ–΄λ–»κ²Œ μ €μž₯할지 κ²°μ •ν•©λ‹ˆλ‹€.

κ°œμš”

ꡬ쑰체와 ν΄λž˜μŠ€λŠ” λ‹Ήμ‹ μ˜ μ•±μ—μ„œ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ, 그리고 행동듀을 λͺ¨λΈλ§ν•˜κΈ° μœ„ν•œ 쒋은 μ„ νƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ΄λ“€μ˜ μœ μ‚¬μ„±μ΄ λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜λŠ” 것을 μ–΄λ ΅κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹Ήμ‹ μ˜ 앱에 μƒˆλ‘œμš΄ 데이터 νƒ€μž…μ„ μΆ”κ°€ν•  λ•Œ, μ–΄λ–€ 선택이 합리적인지 μ„ νƒν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” μ•„λž˜μ˜ ꢌμž₯사항을 λ”°λ₯΄λŠ” 것을 κ³ λ €ν•΄ λ³΄μ‹­μ‹œμ˜€.

  • 기본적으둜 ꡬ쑰체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Objective-C μƒν˜Έμš΄μš©μ„±μ΄ ν•„μš”ν•œ 경우, 클래슀λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 당신이 λͺ¨λΈλ§ν•˜κ³  μžˆλŠ” λ°μ΄ν„°μ˜ 동일성을 관리할 ν•„μš”κ°€ μžˆλ‹€λ©΄, 클래슀λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • κ΅¬ν˜„μ‚¬ν•­λ“€μ„ κ³΅μœ ν•¨μœΌλ‘œμ„œ 행동을 μ±„νƒν•˜κΈ° μœ„ν•΄, ꡬ쑰체와 ν”„λ‘œν† μ½œμ„ ν•¨κ»˜ μ‚¬μš©ν•©λ‹ˆλ‹€.

기본적으둜 ꡬ쑰체λ₯Ό μ„ νƒν•˜κΈ°

일반적인 μ’…λ₯˜μ˜ 데이터λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ ꡬ쑰체λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. Swift의 κ΅¬μ‘°μ²΄λŠ” λ‹€λ₯Έ μ–Έμ–΄λ“€μ—μ„œλŠ” ν΄λž˜μŠ€μ—λ§Œ μ œν•œλ˜λŠ” λ§Žμ€ κΈ°λŠ₯듀을 ν¬ν•¨ν•©λ‹ˆλ‹€: μ €μž₯ ν”„λ‘œνΌν‹°, μ—°μ‚° ν”„λ‘œνΌν‹°, λ©”μ„œλ“œλ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€. κ²Œλ‹€κ°€, Swift의 κ΅¬μ‘°μ²΄λŠ” ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜μ—¬ κΈ°λ³Έ κ΅¬ν˜„λ“€μ„ 톡해 행동을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. Swift ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ Foundation은 당신이 자주 μ‚¬μš©ν•˜λŠ” 숫자, λ¬Έμžμ—΄, λ°°μ—΄, λ”•μ…”λ„ˆλ¦¬μ™€ 같은 νƒ€μž…λ“€μ— λŒ€ν•΄ ꡬ쑰체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

ꡬ쑰체λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ•±μ˜ 전체 μƒνƒœλ₯Ό κ³ λ €ν•˜μ§€ μ•Šκ³ λ„ λ‹Ήμ‹ μ˜ μ½”λ“œ 일뢀에 λŒ€ν•΄ μΆ”λ‘ ν•˜λŠ” 것을 더 μ‰½κ²Œ ν•΄ μ€λ‹ˆλ‹€. κ΅¬μ‘°μ²΄λŠ” κ°’ νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— - ν΄λž˜μŠ€μ™€λŠ” λ‹€λ₯΄κ²Œ - ν•œ ꡬ쑰체의 λ³€ν™”λŠ” 당신이 μ˜λ„μ μœΌλ‘œ κ·Έ λ³€ν™”λ₯Ό μ•± νλ¦„μ˜ μΌλΆ€λ‘œμ„œ μ „λ‹¬ν•˜μ§€ μ•ŠλŠ” ν•œ 보이지 μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έ 결과둜, 당신은 μ–΄λ–€ μ½”λ“œ 뢀뢄을 보고, κ·Έ λΆ€λΆ„ μ•ˆμ˜ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ λ³€ν™”κ°€ λ³„λ‘œ 관계가 μ—†λŠ” ν•¨μˆ˜ ν˜ΈμΆœλ‘œλΆ€ν„° 보이지 μ•Šκ²Œ μΌμ–΄λ‚˜λŠ” 것이 μ•„λ‹ˆλΌ, λͺ…μ‹œμ μœΌλ‘œ 일어날 κ²ƒμž„μ„ ν™•μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Objective-C μƒν˜Έμš΄μš©μ„±μ΄ ν•„μš”ν•  λ•Œ 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ°

λ§Œμ•½ 당신이 λ‹Ήμ‹ μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ Objective-C APIλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, Objective-C ν”„λ ˆμž„μ›Œν¬μ— μ •μ˜λœ μ‘΄μž¬ν•˜λŠ” 클래슀 계측 ꡬ쑰 속에 λ‹Ήμ‹ μ˜ 데이터 λͺ¨λΈμ„ 맞좜 ν•„μš”κ°€ μžˆλ‹€λ©΄, 당신은 데이터λ₯Ό λͺ¨λΈλ§ν•˜κΈ° μœ„ν•΄ ν΄λž˜μŠ€μ™€ 클래슀 상속을 μ‚¬μš©ν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ§Žμ€ Objective-C ν”„λ ˆμž„μ›Œν¬λŠ” 당신이 μ„œλΈŒν΄λž˜μŠ€λ‘œ μ˜ˆμƒν•˜λŠ” 것듀을 클래슀둜 λ…ΈμΆœν•©λ‹ˆλ‹€.

동일성을 관리할 ν•„μš”κ°€ μžˆμ„ λ•Œ 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ°

Swift의 ν΄λž˜μŠ€λŠ” μ°Έμ‘° νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— 동일성에 λŒ€ν•œ λ‚΄μž₯된 κ°œλ…μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 두 μ„œλ‘œ λ‹€λ₯Έ 클래슀 μΈμŠ€ν„΄μŠ€λ“€μ΄ 각각의 μ €μž₯ ν”„λ‘œνΌν‹°λ‘œ 같은 값을 κ°€μ§ˆ λ•Œ, μ—¬μ „νžˆ 동일성 μ—°μ‚°μž(===)에 μ˜ν•΄ λ‹€λ₯΄λ‹€κ³  κ³ λ €λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” λ˜ν•œ λ‹Ήμ‹ μ˜ μ•± λ‚΄μ—μ„œ 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•  λ•Œ, κ·Έ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•΄ 당신이 λ§Œλ“  λ³€ν™”λ₯Ό κ·Έ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 가지고 μžˆλŠ” λ‹€λ₯Έ λͺ¨λ“  μ½”λ“œ λΆ€λΆ„μ—μ„œλ„ λ³Ό 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ‹Ήμ‹ μ˜ μΈμŠ€ν„΄μŠ€κ°€ μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ 동일성을 κ°€μ Έμ•Ό ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ 클래슀λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. 일반적인 μ‚¬μš© μ˜ˆμ‹œλŠ” 파일 처리, λ„€νŠΈμ›Œν¬ μ—°κ²°, 그리고 CBCentralManager 같은 곡유 ν•˜λ“œμ›¨μ–΄ μ€‘μž¬μžμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ§Œμ•½ 당신이 둜컬 λ°μ΄ν„°λ² μ΄μŠ€ 연결을 λ‚˜νƒ€λ‚΄λŠ” νƒ€μž…μ„ 가지고 μžˆλ‹€λ©΄, κ·Έ λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ 접근을 κ΄€λ¦¬ν•˜λŠ” μ½”λ“œλŠ” λ‹Ήμ‹ μ˜ μ•±μ—μ„œ 보이듯 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœμ— λŒ€ν•œ μ™„μ „ν•œ μ œμ–΄λ₯Ό ν•„μš”λ‘œ ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 경우 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ μ ˆν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‹Ήμ‹ μ˜ μ•±μ˜ μ–΄λ–€ 뢀뢄이 곡유 λ°μ΄ν„°λ² μ΄μŠ€ 객체에 λŒ€ν•œ μ ‘κ·ΌκΆŒμ„ κ°€μ§€λŠ”μ§€ μ œν•œν•˜λŠ” 것을 ν™•μ‹€νžˆ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ€‘μš”
동일성을 주의 깊게 λ‹€λ£¨μ‹­μ‹œμ˜€. 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό μ•± 전체에 걸쳐 널리 κ³΅μœ ν•˜λ©΄ 둜직 μ—λŸ¬κ°€ λ°œμƒν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. 당신은 맀우 널리 κ³΅μœ λ˜λŠ” μΈμŠ€ν„΄μŠ€μ˜ 변화에 λŒ€ν•œ κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ €μš°λ©°, λ”°λΌμ„œ κ·ΈλŸ¬ν•œ μ½”λ“œλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μž‘μ„±ν•˜λŠ” 것이 좔가적인 일이 λ©λ‹ˆλ‹€.

동일성을 ν†΅μ œν•˜μ§€ μ•Šμ„ λ•Œ ꡬ쑰체λ₯Ό μ‚¬μš©ν•˜κΈ°

당신이 ν†΅μ œν•˜μ§€ μ•ŠλŠ” 동일성을 가진 엔티티에 λŒ€ν•œ 정보λ₯Ό 담은 데이터λ₯Ό λͺ¨λΈλ§ν•  λ•ŒλŠ” ꡬ쑰체λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

예λ₯Ό λ“€μ–΄ 원격 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ°Έμ‘°ν•˜λŠ” μ•±μ—μ„œλŠ”, μΈμŠ€ν„΄μŠ€μ˜ 동일성은 μ™ΈλΆ€ 엔티티에 μ˜ν•΄ μ™„μ „νžˆ μ†Œμœ λ˜κ³  μ‹λ³„μž(identifier)에 μ˜ν•΄ μ „λ‹¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λ§Œμ•½ μ•±μ˜ λͺ¨λΈμ˜ 일관성이 μ„œλ²„μ— μ €μž₯λ˜μ–΄ μžˆλ‹€λ©΄, 당신은 μ‹λ³„μžλ₯Ό 가진 ꡬ쑰체둜 기둝을 λͺ¨λΈλ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œμ—μ„œ, jsonResponseλŠ” μ„œλ²„λ‘œλΆ€ν„° μΈμ½”λ”©λœ PenPalRecord μΈμŠ€ν„΄μŠ€λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€:

PenPalRecord와 같은 λͺ¨λΈ νƒ€μž…μ— λŒ€ν•œ 둜컬의 λ³€ν™”λŠ” μœ μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 앱이 μœ μ € ν”Όλ“œλ°±μ„ μœ„ν•œ μ‘λ‹΅μœΌλ‘œ μ—¬λŸ¬ λ‹€λ₯Έ νŽœνŒ”μ„ μΆ”μ²œν•  수 μžˆμŠ΅λ‹ˆλ‹€. PenPalRecord κ΅¬μ‘°μ²΄λŠ” κΈ°μ €μ˜ λ°μ΄ν„°λ² μ΄μŠ€ 기둝의 동일성을 ν†΅μ œν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, 둜컬의 PenPalRecord μΈμŠ€ν„΄μŠ€μ— λŒ€ν•΄ 이루어진 λ³€ν™”κ°€ μ˜λ„μΉ˜ μ•Šκ²Œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 값을 λ°”κΎΈλŠ” 상황에 λŒ€ν•œ μ–΄λ–€ μœ„ν—˜λΆ€λ‹΄λ„ μ—†μŠ΅λ‹ˆλ‹€.

λ§Œμ•½ μ•±μ˜ λ‹€λ₯Έ 뢀뢄이 myNickname을 λ°”κΎΈκ³ , κ·Έ λ³€κ²½ μš”μ²­μ„ μ„œλ²„μ— λ‹€μ‹œ μ œμΆœν•œλ‹€λ©΄, κ°€μž₯ μ΅œκ·Όμ— 거절된 νŽœνŒ” μΆ”μ²œμ΄ 변경에 μ˜ν•΄ μ‚¬κ³ λ‘œ μ„ νƒλ˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. myId ν”„λ‘œνΌν‹°κ°€ μƒμˆ˜λ‘œ μ„ μ–Έλ˜μ–΄ μžˆμœΌλ―€λ‘œ, λ‘œμ»¬μ—μ„œλŠ” 변경될 수 μ—†μŠ΅λ‹ˆλ‹€. κ·Έ κ²°κ³Ό, λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ μš”μ²­μ€ λ‹€λ₯Έ 기둝을 μ˜λ„μΉ˜ μ•Šκ²Œ λ³€ν™”μ‹œν‚€μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λΈ 상속과 행동 곡유λ₯Ό μœ„ν•΄ ꡬ쑰체와 ν”„λ‘œν† μ½œ μ‚¬μš©ν•˜κΈ°

ꡬ쑰체와 ν΄λž˜μŠ€λŠ” λͺ¨λ‘ μƒμ†μ΄λΌλŠ” ν˜•νƒœλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. ꡬ쑰체와 ν΄λž˜μŠ€λŠ” ν”„λ‘œν† μ½œλ§Œμ„ 채택할 수 μžˆμŠ΅λ‹ˆλ‹€; 이듀은 클래슀λ₯Ό 상속할 수 μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 당신이 클래슀 상속을 톡해 ν˜•μ„±ν•  수 μžˆλŠ” μœ ν˜•μ˜ 상속 계측듀은 ν”„λ‘œν† μ½œμƒμ†κ³Ό ꡬ쑰체λ₯Ό μ‚¬μš©ν•΄λ„ λ˜‘κ°™μ΄ λͺ¨λΈλ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ 맨 μ²˜μŒλΆ€ν„° 상속 관계λ₯Ό λ§Œλ“€κ³  μžˆλ‹€λ©΄, ν”„λ‘œν† μ½œ 상속을 μ„ ν˜Έν•©λ‹ˆλ‹€. ν”„λ‘œν† μ½œμ€ 상속에 클래슀, ꡬ쑰체, μ—΄κ±°ν˜•μ΄ μ°Έμ—¬ν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€. 반면 클래슀 상속은 였직 λ‹€λ₯Έ ν΄λž˜μŠ€μ—λ§Œ ν˜Έν™˜μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. 당신이 데이터λ₯Ό μ–΄λ–»κ²Œ λͺ¨λΈλ§ν• μ§€ μ„ νƒν•˜λŠ” 쀑이라면, λ¨Όμ € ν”„λ‘œν† μ½œ 상속을 μ‚¬μš©ν•΄ 데이터 νƒ€μž…μ˜ 계측을 λ§Œλ“œλŠ” 것을 μ‹œλ„ν•˜μ‹­μ‹œμ˜€. 그런 λ‹€μŒ λ‹Ήμ‹ μ˜ ꡬ쑰체에 κ·Έ ν”„λ‘œν† μ½œλ“€μ„ μ±„νƒν•©λ‹ˆλ‹€.