λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ₯– Bread Basics/Obj-c

Obj-C 곡식 λ¬Έμ„œ 정리 - 정적 λ™μž‘ μ΄ν•΄ν•˜κΈ°

by BreadDev 2025. 4. 14.
728x90

μ•ˆλ…•ν•˜μ„Έμš”. μ΄λ²ˆμ—λŠ” Objective-C의 정적 타이핑(Static Typing)κ³Ό κ·Έ μž‘λ™ 방식, 그리고 Objective-C의 λ‹€λ₯Έ κΈ°λŠ₯듀에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 특히 Objective-C의 동적 νŠΉμ„±μ„ μΌμ‹œμ μœΌλ‘œ μ œμ–΄ν•˜λŠ” 방법에 λŒ€ν•΄ μ‚΄νŽ΄λ³Ό μ˜ˆμ •μž…λ‹ˆλ‹€.

πŸ“Œ κΈ°λ³Έ 동적 λ™μž‘(Default Dynamic Behavior)

Objective-CλŠ” 섀계상 객체가 동적 μ—”ν‹°ν‹°μž…λ‹ˆλ‹€. 객체에 κ΄€ν•œ λ§Žμ€ 결정이 컴파일 μ‹œκ°„μ΄ μ•„λ‹Œ λŸ°νƒ€μž„μœΌλ‘œ λ―Έλ€„μ§‘λ‹ˆλ‹€:

  • 객체의 λ©”λͺ¨λ¦¬λŠ” μƒˆ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 클래슀 λ©”μ„œλ“œμ— μ˜ν•΄ λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ ν• λ‹Ήλ©λ‹ˆλ‹€.
  • κ°μ²΄λŠ” λ™μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λ©λ‹ˆλ‹€. μ†ŒμŠ€ μ½”λ“œ(컴파일 μ‹œκ°„)μ—μ„œ 객체의 ν΄λž˜μŠ€κ°€ 무엇이든 상관없이 λͺ¨λ“  객체 λ³€μˆ˜λŠ” id νƒ€μž…μ΄ 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ©”μ‹œμ§€μ™€ λ©”μ„œλ“œλŠ” λ™μ μœΌλ‘œ λ°”μΈλ”©λ©λ‹ˆλ‹€. λŸ°νƒ€μž„ ν”„λ‘œμ‹œμ €λŠ” λ©”μ‹œμ§€μ˜ λ©”μ„œλ“œ μ…€λ ‰ν„°λ₯Ό μˆ˜μ‹ μžμ— "μ†ν•˜λŠ”" λ©”μ„œλ“œ κ΅¬ν˜„κ³Ό μΌμΉ˜μ‹œν‚΅λ‹ˆλ‹€.

동적 바인딩(Dynamic Binding): λ©”μ„œλ“œ 호좜이 λŸ°νƒ€μž„μ— κ²°μ •λ˜λŠ” ν”„λ‘œμ„ΈμŠ€λ‘œ, λ©”μ‹œμ§€κ°€ 전솑될 λ•Œ μ‹€μ œ 싀행될 μ½”λ“œκ°€ κ²°μ •λ©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ κΈ°λŠ₯은 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž¨μ— λ§Žμ€ μœ μ—°μ„±κ³Ό νŒŒμ›Œλ₯Ό μ œκ³΅ν•˜μ§€λ§Œ, 그에 λ”°λ₯Έ λŒ€κ°€κ°€ μžˆμŠ΅λ‹ˆλ‹€. 특히 μ»΄νŒŒμΌλŸ¬λŠ” id λ³€μˆ˜μ˜ μ •ν™•ν•œ νƒ€μž…(클래슀)을 확인할 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ“Œ 정적 타이핑(Static Typing)

Objective-Cμ—μ„œλŠ” 더 λ‚˜μ€ 컴파일 μ‹œκ°„ νƒ€μž… 체크λ₯Ό ν—ˆμš©ν•˜κ³  μ½”λ“œλ₯Ό 더 자기 λ¬Έμ„œν™”λ˜κ²Œ ν•˜κΈ° μœ„ν•΄, 객체λ₯Ό id둜 일반적으둜 νƒ€μž…μ„ μ§€μ •ν•˜λŠ” λŒ€μ‹  클래슀 μ΄λ¦„μœΌλ‘œ μ •μ μœΌλ‘œ νƒ€μž…μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Rectangle *thisObject;

