π [Python] αα ’α¨αα ¦(Object) αα ΅αα ’αα ‘αα ΅
on
λ€μ΄κ°λ©°
ν΄λμ€μ κ°μ²΄μ κ°λ
1. Class λΌλ κ²μ μλ‘μ΄ λ°μ΄ν° νμ μ΄λ€
μ¬μ©μκ° μ μν λ°μ΄ν° νμ μΌλ‘ λ³μλ₯Ό μ ν ν, new μ°μ°μ, μμ±μλ₯Ό μ΄μ©ν΄ λ©λͺ¨λ¦¬λ₯Ό λ§λ λ€. (λ©λͺ¨λ¦¬μ μμ±: λ°μ΄ν° νμ μ ν΄λΉνλ λ§νΌμ λ©λͺ¨λ¦¬λ₯Ό ν보νλ μΌ)
2. μλ‘μ΄ ν΄λμ€λ₯Ό νλ λ§λλ κ²
μλ‘μ΄ ν΄λμ€λ₯Ό νλ λ§λλ κ²μ λ€μκ³Ό κ°μ λ§λ‘ λμΉκ° κ°λ₯νλ€.
-
μλ‘μ΄ λ°μ΄ν° νμ μ λ§λλ κ²
-
μ΄ νμ μΌλ‘ λ³μλ₯Ό μ μΈ/νμ© ν μ μλ€.
μ΄λ ν΄λμ€λ₯Ό μ΄μ©ν λ³μλ₯Ό κ°μ²΄ λλ κ°μ²΄ λ³μλΌκ³ νλ€. (λ¨, κ°μ²΄, κ°μ²΄ λ³μλ κΈ°λ³Έ λ°μ΄ν° λ³μμ λ€λ₯΄λ€. κ°μ²΄ λ³μ μ μΈ ν λ©λͺ¨λ¦¬λ₯Ό μμ±ν΄μ€μΌ μμ ν κ°μ²΄κ° λλ€.)
Top t = new Top();
λ©λͺ¨λ¦¬ μμ±
μλ° μΈμ΄μμλ μ£Όμλ₯Ό λ°λ‘ μ£Όμ§ μλλ€.
ν΄λμ€λ‘ λ§λ λ°μ΄ν° νμ μΌλ‘ λ³μμ λ©λͺ¨λ¦¬λ₯Ό μμ± νμ λ μ£Όμλ₯Ό μ°Ύμ보기λ νλ€λ€. μλ°μμλ κ°μ²΄μ μ£Όμ λμ μ°Έμ‘°κ°μ΄λΌλ κ²μ ν λΉ λ°κ² λλ€. κ·Έλ κΈ° λλ¬Έμ μλ°μμλ κ°μ²΄ λ³μ(Reference Variable)λ₯Ό μ°Έμ‘° λ³μλΌκ³ λ§νλ€.
// 1. ν΄λμ€ μ μΈ
public class Sun{
public int distance;
public int data;
}
// 2. κ°μ²΄ λ³μ μ μΈ: λ©λͺ¨λ¦¬ μμ±μ μ΄λ―λ‘ μ΄κΈ°ν
Sun s1 = null;
Sun s2 = null;
// 3. κ°μ²΄ λ³μμ λν λ©λͺ¨λ¦¬ μμ±
s1 = new Sun();
s2 = new Sun();
μμ κ°μ΄ λ©λͺ¨λ¦¬κ° μμ±λλ©΄ λ΄λΆμ μΈλ±μ€ ν
μ΄λΈμμ μ£Όμ 맀ν ν μ°Έμ‘°κ°μ λ§λ€κ³ μ°Έμ‘°κ°μ μ°Έμ‘° λ³μ s1
, s2
μ ν λΉ λ©λλ€.
μ°Έμ‘°λ³μμ νΉμ§
- μ°Έμ‘°κ°(Reference Value): μ°Έμ‘°κ°μ΄λ κ°μ²΄μ λ©λͺ¨λ¦¬λ₯Ό μμ± νμ λ, λ©λͺ¨λ¦¬μ μ°κ²°λ μ μΌν μ«μκ°μ λ§νλ€. μ΄ μ«μκ°μ μ°Έμ‘° λ³μκ° λ°μΌλ©°, μ΄ μ°Έμ‘°κ°μ κ°μ§κ³ μμΌλ©΄ κ°μ²΄λ₯Ό νΈλ€λ§ ν μ μλ€. μ°Έμ‘°κ°μΌλ‘ μμ νλ©΄ λ΄λΆμμ μ°Έμ‘°κ°μ μ°κ²°λ λ©λͺ¨λ¦¬λ‘ μμ νλ κ²κ³Ό κ°μ ν¨κ³Όκ° μλ€.
**μ°Έμ‘° νμ κ³μ° λ°©μ **(reference counting)
μ°Έμ‘° νμ κ³μ° λ°©μ(reference counting)μ λ©λͺ¨λ¦¬λ₯Ό μ μ΄νλ λ°©λ² μ€ νλλ‘, μ°λ κΈ° μμ§μ ν λ°©μμ΄λ€. κ΅¬μ± λ°©μμ λ¨μνλ€. μ΄λ€ ν λμ λ¨μ(κ°μ²΄, Object)κ° μ°Έμ‘°κ°μ κ°μ§κ³ μ΄ λ¨μ κ°μ²΄κ° μ°Έμ‘°(μ°Έμ‘° 볡μ¬)λλ©΄ μ°Έμ‘°κ°μ λλ¦¬κ³ μ°Έμ‘°ν λ€μ λμ΄μ μ¬μ©νμ§ μκ² λλ©΄ μ°Έμ‘°κ°μ μ€μ΄λ©΄ λλ€. λ³΄ν΅ μ°Έμ‘°κ°μ΄ 0μ΄ λλ©΄ λμ΄μ μ ν¨ν λ¨μ κ°μ²΄λ‘ λ³΄μ§ μμ λ©λͺ¨λ¦¬μμ μ κ±°νλ€.
μΆμ²: μ°Έμ‘° νμ κ³μ° λ°©μ - μν€λ°±κ³Ό, μ°λ¦¬ λͺ¨λμ λ°±κ³Όμ¬μ
μ¬μ μ μ€λͺ λ³΄λ€ μ½κ² μ€λͺ νλ©΄ κ°λΉμ§ μ½λ μ (Garbage Collection)μ΄λ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©λ² μ€ νλλ‘, νλ‘κ·Έλλ¨Έκ° λμ μΌλ‘ ν λΉν λ©λͺ¨λ¦¬ μμ μ€ λ μ΄μ μ°μ΄μ§ μλ μμμ μλμΌλ‘ μ°Ύμλ΄μ΄ ν΄μ νλ κΈ°λ₯μ΄λ€.
μ°Έμ‘° νμ κ³μ° λ°©λ²μ μ΄λ¬ν κ°λΉμ§ μ½λ μ μ ν κ°μ§ λ°©μμΌλ‘ μ΄λ€ κ°μ²΄κ° μ°Έμ‘°κ°μ κ°μ§λ©°, κ°μ²΄κ° μ°Έμ‘°λλ©΄ μ°Έμ‘°κ°μ λλ¦¬κ³ , λ μ΄μ μ¬μ©νμ§ μμΌλ©΄ μ°Έμ‘°κ°μ μ€μ λλ€. λ³΄ν΅ μ°Έμ‘°κ°μ΄ 0μ΄ λλ©΄ λ μ΄μ μ ν¨ν κ°μ²΄λ‘ κ°μ£Όνμ§ μμ λ©λͺ¨λ¦¬μμ μ κ±°νκ² λ©λλ€.
Call by reference vs. Call by Value
νμ΄μ¬μμλ κ°μ²΄μ μ’
λ₯μ λ€λΌμ Call by reference λλ Call by Valueκ° κ²°μ λ©λλ€. str
, int
κ³Ό κ°μ λΆλ³ κ°μ²΄ μΌ κ²½μ° call by valueμ μν΄μ κ΄λ¦¬ λκ³ , list',
dict
κ³Ό κ°μ λ³μ΄ κ°μ²΄μμλ object refereceλ‘ κ΄λ¦¬ λ©λλ€.
νμ΄μ¬μ κ°μ²΄ ꡬ쑰
νμ΄μ¬μ μ μ μ΄ μλ λμ νμ μ΄λ€.
μ΄κ²μ νλ‘κ·Έλ¨ μ€ν μ, μΈν°ν리ν°λ μ μλ λ³μμ μ νμ μκ³ μμ§ μλ€λκ²μ μλ―Έν©λλ€. Cλ³μμ νμ΄μ¬ λ³μμ μ°¨μ΄λ μλ κ·Έλ¦ΌμΌλ‘ μμ½ λ©λλ€. C μΈμ΄ λ³μμ κ²½μ°, μ»΄νμΌλ¬λ λ¨μ§ κ·Έ μ μλ§μΌλ‘λ λ³μμ μ νμ μκ³ μμ΅λλ€.
νμ§λ§, νμ΄μ¬μμλ λ³μλ₯Ό μ μΈ ν λ μ΄λ ν λ³μ νμ μΈμ§ λͺ μνμ§ μκ³ λν λ³μμλ λ€μν μλ£νμ ν λΉ ν μ μμ΅λλ€. λ€μμ μ€λͺ νκ² μ§λ§ μ΄λ¬ν λμ νμ΄νμ΄ κ°λ₯ν μ΄μ λ νμ΄μ¬μμμ λ³μ ν λΉμ κ°μ²΄λ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ λλ€. (λ³μμ κ°μ ν λΉνλ€λ νν 보λ€λ κ°μ²΄μ λ³μ μ΄λ¦μ λΌλ²¨λ§(Labeling)νλ€λ ννμ΄ λ μ΄ν΄νκΈ° μ¬μ΄ νν μ λλ€. )
C μ»΄νμΌλ¬λ μμν λλΆν° aμ bλ μ μνμ΄λΌλ κ²μ μκ³ μμ§λ§, λ¨μν μ΄λ€κ²λ ν μ μμ΅λλ€. μ μνμ μλκ²μΌλ‘λ λ©λͺ¨λ¦¬ μμ λ¨μν κ°μ λ κ°μ μ μλ₯Ό λνκ³ , μ΄λ₯Ό λ€λ₯Έ μ μλ‘ λ°ννλ 루ν΄μ νΈμΆν μ μμ΅λλ€. κ°λ΅μ μΈ λμμΌλ‘ λνλ΄λ©΄ μ΄λ²€νΈμ μμλ λ€μκ³Ό κ°μ΅λλ€.
C λ§μ
Cμμ λ€μμ μμ±νλ κ²½μ°:
/* C code */
int a = 1;
int b = 2;
int c = a + b;
κ³μ°κ³Όμ :
-
1μ aμ ν λΉ -
2μ bμ ν λΉ - binary_add<int, int>(a,b) νΈμΆ
- κ²°κ³Όλ₯Ό cμ ν λΉ
Python λ§μ
νμ΄μ¬μμμ κ°μ μν μ μ½λλ μλμ κ°μ΅λλ€.
# python code
a = 1
b = 2
c = a + b
κ³μ°κ³Όμ :
a
μ 1μ ν λΉa
->PyObject_HEAD
-> typecode μ μ μ€μ a
->val=1
μ€μ
b
μ 2λ₯Ό ν λΉb
->PyObject_HEAD
-> typecode μ μ μ€μ b
->val=2
μ€μ
- binary_add(a,b) νΈμΆ
a
->PyObject_HEAD
μμ typecode μ°ΎκΈ°a
λ μ μν; κ°a->val
b
->PyObject_HEAD μμ typecode μ°ΎκΈ°b
λ μ μν; κ°b->val
binary_add<int, int>(a->val, b->val)
νΈμΆ- μ μν κ²°κ³Όκ° result
- νμ΄μ¬ κ°μ²΄
c
μμ±c
->PyObject_HEAD
->typecode μ μ μ€μ c
->val
μ result μ€μ
λμ νμ΄νμ μ μ νμ΄νμ λΉν΄ λ λ§μ λ¨κ³λ₯Ό ν¬ν¨ν©λλ€. μ΄λ¬ν μ΄μ λλ¬Έμ νμ΄μ¬μ΄ Cλ³΄λ€ λλ¦° μ΄μ μ΄κΈ°λ ν©λλ€.