μλ νμΈμ. μ΄λ²μλ 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λ‘ νμ μ΄ μ§μ λ κ°μ²΄μλ μλ κ°λ₯μ±μ μ΄μ΄μ€λλ€:
- νΉμ μν©μμ μ»΄νμΌ μκ° νμ 체ν¬λ₯Ό νμ©ν©λλ€.
- λμΌν μ΄λ¦μ λ©μλκ° λμΌν λ°ν λ° λ§€κ°λ³μ νμ μ κ°μ ΈμΌ νλ€λ μ νμμ κ°μ²΄λ₯Ό μμ λ‘κ² ν©λλ€.
- κ°μ²΄μ μΈμ€ν΄μ€ λ³μμ μ§μ μ κ·ΌνκΈ° μν΄ κ΅¬μ‘°μ²΄ ν¬μΈν° μ°μ°μλ₯Ό μ¬μ©ν μ μκ² ν©λλ€.
π νμ 체ν¬(Type Checking)
μ μ νμ΄νμ΄ μ 곡νλ μΆκ° μ 보λ₯Ό ν΅ν΄ μ»΄νμΌλ¬λ λ κ°μ§ μν©μμ λ λμ νμ μ²΄ν¬ μλΉμ€λ₯Ό μ 곡ν μ μμ΅λλ€:
- λ©μμ§κ° μ μ μΌλ‘ νμ μ΄ μ§μ λ μμ μμκ² λ³΄λ΄μ§ λ, μ»΄νμΌλ¬λ μμ μκ° μλ΅ν μ μλμ§ νμΈν μ μμ΅λλ€. μμ μκ° λ©μμ§μ λͺ λͺ λ λ©μλμ μ κ·Όν μ μλ κ²½μ° κ²½κ³ κ° λ°μν©λλ€.
- μ μ μΌλ‘ νμ μ΄ μ§μ λ κ°μ²΄κ° μ μ μΌλ‘ νμ μ΄ μ§μ λ λ³μμ ν λΉλ λ, μ»΄νμΌλ¬λ νμ μ΄ νΈνλλμ§ νμΈν©λλ€. νΈνλμ§ μμΌλ©΄ κ²½κ³ κ° λ°μν©λλ€.
νμ 체ν¬(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μ λ³Έμ§μ μΈ λμ νΉμ±κ³Ό μ μ νμ΄ν μ¬μ΄μ μνΈμμ©μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
μ μ νμ΄νμ νμ μμ μ±μ μ 곡νλ λμμ, λ°νμμ μ€μ λ‘ μ΄λ€ λ©μλκ° νΈμΆλ μ§λ μ¬μ ν λμ μΌλ‘ κ²°μ λ©λλ€.
'π₯ Bread Basics > Obj-c' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Obj-C 곡μ λ¬Έμ μ 리 - μ€λ λ©κ³Ό λκΈ°ν (0) | 2025.04.14 |
---|---|
Obj-C 곡μ λ¬Έμ μ 리 - μμΈ μ²λ¦¬ (1) | 2025.04.14 |
Obj-C 곡μ λ¬Έμ μ 리 - μ λ ν°(Selector) (0) | 2025.04.14 |
Obj-C 곡μ λ¬Έμ μ 리 - λΉ λ₯Έ μ΄κ±°(Fast Enumeration) (0) | 2025.04.14 |
Obj-C 곡μ λ¬Έμ μ 리 - μ°κ΄ μ°Έμ‘°(Associative References) (0) | 2025.04.14 |
Obj-C 곡μ λ¬Έμ μ 리 - Categoriesμ Extensions (0) | 2025.04.14 |
Obj-C 곡μ λ¬Έμ μ 리 - μ μΈλ νλ‘νΌν°(Declared Properties) (0) | 2025.04.14 |
Obj-C 곡μ λ¬Έμ μ 리 - νλ‘ν μ½ (0) | 2025.04.14 |