정적 타이핑(Static Typing): λ³€μˆ˜μ— νŠΉμ • 클래슀 νƒ€μž…μ„ μ§€μ •ν•˜μ—¬ μ»΄νŒŒμΌλŸ¬κ°€ νƒ€μž… 검사λ₯Ό ν•  수 있게 ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.

이 경우 μ»΄νŒŒμΌλŸ¬λŠ” μ„ μ–Έλœ λ³€μˆ˜μ˜ 값을 선언에 λͺ…λͺ…λœ 클래슀의 μΈμŠ€ν„΄μŠ€μ΄κ±°λ‚˜ κ·Έ ν΄λž˜μŠ€μ—μ„œ 상속받은 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ μ œν•œν•©λ‹ˆλ‹€. μœ„ μ˜ˆμ œμ—μ„œ thisObjectλŠ” 였직 μ–΄λ–€ μ’…λ₯˜λ“  Rectangle 객체만 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ κ°μ²΄λŠ” id νƒ€μž…μœΌλ‘œ μ„ μ–Έλœ 객체와 λ™μΌν•œ λ‚΄λΆ€ 데이터 ꡬ쑰λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. νƒ€μž…μ€ 객체에 영ν–₯을 μ£Όμ§€ μ•ŠμœΌλ©°, 단지 μ»΄νŒŒμΌλŸ¬μ— μ œκ³΅λ˜λŠ” 객체에 κ΄€ν•œ μ •λ³΄μ˜ μ–‘κ³Ό μ†ŒμŠ€ μ½”λ“œλ₯Ό μ½λŠ” μ‚¬λžŒλ“€μ΄ μ΄μš©ν•  수 μžˆλŠ” μ •λ³΄μ˜ μ–‘μ—λ§Œ 영ν–₯을 μ€λ‹ˆλ‹€.

정적 타이핑은 λŸ°νƒ€μž„μ— 객체가 μ²˜λ¦¬λ˜λŠ” 방식에도 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ κ°μ²΄λŠ” id νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 것과 λ™μΌν•œ 클래슀 λ©”μ„œλ“œλ‘œ λ™μ μœΌλ‘œ ν• λ‹Ήλ©λ‹ˆλ‹€. Squareκ°€ Rectangle의 ν•˜μœ„ 클래슀인 경우, λ‹€μŒ μ½”λ“œλŠ” μ—¬μ „νžˆ Rectangle 객체가 μ•„λ‹Œ Square 객체의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό κ°€μ§„ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€:

Rectangle *thisObject = [[Square alloc] init];

μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ 객체에 보내진 λ©”μ‹œμ§€λŠ” id둜 νƒ€μž…μ΄ μ§€μ •λœ 객체에 λŒ€ν•œ λ©”μ‹œμ§€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λ™μ μœΌλ‘œ λ°”μΈλ”©λ©λ‹ˆλ‹€. μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ μˆ˜μ‹ μžμ˜ μ •ν™•ν•œ νƒ€μž…μ€ μ—¬μ „νžˆ λ©”μ‹œμ§• ν”„λ‘œμ„ΈμŠ€μ˜ μΌλΆ€λ‘œ λŸ°νƒ€μž„μ— κ²°μ •λ©λ‹ˆλ‹€.

[thisObject display];

이 μ½”λ“œλŠ” Rectangle μƒμœ„ ν΄λž˜μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œκ°€ μ•„λ‹Œ Square ν΄λž˜μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œ 버전을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬μ— 객체에 κ΄€ν•œ 더 λ§Žμ€ 정보λ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨, 정적 타이핑은 id둜 νƒ€μž…μ΄ μ§€μ •λœ κ°μ²΄μ—λŠ” μ—†λŠ” κ°€λŠ₯성을 μ—΄μ–΄μ€λ‹ˆλ‹€:

  1. νŠΉμ • μƒν™©μ—μ„œ 컴파일 μ‹œκ°„ νƒ€μž… 체크λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.
  2. λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ„œλ“œκ°€ λ™μΌν•œ λ°˜ν™˜ 및 λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ κ°€μ Έμ•Ό ν•œλ‹€λŠ” μ œν•œμ—μ„œ 객체λ₯Ό 자유둭게 ν•©λ‹ˆλ‹€.
  3. 객체의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— 직접 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ ꡬ쑰체 포인터 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.

