[Java] OOP ν΄λμ€μ κ°μ²΄
μλ νμΈμ λ°±μλκ°λ°μ νλ―Όμ μ λλ€.
μ€λμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ λν΄μ μ€λͺ νλ €κ³ ν©λλ€ ~~~π°
βπ» κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP, Object Oriented Programming) μ΄λ?
μ»΄ν¨ν° νλ‘κ·Έλ¨μ κ°μ²΄λΌλ κΈ°λ³Έ λ¨μλ‘ λλκ³ κ° κ°μ²΄κ° λ©μμ§λ₯Ό μ£Όκ³ λ°μ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λΉμ μ°¨μ νλ‘κ·Έλλ°μ λλ€.
μ¦, νμν λ°μ΄ν°λ₯Ό ν λ° λͺ¨μ μΆμνμμΌ μνμ νμλ₯Ό κ°μ§ κ°μ²΄λ₯Ό λ§λ€κ³ κ·Έ κ°μ²΄ κ° μ κΈ°μ μνΈμμ©νλ κ²μΌλ‘
μ€μ μ¬λ¬Όμ μμ±κ³Ό κΈ°λ₯μ λΆμν νμ νλ‘κ·Έλλ° λ³μμ ν¨μλ‘ μ μνλ©° μ€ μΈκ³λ₯Ό λ°μν©λλ€.
μ΄λ μ μ°νκ³ λ³κ²½μ΄ μ½μ΅λλ€.
κ²°κ³Όμ μΌλ‘ νλ‘κ·Έλ¨ κ°λ° λ° μ μ§λ³΄μμ λλ λΉμ©κ³Ό μκ°μ νκΈ°μ μΌλ‘ μ€μΌ μ μμΌλ©°
κ°μ²΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό κ΄λ¦¬νμ¬ λ°μ΄ν°λ₯Ό μμ€ μμ΄ κ΄λ¦¬νκΈ° μ©μ΄ν©λλ€.
λν νλμ κ°μ²΄κ° λ°μ΄ν°μ λμμ λͺ¨λ ν¬ν¨ν μ μμ΅λλ€.
κ°μ²΄μ λ°μ΄ν° λΆλΆμ μμ±(attribute)λ‘, κ°μ²΄μ λμμ λ©μλ(method)λ‘ κ΅¬νν©λλ€.
βπ» ν΄λμ€ Class λ?
κ°μ²΄λ₯Ό μ μν μ€κ³λ λλ νμ μλ―Έν©λλ€.
κ°μ²΄μ μνμ νλμ ꡬ체ννλ ννλ‘ νλ‘κ·Έλλ°μ μ§ννλ©° μνλ μνμ νλμ ꡬννκΈ° μν μ€κ³λλΌκ³ λ ν©λλ€.
ν΄λμ€λ μ νμ [μ€κ³λ]μ΄λ©° κ°μ²΄λ [μ ν]μ΄λΌκ³ ννν μ μμ΅λλ€.
ν΄λμ€λ₯Ό νμ©νμ¬ μΈμ€ν΄μ€λ₯Ό μμ±ν¨μΌλ‘μ¨ κ°μ²΄λ₯Ό λ§λ€ μ μμΌλ©° ν΄λμ€λ₯Ό ν΅ν΄ μμ±λ κ°μ²΄λ₯Ό ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€λΌκ³ λΆλ¦ λλ€.
λλ¬Έμ ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό λ§λλ κ³Όμ μ μΈμ€ν΄μ€νλΌκ³ μ§μΉν©λλ€.
ππ» μ½κ² λΆμ΄λΉ΅μΌλ‘ μλ₯Ό λ€μ΄ μ€λͺ νλ©΄,
λΆμ΄λΉ΅ κΈ°κ³λ ν΄λμ€λ₯Ό μλ―Έν©λλ€.
λΆμ΄λΉ΅ κΈ°κ³λ‘ λΆμ΄λΉ΅μ λ§λ€μ΄ λ΄λ κ²μ μΈμ€ν΄μ€νλΌκ³ ννν μ μμΌλ©° λΆμ΄λΉ΅μ μΈμ€ν΄μ€λΌκ³ ν©λλ€.
π± μ¬κΈ°μ, κ°μ²΄μ μΈμ€ν΄μ€ μ°¨μ΄λ₯Ό μ€λͺ νμλ©΄,
λμ ν° μ°¨μ΄λ μμ΅λλ€.
λ€λ§, κ°μ²΄λ λͺ¨λ μΈμ€ν΄μ€λ₯Ό ν¬κ΄νλ λμ μλ―Έλ₯Ό κ°μ§λ©° μΈμ€ν΄μ€λ ν΄λΉ κ°μ²΄κ° μ΄λ€ ν΄λμ€λ‘λΆν° μμ±λ κ²μΈμ§λ₯Ό κ°μ‘°ν©λλ€.
π ν΄λμ€μ κΈ°λ³Έ λ¬Έλ²
class ν΄λμ€λͺ
{
//ν΄λμ€ μ μ
}
- ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ class ν€μλ μ¬μ©νλ©° ν΄λμ€λͺ μ λλ¬Έμλ‘ μμ
class Car{ //ν΄λμ€
private String carName; //νλ
private int carYear; //νλ
Car(Stirng carName, int carYear){ //μμ±μ
this.carName = carName;
this.carYear = carYear;
}
public String getModel(){ //λ©μλ
return this.carYear + "λ
μ" + this.carName";
π ν΄λμ€μ κ΅¬μ± : λ©€λ² λ³μμ μμ±μ
public class ExampleClass{
int x=10; 1οΈβ£ νλ
void printx() {...} 2οΈβ£ λ©μλ
ExampleClass {...} 3οΈβ£ μμ±μ
class ExampleClass2 {...} 4οΈβ£ μ΄λ ν΄λμ€
}
μ¬κΈ°μ, μμ±μλ₯Ό μ μΈν [ νλ, λ©μλ, μ΄λ ν΄λμ€ ] λ₯Ό ν΄λμ€μ λ©€λ²λΌκ³ λΆλ¦ λλ€.
ππ» μ΄ μ€ νλμ λ©μλλ κ°κ°μ ν΄λμ€κ° κ°μ§λ μμ±κ³Ό κΈ°λ₯μ λννλ©° μμ±κ³Ό κΈ°λ₯μ ν΄λΉ ν΄λμ€μ κ΄λ ¨λ λ°μ΄ν°μ μ§ν©μ΄λ©°
ν΅μ¬μ μΈ μ 보λ₯Ό λ΄κ³ μμ
1οΈβ£ νλ field
- ν΄λμ€μ μμ±μ λνλ΄λ λ³μ
- κ°μ²΄μ μμ±μ λ³μλ‘ μ μ©νκΈ° μν΄ μ¬μ©
2οΈβ£ λ©μλ method
- ν΄λμ€μ κΈ°λ₯μ λνλ΄λ ν¨μ
- κ°μ²΄μ νμλ₯Ό λνλ
3οΈβ£ μμ±μ constructor
- ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ μν
- κ°μ²΄λ₯Ό μμ±νκΈ° μν μμ±μ λΆμ¬νλλ° μ¬μ©
4οΈβ£ μ΄λ ν΄λμ€ inner class
- ν΄λμ€ λ΄λΆμ ν΄λμ€
π ν΄λμ€ μ’ λ₯
ν΄λμ€λ μ μΈ μμΉμ λ°λΌ μ’ λ₯κ° κ΅¬λΆλ©λλ€.
1οΈβ£ μΌλ° ν΄λμ€
- νμΌμ μμλΆλΆμ΄λ©° μΌλ° ν΄λμ€λ₯Ό μμ±νλ €λ λͺ©μ μΌλ‘ μ¬μ©
class (ν΄λμ€ μ΄λ¦)
{
...
}
2οΈβ£ μ€μ²© ν΄λμ€
- μ μ μ€μ²© ν΄λμ€λΌκ³ λ νλ©° μ μΈ μμΉλ ν΄λμ€μ λ΄λΆ
- staticλ§ μ μΈ κ°λ₯ν¨
class (μΌλ° ν΄λμ€ μ΄λ¦)
{
static class (μ€μ²© ν΄λμ€ μ΄λ¦)
{
...
}
}
3οΈβ£ λ΄λΆ ν΄λμ€
- μ μΈ μμΉλ ν΄λμ€ λ΄λΆ
- static λ©μλ or λ³μλ₯Ό κ°μ§ μ μμ
- μ΄λ²€νΈλ₯Ό μ²λ¦¬νκ±°λ λ°μ΄ν° ꡬ쑰 μ μΈμ μν΄ μ¬μ©
class (μΌλ° ν΄λμ€ μ΄λ¦)
{
class (λ΄λΆ ν΄λμ€ μ΄λ¦)
{
...
}
}
4οΈβ£ μ§μ ν΄λμ€
- μ μΈμμΉλ λ©μλ λ΄λΆλ‘ λ©μλμμλ§ μ¬μ©λλ ν΄λμ€λ₯Ό μμ±
- μ§μλ³μλ₯Ό finalλ‘ μμ±
class (μΌλ° ν΄λμ€ μ΄λ¦)
{
λ©μλ
{
static class (μ§μ ν΄λμ€ μ΄λ¦)
{
...
}
}
}
βπ» κ°μ²΄ Object λ?
ν΄λμ€λ₯Όκ° μ€μ λ‘ κ΅¬νλ μΈμ€ν΄μ€λ‘, ν΄λμ€λ₯Ό μΈμ€ν΄μ€νν κ²μ μλ―Έν©λλ€.
νλλ μμ±μ, λ©μλλ κΈ°λ₯μ΄λΌκ³ μκ°νλ©΄ λ©λλ€.
νλμ κ°μ²΄λ λ€μν μμ±κ³Ό κΈ°λ₯μ μ§ν©μΌλ‘ μ΄λ£¨μ΄μ§λ©° κ°μ²΄μ λ©€λ²λ μμ± + κΈ°λ₯ + μ΄λν΄λμ€λ‘ μ΄λ£¨μ΄μ Έμμ΅λλ€.
- κ°μ²΄ ? λͺ¨λ μ€μ¬νλ μ΄λ€ λμ
- κ°μ²΄λ λμ 보μ΄λ κ² λΏλ§ μλλΌ λμ 보μ΄μ§ μλ μ΄λ€ λ Όλ¦¬λ κ°λ λ λ²μ£Όμ ν¬ν¨
- κ°μ²΄λ μ°λ¦¬κ° λ³΄κ³ λλΌκ³ μΈμ§ν μ μλ λͺ¨λ κ² = μ€μ¬νλ λͺ¨λ κ² = μ¬μ©ν μ μλ μ€μ²΄
μλ₯Ό λ€μ΄ Car ν΄λμ€λ₯Ό λ§λ€μ΄λ³΄κ² μ΅λλ€.
class Car{
private String model; //μ°¨ λͺ¨λΈ
private int wheels; //λ°ν΄ κ°μ
private int doors; //μ°¨λ¬Έ κ°μ
private String color; //μ°¨ 컬λ¬
void power() {...} //μλ κ±ΈκΈ°
void accelerate() {...} //κ°μ νκΈ°
void stop() {...} //μ μ§ νκΈ°
}
ππ» Car ν΄λμ€ μμ κ°κ°μ νλμ λ©μλλ‘ κ΅¬ν
- κ° λ³μμ μλ£νμ κ° μμ± κ°μ μλ§λ κ²μΌλ‘ μ μ (ex. μμ± doorμ μλ£νμ intλ‘ !)
- κ°λ° μ€κ³ λ°©λ²λ‘ : μ°λ¦¬κ° μ€μ μΈκ³μμ μ¬λ¬Όμ λ°λΌλ³΄λ λ°©μμ κ°μ₯ κ°κΉμ΄ μ€κ³ λ°©λ²λ‘
- new ν€μλλ₯Ό μ¬μ©νμ¬ μ€μ κ°μ²΄λ₯Ό μμ±νμ¬ μμ μ μν ν΄λμ€ λ©€λ²μ μ κ·Ό κ°λ₯
class CarTest {
public static void main(String[] args) {
Car bmw = new Car(); // Car ν΄λμ€λ‘ λ§λ€μ΄μ§ bmw μΈμ€ν΄μ€
Car tesla = new Car(); // Car ν΄λμ€λ‘ λ§λ€μ΄μ§ tesla μΈμ€ν΄μ€
Car audi = new Car(); // Car ν΄λμ€λ‘ λ§λ€μ΄μ§ audi μΈμ€ν΄μ€
}
βπ» κ°μ²΄μ μμ±κ³Ό νμ©
π κ°μ²΄μ μμ± new
ν΄λμ€λͺ
μ°Έμ‘°λ³μλͺ
; //μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκΈ° μν μ°Έμ‘° λ³μ
μ°Έμ‘°λ³μλͺ
= new μμ±μ(); //μΈμ€ν΄μ€ μμ± ν, κ°μ²΄μ μ£Όμλ₯Ό μ°Έμ‘° λ³μμ μ μ₯
or
ν΄λμ€λͺ
μ°Έμ‘°λ³μλͺ
= new μμ±μ();
Car audi = new Car();
(1) νΉμ ν΄λμ€ νμ μ μ°Έμ‘° λ³μ μ μΈ
(2) new ν€μλμ μμ±μλ₯Ό ν΅ν΄ μΈμ€ν΄μ€ μμ±νμ¬ μ°Έμ‘°λ³μμ ν λΉ
- μ°Έμ‘°λ³μ ? μ€μ λ°μ΄ν° κ°μ΄ μλλΌ λ°μ΄ν°κ° μ μ₯λμ΄ μλ ν© λ©λͺ¨λ¦¬ μ£Όμκ°
- new ν€μλ ? μμ±λ κ°μ²΄λ₯Ό ν λ©λͺ¨λ¦¬μ λ£μΌλΌλ μλ―Έλ₯Ό κ°μ§
→ μμ±μ( ν΄λμ€ + () )λ₯Ό ν΅ν΄ κ°μ²΄κ° λ§λ€μ΄μ§λ©΄ ν΄λΉ κ°μ²΄λ₯Ό ν λ©λͺ¨λ¦¬μ λ£μ
ππ» new ν€μλμ μμ±μλ₯Ό ν΅ν΄ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ€λ κ²μ?
ν΄λΉ κ°μ²΄λ₯Ό ν λ©λͺ¨λ¦¬μ λ£κ³ κ·Έ μ£Όμκ°μ μ°Έμ‘°λ³μμ μ μ₯νλ€λ κ²μ μλ―Έν©λλ€.
- ν΄λμ€ Personμ ν΄λμ€ μμμΌλ‘, μ°Έμ‘°λ³μ pλ μ€ν μμμΌλ‘ μ μ₯
- μμ±μλ‘ λ§λ€μ΄μ§ μΈμ€ν΄μ€λ ν λ©λͺ¨λ¦¬ μμμ λ€μ΄κ°λ©° κ°μ²΄ λ΄λΆμλ ν΄λμ€μ λ©€λ²(νλ, λ©μλ, μ΄λν΄λμ€)κ° μμΉ
- λ©μλ μ½λλ ν΄λμ€ μμμ μ μ₯λκ³ κ°μ²΄ μμμ κ·Έ μμΉλ₯Ό κ°λ¦¬ν€κ³ μμ
→ κ°μ ν΄λμ€λ‘ λ§λ λͺ¨λ κ°μ²΄λ λμΌν λ©μλ κ°μ 곡μ νκΈ° λλ¬Έμ μ¬λ¬ λ² κ°μ λ©μλλ₯Ό μ μΈν΄μ£Όλ κ²μ΄ μλ
ν λ²λ§ μ μ₯ν΄λκ³ νμν κ²½μ°μλ§ ν΄λμ€ μμμ μ μλ λ©μλλ₯Ό μ°Ύμ μ¬μ© κ°λ₯
ππ» μμ±λ κ°μ²΄μμ νλ κ°μ μ€μ μ μ₯ 곡κ°μ΄ κ°μ²΄ λ΄λΆμ μμ
ππ» λ©μλλ λ€λ₯Έ μμμ νλλ§ μ μ₯ ν΄λκ³ κ³΅μ ν¨
π κ°μ²΄μ νμ© : ν¬μΈνΈ μ°μ°μ (.)
μ°Έμ‘°λ³μλͺ
.νλλͺ
// νλκ° λΆλ¬μ€κΈ°
μ°Έμ‘°λ³μλͺ
.λ©μλλͺ
() // λ©μλ νΈμΆ
- ν¬μΈνΈ μ°μ°μμΈ (.)μ νμ©νμ¬ ν΄λΉ μμΉμ μλ κ°μ²΄ μμ λ³Ό μ μμ
- .μ νμ©νμ¬ νΉμ μΈμ€ν΄μ€ κ°μ²΄μ νλμ λ©μλ, μ¦ κ°μ²΄μ λ©€λ²λ€μ μ κ·Όν μ μμ