π κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° Object-Oriented Programming(OOP)
π κ°μ²΄λ
- νμ€μ μ‘΄μ¬νλ λ 립μ μ΄λ©΄μ νλλ‘ μ·¨κΈλλ μ¬λ¬Όμ΄λ κ°λ μ λ§νλ€.
- κ°μ²΄ μ§ν₯ μΈμ΄μμ κ°μ²΄μ κ°λ μ ν΄λμ€μ μν΄ λ©λͺ¨λ¦¬μ ν λΉλ κ²°κ³Όλ¬Ό(Object)μ΄λ€.
π κ°μ²΄μ ν λΉ
- newμ°μ°μμ μμ±μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ©΄,
heap λ©λͺ¨λ¦¬ 곡κ°μ μλ‘ λ€λ₯Έ μλ£νμ λ°μ΄ν°κ° μ°μμΌλ‘ λμ΄ ν λΉλ κ°μ²΄ 곡κ°μ΄ λ§λ€μ΄μ§λ€. μ΄κ²μ μΈμ€ν΄μ€Instance λΌκ³ νλ€.
π© new μ μν 1. μμ λ©λͺ¨λ¦¬ κ³΅κ° heapμ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό λ§λ λ€.
2. μμ±μλ₯Ό ν΅ν΄μ μ΄κΈ°ν μ²λ¦¬νλ€. (κΈ°λ³Έ μμ±μλ©΄ μ€λΉλ κΈ°λ³Έ κ°μΌλ‘ μ΄κΈ°κ° κΈ°λ‘ν¨)
=> μμ±λ μΈμ€ν΄μ€μ heap μ£Όμκ° λ νΌλ°μ€ λ³μ sμ κΈ°λ‘μ΄ λλ©΄μ
stack λ©λͺ¨λ¦¬μ μλ sκ° heapμ μλ μΈμ€ν΄μ€μ μ£Όμλ₯Ό μ°Έμ‘°νκ²λλ€.
ν΄λμ€
π- μλ£νμ΄ λ€λ₯Έ λ³μλ€μ μ°μ λμ΄ (ν΄λμ€μ λ©€λ² λ³μ)
- κ°μ²΄μ νΉμ±μ λν μ μλ₯Ό ν κ²μΌλ‘ μΊ‘μνλ₯Ό ν΅ν΄ κΈ°λ₯ ν¬ν¨ν κ°λ .
- μΈλΆμμ ν΄λμ€λ΄λΆμ νλμλ μ κ·Όνμ§ λͺ»νμ§λ§, λ©€λ²ν¨μμλ μ κ·Όκ°λ₯.
- μ¬λ¬Όμ΄λ κ°λ μ κ³΅ν΅ μμλ₯Ό μΆμννμ¬ μ μν¨. ex) μ νμ μ€κ³λ
π© ν΄λμ€ λ©€λ²
[μ κ·Όμ νμ] [μμ½μ΄] class ν΄λμ€λͺ {
//λ©€λ²λ³μ Field, new ν λ λ©λͺ¨λ¦¬μ μ°μμΌλ‘ ν λΉλλ λ³μ.
μλ£ν λ³μλͺ ;
μλ£ν λ³μλͺ ;
//μμ±μ Constructor [μ κ·Όμ νμ] μμ±μλͺ (){}
//λ©€λ² ν¨μ Method κΈ°λ₯μ μμ€μ
[μ κ·Όμ νμ] 리ν΄λͺ λ©μλλͺ (맀κ°λ³μ){
κΈ°λ₯μ μ
}
}
π© μλ°μμ λ§λ€ μ μλ λ€ κ°μ§ ν΄λμ€ νν
[μ κ·Όμ νμ] [μμ½μ΄] class ν΄λμ€λͺ {}
public class ν΄λμ€λͺ {...} //1
class ν΄λμ€λͺ {...} //2
public abstract class ν΄λμ€λͺ {...} //3
public final class ν΄λμ€λͺ {...} //4
1. κ°μ₯ μΌλ°μ μΈ νν
2. default class = package private class.
3. abstract = "λ―Έμμ±μ" μμμμ λΆλͺ¨μ μν μ μννλ€. νμ΄λ λͺ©μ μ΄ 'λΆλͺ¨'μ μν μ νκΈ° μν΄μλ€.
ν΄λμ€ λ΄ μΆμ λ©μλκ° μ μΈλμ΄ μλ μΆμ ν΄λμ€, λ°λμ νμμ΄ μμ±ν΄μΌνλ€
.
4. final μ’ λ¨ν΄λμ€ : λ μ΄μ νμμ λ§λ€μ§ λͺ»νλ ν΄λμ€ , ν΄λμ€μ κΈ°λ₯ νμ₯μ νμ§ λͺ»νκ² νλ €κ³ λ§λ ν΄λμ€, λ³κ²½λ μ μλ ν΄λμ€μ΄λ€. => finalκ³Ό abstract λ μμ½μ΄λ₯Ό λμμ μ¬μ©ν μ μλ€.μμ λΆκ°μΈ final, λ°λμ μμν΄μΌνλ abstract, λ°λμ κ°λ μ κ°μ§κ³ μκΈ° λλ¬Έμ΄λ€.
π© ν΄λμ€ νλ
public class ν΄λμ€λͺ { μ κ·Όμ νμ [μμ½μ΄] μλ£ν λ³μλͺ [=μ΄κΈ°κ°]; }
- ν΄λμ€ νλ λ€ κ°μ§ μ κ·Ό μ νμ 1. public + : μ μ²΄κ³΅κ° 2. protected # : μμμ΄ μλμμ λλ default μ κ°λ€. ν¨ν€μ§ μμ μλ ν΄λμ€λ§ μ κ·Όν μ μλ€. μμμ΄ λμμ λλ μμλ νμ λ΄λΆμμλ§ λΆλͺ¨μ κ²μ μΈ μ μλ€. 3. default ~ : package privateμΌλ‘λ λΆλ¦°λ€.μλ΅ν μ μλ€. 4. private - : ν΄λΉ ν΄λμ€ λ΄λΆμμλ§ μ¬μ©κ°λ₯νλ€. (μΊ‘μνμ μμΉ)
- static : κ°μ νμ μ μ¬λ¬ κ°μ²΄κ° 곡μ ν λͺ©μ μ νλμ μ¬μ©νλ©°, νλ‘κ·Έλ¨ μμμ μ μ λ©λͺ¨λ¦¬ μμμ μλ ν λΉλλ€.
- final : νλμ κ°λ§ κ³μ μ μ₯ν΄μΌνλ λ³μμ μ¬μ©νλ€. λ©μλ μμ μ§μλ³μμλ final μ¬μ©κ°λ₯νλ€.
ν΄λμ€ νλ μμ½μ΄
=> static + final = κ°μ λ³κ²½ν μ μλ μμ μ μλ―Έλ€. λ³μμμ ꡬλΆμ μν΄ λλ¬Έμλ‘ μ μΈνλ€.
π© ν΄λμ€ μ΄κΈ°ν λΈλ
- ν΄λμ€ λ³μJVM κΈ°λ³Έκ° -> λͺ μμ μ΄κΈ°κ° -> ν΄λμ€ μ΄κΈ°ν λΈλ‘ μ΄κΈ°κ°
- μΈμ€ν΄μ€ λΈλ‘JVM κΈ°λ³Έκ° -> λͺ μμ μ΄κΈ°κ° -> μΈμ€ν΄μ€ μ΄κΈ°ν λΈλ‘ μ΄κΈ°κ° -> μμ±μλ₯Ό ν΅ν μ΄κΈ°κ°
μ΄κΈ°ν μμ
κ°μ²΄ μ§ν₯ classμ ν΅μ¬? μλ£νμ΄ λ€λ₯Έ λ³μλ€μ λ¬Άμμ private(-)νκ² λ³΄κ΄νλ€
π©.
=> μΈλΆμμ μ κ·Όνμ§ λͺ»νκ² μΊ‘μν νλ κ³Όμ μ΄ λ³μλ€μ λν΄ μ°μ°μ²λ¦¬(λ©μλ)λ±μ ν΄μΌνλ κΈ°λ₯λ€μ΄ μΈλΆμ μ‘΄μ¬νκ² λλ©΄ ν΄λμ€ μμ λ©€λ²μ μ κ·Όν μ μκΈ° λλ¬Έμ ν΄λΉ κΈ°λ₯λ€μ ν΄λμ€ μμΌλ‘ μ§μ΄λ£μ΄μ μ²λ¦¬νλ€.
ν΄λμ€ μμ±κ³Όμ (μ°Έμ‘° μλ£ν)
μΆμν
π- μ μ°μ±μ ν보νκΈ° μν΄ κ΅¬μ²΄μ μΈ κ²μ μ κ±°νλ€λ μλ―Έ
- νλ‘κ·Έλ¨μμ νμν 곡ν΅μ μ μΆμΆνκ³ , λΆνμν 곡ν΅μ μ μ κ±°νλ κ³Όμ
=> νλ‘κ·Έλ¨μ λ§λ€λ €λ©΄ νμν dataλ€μ΄ μλλ° κ·Έκ² μ΄λ€ κ²μΈμ§ μΆμΆνλ κ³Όμ
ex) κ΅κ°μμ κ΅λ―Ό μ 보 κ΄λ¦¬μ© νλ‘κ·Έλ¨μ λ§λ€λ €κ³ ν λ, νλ‘κ·Έλ¨μμ μꡬλλ "κ΅λ―Ό ν μ¬λ"μ μ 보λ₯Ό μΆμν νλ€λ©΄? κ΅λ―Ό ν μ¬λ'λΉ' νμν μ 보 : μ΄λ¦, μ£Όμ, μ±λ³, μ νλ²νΈ, λμ΄, μ£Όλ―Όλ²νΈ => μΆμνν΄μΌν dataλ€.
- μΆμνν κ²°κ³Όλ¬Όμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ¬μ©ν΄μ λ³μλͺ (λ°μ΄ν° μ΄λ¦)κ³Ό μλ£ν(λ°μ΄ν° νμ )μ μ 리ν¨. -> κ·Έ λ€μ μ 리ν λ΄μ©μ λ€μ΄μ΄κ·Έλ¨μΌλ‘ νννλ€
DB λͺ¨λΈλ§ κ³Όμ .
=> μΆμΆλ dataλ€μ κ°μ μ’ λ₯μ© μ 리νλ
κ°μ²΄ μ§ν₯μ 3λ μμΉ
π1. μΊ‘μν : ν΄λμ€μ λ©€λ²λ³μλ λ°λμ privateμ²λ¦¬νλ€.
- μΆμνλ₯Ό ν΅ν΄ μ 리λ λ°μ΄ν°λ€κ³Ό κΈ°λ₯μ νλλ‘ λ¬Άμ΄ κ΄λ¦¬νλ κΈ°λ²μ λ§νλ€. ν΄λμ€μ κ°μ₯ μ€μν λͺ©μ μΈ λ°μ΄ν°μ μ κ·Όμ νμ μμΉμΌλ‘ νμ¬ ν΄λμ€ μΈλΆμμ λ°μ΄ν°μ μ§μ μ κ·Όμ λ§κ³ , λμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ ν¨μλ€μ ν΄λμ€ λ΄λΆμ μμ±νλ λ°©λ²μ μΊ‘μνλΌκ³ νλ€.
- μΊ‘μνμ μμΉ ν΄λμ€μ λ©€λ² λ³μμ λν μ κ·ΌκΆνμ privateμ μμΉμΌλ‘ νλ€. ν΄λμ€μ λ©€λ² λ³μμ λν μ°μ°μ²λ¦¬λ₯Ό λͺ©μ μΌλ‘νλ ν¨μλ€μ ν΄λμ€ λ΄λΆμ μμ±νλ€. λ©€λ² ν¨μλ ν΄λμ€ λ°μμ μ κ·Όν μ μλλ‘ publicμΌλ‘ μ€μ νλ€.
2. μμ : μμ€μ½λ μ€λ³΅μ μ€μ΄κΈ° μν λ°©λ²λ‘ .
- λ€λ₯Έ ν΄λμ€κ° κ°μ§κ³ μλ λ©€λ²(νλμ λ©μλ)λ€μ μλ‘ μμ±ν ν΄λμ€μμ μ§μ λ§λ€μ§ μκ³ , μμμ λ°μμΌλ‘μ¨ μ ν΄λμ€κ° μμ μ λ©€λ²μ²λΌ μ¬μ©ν μ μλ κΈ°λ₯, ν΄λμ€λ₯Ό μ¬μ¬μ©νκΈ° μν΄ μ¬μ©νλ©° μ¬λ¬ νλ‘μ νΈμ κ°μ κΈ°λ₯μ ν΄λμ€κ° νμν κ²½μ°μλ μμμ μ¬μ©νλ€.
- λ³΄λ€ μ μ μμ μ½λλ‘ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν μ μκ³ , μ½λλ₯Ό 곡ν΅μ μΌλ‘ κ΄λ¦¬νκΈ° λλ¬Έμ μ½λμ μΆκ° λ° λ³κ²½μ΄ μ©μ΄νλ€. => μ½λμ μ€λ³΅μ μ κ±°νμ¬ νλ‘κ·Έλ¨μ μμ°μ±κ³Ό μ μ§λ³΄μκ° μ’μμ§λ€.
3. λ€νμ± : μμμ μ΄μ©ν΄ λ€μν νμ ( = λ€μν ν΄λμ€) 'μλ‘ λ€λ₯Έ νν'λ₯Ό μ§μΉνλ λ§λ‘ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ 3λ νΉμ§ μ€ νλμ΄λ©°, νλμ νλμΌλ‘ μ¬λ¬κ°μ§ μΌμ μννλ κ°λ μ΄λ€. μμμ μ΄μ©ν κΈ°μ λ‘, λΆλͺ¨ νμ μΌλ‘λΆν° νμλ μ¬λ¬ κ°μ§ νμ μ νλμ νμ μΈ κ² μ²λΌ μ²λ¦¬ν μ μλ€.
- μ¬λ¬ μ’ λ₯μ ν΄λμ€λ₯Ό ν κ°μ§ νμ μΌλ‘ ν΄κ²°νλ κΈ°μ .
- λΆλͺ¨ ν΄λμ€κ° νμ ν΄λμ€μ λ νΌλ°μ€ μ 보λ₯Ό λ°μ μ μμ.
- λΆλͺ¨μ λ°μ΄ν° νμ μΌλ‘ 맀κ°λ³μλ₯Ό μ μΈνλ©΄ λ©μλμ μ€λ²λ‘λ©μ μ€μΌ μ μμ
- ν΄λμ€ μμμ κ°μ λ©μλ μ΄λ¦μ μ€λ³΅μμ±ν΄μΌν κ²½μ°, λ€νμ± μ΄μ©.
ν΄λμ€ νλ³ν up casting (μμ κ²μμ λ§μ κ²μΌλ‘ νμ₯) μμ κ΄κ³μ μλ λΆλͺ¨, μμ ν΄λμ€ κ°μ λΆλͺ¨νμ μ λ νΌλ°μ€κ° λͺ¨λ νμ νμ μ κ°μ²΄μ μ£Όμλ₯Ό λ°μ μ μλ€.
π//Sonata ν΄λμ€κ° Car ν΄λμ€μ νμμ Car c = new Sonata(); Sonata ν΄λμ€ν -> Car ν΄λμ€ νμΌλ‘ λ°λ
ν΄λμ€ νλ³ν down casting (λ§μ κ²μμ μμ κ²μΌλ‘ μΆμ) νμ κ°μ²΄μ μ£Όμλ₯Ό λ°μ λΆλͺ¨ λ νΌλ°μ€λ₯Ό κ°μ§κ³ νμμ λ©€λ²λ₯Ό μ°Έμ‘°ν΄μΌν κ²½μ°μλ, νμ ν΄λμ€ νμ μΌλ‘ λ νΌλ°μ€λ₯Ό νλ³νν΄μΌνλ€. μ΄ λ λΆλͺ¨ ν΄λμ€ νμ μ νμ ν΄λμ€ νμ μΌλ‘ λ°κΎΈλ κ²μ down casting μ΄λΌκ³ νλ©°, μλμΌλ‘ μ²λ¦¬λμ§ μκΈ° λλ¬Έμ λ°λμ νμ νμ μ λͺ μν΄μ νλ³νν΄μΌνλ€. κ°μ²΄λ μμμ΄ λμ§ μλλ€. (ν΄λμ€μ κ°μ²΄μ μ°¨μ΄)
π//Sonata ν΄λμ€κ° Car ν΄λμ€μ νμμ Car c = new Sonata(); (Car)c.moveSonata();
(( μ£Όμ )) κ°μ μΈ΅μμ κ°μ²΄λΌλ¦¬λ μ , λ€μ΄ μΊμ€ν μ ν μ μλ€.
- μ λ€μ΄μΊμ€ν μ°Έκ³
instanceof μ°μ°μ
π©μ£Όλ‘ down casting ν λ, νμ¬ λ νΌλ°μ€κ° μ΄λ€ ν΄λμ€νμ κ°μ²΄ μ£Όμλ₯Ό μ°Έμ‘°νκ³ μλμ§ νμΈμ΄ νμν λ μ¬μ©ν¨.
if(λ νΌλ°μ€ instanceof ν΄λμ€ νμ ){
μ°ΈμΌ λ μ²λ¦¬ν λ΄μ©
//ν΄λΉ ν΄λμ€ νμ μΌλ‘ down casting
}
'μ΄λ‘ > Study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ°Έμ‘°μλ£ν reference data type (0) | 2021.07.19 |
---|---|
μμ±μ Constructor (0) | 2021.07.19 |
κ°μ²΄ μ§ν₯ μΈμ΄μ λ©λͺ¨λ¦¬ ꡬ쑰μ νΉμ§ OOP Memory (0) | 2021.07.15 |
[JAVA] κ°μ²΄μ§ν₯ 5λμμΉ / POJO JAVA (0) | 2021.06.03 |
[JAVA] κ°μ²΄μ§ν₯μμμ 물리 κ°μ²΄μ κ°λ κ°μ²΄ / μμ§λμ κ²°ν©λ (0) | 2021.06.03 |