πŸ“Œ νƒ€μž… 체크(Type Checking)

정적 타이핑이 μ œκ³΅ν•˜λŠ” μΆ”κ°€ 정보λ₯Ό 톡해 μ»΄νŒŒμΌλŸ¬λŠ” 두 κ°€μ§€ μƒν™©μ—μ„œ 더 λ‚˜μ€ νƒ€μž… 체크 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  1. λ©”μ‹œμ§€κ°€ μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ μˆ˜μ‹ μžμ—κ²Œ λ³΄λ‚΄μ§ˆ λ•Œ, μ»΄νŒŒμΌλŸ¬λŠ” μˆ˜μ‹ μžκ°€ 응닡할 수 μžˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ‹ μžκ°€ λ©”μ‹œμ§€μ— λͺ…λͺ…λœ λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μ—†λŠ” 경우 κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  2. μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ 객체가 μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ λ³€μˆ˜μ— 할당될 λ•Œ, μ»΄νŒŒμΌλŸ¬λŠ” νƒ€μž…μ΄ ν˜Έν™˜λ˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. ν˜Έν™˜λ˜μ§€ μ•ŠμœΌλ©΄ κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€.

νƒ€μž… 체크(Type Checking): μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œμ˜ νƒ€μž… μ•ˆμ „μ„±μ„ κ²€μ‚¬ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

ν• λ‹Ήλ˜λŠ” 객체의 ν΄λž˜μŠ€κ°€ 할당을 λ°›λŠ” λ³€μˆ˜μ˜ ν΄λž˜μŠ€μ™€ λ™μΌν•˜κ±°λ‚˜ κ·Έ ν΄λž˜μŠ€μ—μ„œ 상속받은 경우 κ²½κ³  없이 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ μ˜ˆμ œκ°€ 이λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€:

Shape     *aShape;
Rectangle *aRect;
 
aRect = [[Rectangle alloc] init];
aShape = aRect;

μ—¬κΈ°μ„œ aRectλŠ” aShape에 할당될 수 μžˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ μ‚¬κ°ν˜•μ€ μΌμ’…μ˜ λ„ν˜•μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ - Rectangle ν΄λž˜μŠ€λŠ” Shapeμ—μ„œ μƒμ†λ°›μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 두 λ³€μˆ˜μ˜ 역할이 λ’€λ°”λ€Œκ³  aShapeκ°€ aRect에 ν• λ‹Ήλ˜λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” κ²½κ³ λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€; λͺ¨λ“  λ„ν˜•μ΄ μ‚¬κ°ν˜•μΈ 것은 μ•„λ‹™λ‹ˆλ‹€.

ν• λ‹Ή μ—°μ‚°μžμ˜ μ–‘μͺ½ ν‘œν˜„μ‹ 쀑 ν•˜λ‚˜κ°€ id νƒ€μž…μΈ κ²½μš°μ—λŠ” 검사가 μ—†μŠ΅λ‹ˆλ‹€. μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ κ°μ²΄λŠ” id 객체에 자유둭게 할당될 수 있으며, id 객체도 μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ 객체에 할당될 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ λ°˜ν™˜ 및 λ§€κ°œλ³€μˆ˜ νƒ€μž…(Return and Parameter Types)

일반적으둜 λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ λ™μΌν•œ μ…€λ ‰ν„°(λ™μΌν•œ 이름)λ₯Ό κ°€μ§„ λ©”μ„œλ“œλŠ” λ™μΌν•œ λ°˜ν™˜ 및 λ§€κ°œλ³€μˆ˜ νƒ€μž…λ„ κ³΅μœ ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 μ œμ•½μ€ 동적 바인딩을 ν—ˆμš©ν•˜κΈ° μœ„ν•΄ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λΆ€κ³Όλ©λ‹ˆλ‹€.

λ©”μ‹œμ§€ μˆ˜μ‹ μžμ˜ 클래슀(그리고 λ”°λΌμ„œ μˆ˜ν–‰ν•˜λ„λ‘ μš”μ²­λœ λ©”μ„œλ“œμ— κ΄€ν•œ ν΄λž˜μŠ€λ³„ μ„ΈλΆ€ 정보)λŠ” 컴파일 μ‹œκ°„μ— μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ—, μ»΄νŒŒμΌλŸ¬λŠ” λ™μΌν•œ 이름을 κ°€μ§„ λͺ¨λ“  λ©”μ„œλ“œλ₯Ό λ™μΌν•˜κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€. λŸ°νƒ€μž„ μ‹œμŠ€ν…œμ— λŒ€ν•œ λ©”μ„œλ“œ λ°˜ν™˜ 및 λ§€κ°œλ³€μˆ˜ νƒ€μž…μ— κ΄€ν•œ 정보λ₯Ό μ€€λΉ„ν•  λ•Œ, 각 λ©”μ„œλ“œ 셀렉터에 λŒ€ν•΄ ν•˜λ‚˜μ˜ λ©”μ„œλ“œ μ„€λͺ…λ§Œ μƒμ„±ν•©λ‹ˆλ‹€.

λ©”μ„œλ“œ μ…€λ ‰ν„°(Method Selector): λ©”μ„œλ“œμ˜ 이름을 λ‚˜νƒ€λ‚΄λŠ” μ‹λ³„μžλ‘œ, λ©”μ‹œμ§€μ—μ„œ μ–΄λ–€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• μ§€ μ§€μ •ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ©”μ‹œμ§€κ°€ μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ 객체에 λ³΄λ‚΄μ§ˆ λ•Œ, μˆ˜μ‹ μžμ˜ ν΄λž˜μŠ€λŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μ•Œλ €μ§‘λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” λ©”μ„œλ“œμ— κ΄€ν•œ ν΄λž˜μŠ€λ³„ 정보에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ©”μ‹œμ§€λŠ” λ°˜ν™˜ 및 λ§€κ°œλ³€μˆ˜ νƒ€μž…μ— λŒ€ν•œ μ œν•œμ—μ„œ μžμœ λ‘­μŠ΅λ‹ˆλ‹€.

πŸ“Œ μƒμ†λœ 클래슀둜의 정적 타이핑(Static Typing to an Inherited Class)

μΈμŠ€ν„΄μŠ€λŠ” μžμ‹ μ˜ ν΄λž˜μŠ€λ‚˜ 상속받은 클래슀둜 μ •μ μœΌλ‘œ νƒ€μž…μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λͺ¨λ“  μΈμŠ€ν„΄μŠ€λŠ” NSObject둜 정적 νƒ€μž…μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ»΄νŒŒμΌλŸ¬λŠ” μ •μ μœΌλ‘œ νƒ€μž…μ΄ μ§€μ •λœ 객체의 클래슀λ₯Ό νƒ€μž… 지정에 μžˆλŠ” 클래슀 μ΄λ¦„μ—μ„œλ§Œ μ΄ν•΄ν•˜κ³ , 그에 따라 νƒ€μž… 체크λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μΈμŠ€ν„΄μŠ€μ— μƒμ†λœ 클래슀둜 νƒ€μž…μ„ μ§€μ •ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ λŸ°νƒ€μž„μ— λ°œμƒν•  것이라고 μƒκ°ν•˜λŠ” 것과 μ‹€μ œλ‘œ λ°œμƒν•˜λŠ” 것 사이에 λΆˆμΌμΉ˜κ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, Rectangle μΈμŠ€ν„΄μŠ€λ₯Ό λ‹€μŒκ³Ό 같이 Shape둜 정적 νƒ€μž…μ„ μ§€μ •ν•˜λ©΄:

Shape *myRectangle = [[Rectangle alloc] init];

μ»΄νŒŒμΌλŸ¬λŠ” 이λ₯Ό Shape μΈμŠ€ν„΄μŠ€λ‘œ μ·¨κΈ‰ν•©λ‹ˆλ‹€. 객체에 Rectangle λ©”μ„œλ“œλ₯Ό μˆ˜ν–‰ν•˜λΌλŠ” λ©”μ‹œμ§€λ₯Ό 보내면:

BOOL solid = [myRectangle isFilled];

μ»΄νŒŒμΌλŸ¬λŠ” λΆˆν‰ν•©λ‹ˆλ‹€. isFilled λ©”μ„œλ“œλŠ” Rectangle ν΄λž˜μŠ€μ— μ •μ˜λ˜μ–΄ 있고, Shapeμ—λŠ” μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ Shape ν΄λž˜μŠ€κ°€ μ•Œκ³  μžˆλŠ” λ©”μ„œλ“œλ₯Ό μˆ˜ν–‰ν•˜λΌλŠ” λ©”μ‹œμ§€λ₯Ό 보내면:

[myRectangle display];

Rectangle이 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜λ”λΌλ„ μ»΄νŒŒμΌλŸ¬λŠ” λΆˆν‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŸ°νƒ€μž„μ—λŠ” Rectangle λ²„μ „μ˜ λ©”μ„œλ“œκ°€ μˆ˜ν–‰λ©λ‹ˆλ‹€.

λΉ„μŠ·ν•˜κ²Œ, Upper ν΄λž˜μŠ€κ°€ double을 λ°˜ν™˜ν•˜λŠ” worry λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜κ³ :

- (double)worry;

Upper의 ν•˜μœ„ 클래슀인 Middle이 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•˜κ³  μƒˆλ‘œμš΄ λ°˜ν™˜ νƒ€μž…μ„ μ„ μ–Έν•œλ‹€κ³  κ°€μ •ν•΄ λ΄…μ‹œλ‹€:

- (int)worry;

μΈμŠ€ν„΄μŠ€κ°€ Upper 클래슀둜 정적 νƒ€μž…μ΄ μ§€μ •λ˜λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” worry λ©”μ„œλ“œκ°€ double을 λ°˜ν™˜ν•œλ‹€κ³  μƒκ°ν•˜κ³ , μΈμŠ€ν„΄μŠ€κ°€ Middle 클래슀둜 νƒ€μž…μ΄ μ§€μ •λ˜λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” worryκ°€ intλ₯Ό λ°˜ν™˜ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. Middle μΈμŠ€ν„΄μŠ€κ°€ Upper 클래슀둜 νƒ€μž…μ΄ μ§€μ •λ˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€: μ»΄νŒŒμΌλŸ¬λŠ” λŸ°νƒ€μž„ μ‹œμŠ€ν…œμ— 객체에 보내진 worry λ©”μ‹œμ§€κ°€ double을 λ°˜ν™˜ν•œλ‹€κ³  μ•Œλ¦¬μ§€λ§Œ, λŸ°νƒ€μž„μ—λŠ” μ‹€μ œλ‘œ intλ₯Ό λ°˜ν™˜ν•˜κ³  였λ₯˜λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

정적 타이핑은 λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ™μΌν•œ λ°˜ν™˜ 및 λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ κ°€μ Έμ•Ό ν•œλ‹€λŠ” μ œμ•½μ—μ„œ 자유둭게 ν•  수 μžˆμ§€λ§Œ, λ©”μ„œλ“œκ°€ 클래슀 κ³„μΈ΅μ˜ λ‹€λ₯Έ 뢄기에 μ„ μ–Έλœ κ²½μš°μ—λ§Œ μ‹ λ’°μ„± 있게 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

마무리

Objective-C의 정적 타이핑은 μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚€κ³  컴파일 μ‹œκ°„μ— 더 λ§Žμ€ 였λ₯˜λ₯Ό μž‘μ„ 수 있게 ν•΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Objective-C의 본질적인 동적 νŠΉμ„±κ³Ό 정적 타이핑 μ‚¬μ΄μ˜ μƒν˜Έμž‘μš©μ„ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

정적 타이핑은 νƒ€μž… μ•ˆμ „μ„±μ„ μ œκ³΅ν•˜λŠ” λ™μ‹œμ—, λŸ°νƒ€μž„μ— μ‹€μ œλ‘œ μ–΄λ–€ λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ μ§€λŠ” μ—¬μ „νžˆ λ™μ μœΌλ‘œ κ²°μ •λ©λ‹ˆλ‹€.