κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ°λ¦¬κ° μ΄κ³ μλ μ€μ μΈκ³μ²λΌ λͺ¨λ κ²μ μ¬λ¬Ό(κ°μ²΄)λ‘ μ΄λ£¨μ΄μ Έ μκ³ λͺ¨λ μΌμ κ° κ°μ²΄μ μνΈμμ©μ μν΄ λ°μνλ€.λ₯Ό κΈ°λ³Έκ°λ
μΌλ‘ λ°μ ν΄μμ΅λλ€.
μ¬κΈ°μ κ°μ²΄λ μ±
μ, μμ, μ»΄ν¨ν° λ± μ°λ¦¬ λμ 보μ΄λ κ² λΏλ§ μλλΌ λ
Όλ¦¬, μ¬μ, κ°λ
λ± λ¬΄νμ λμλ€λ κ°μ²΄μ ν΄λΉλ©λλ€.
- OOPλ Javaμ C++, Python λ±μ ν¬ν¨ν λ§μ νλ‘κ·Έλλ° μΈμ΄μ κΈ°μ΄νλ νλ‘κ·Έλλ° ν¨λ¬λ€μ μ€ νλ
- νλ‘κ·Έλλ°μμ νμν λ°μ΄ν°λ₯Ό μΆμνμμΌ μνμ νμλ₯Ό κ°μ§ κ°μ²΄λ₯Ό λ§λ€κ³ κ·Έ κ°μ²΄λ€ κ°μ μ κΈ°μ μΈ μνΈμμ©μ ν΅ν΄ λ‘μ§μ ꡬμ±νλ νλ‘κ·Έλλ° λ°©λ²(κΈ°μ‘΄μ νλ‘κ·Έλλ° μΈμ΄μ λ€λ₯Έ μλ‘μ΄ κ²μ΄ μλ)
- κ°μ²΄μ κ΄μ μμ νλ‘κ·Έλλ°μ ν¨
- μ μ°¨μ§ν₯κ³Ό λΉκ΅ν΄μ μ¬λμ μ¬κ³ λ°©μκ³Ό κ°κΉμ
OOPμ νΉμ§μ΄μ μ₯μ μ λνμ μΌλ‘ λ€μ 3κ°μ§κ° μμ΅λλ€.
-
- μ½λμ μ¬μ¬μ©μ±β
- μ΄λ―Έ μμ±ν΄λμ κ°μ²΄λ₯Ό κ°μ Έμ μ¬μ©κ°λ₯
- μμμ ν΅ν΄ νμν μμλ₯Ό μΆκ°ν΄ νμ₯ μ¬μ© κ°λ₯
-
- μ μ§λ³΄μ μ©μ΄
- μ½λκ°μ κ΄κ³μ±μ μ΄μ©νμ¬ μ½λ κ΄λ¦¬ κ°λ₯
- μμ μ΄ νμν μ½λλ λ³΄ν΅ ν΄λμ€ λ΄λΆμ λ©€λ² λ³μ νΉμ λ©μμ€(method)μ μ‘΄μ¬
-
- μ λ’°μ±β
- μ½λ μ€λ³΅λ¬Έμ β
- μ μ΄μμ λ©μλλ₯Ό μ΄μ©ν΄μ λ°μ΄ν° λ³΄νΈ λ° μ¬λ°λ₯Έ κ° μ μ§
μμ μ₯μ λ€μ λ³Ό λ κ°μ₯ ν° μ₯μ μ μ½λμ μ¬μ¬μ©μ±μ΄ λκ³ μ μ§λ³΄μκ° μ©μ΄νλ€λ κ²μ
λλ€. μ΄λ¬ν μ₯μ λ€μ νλ‘κ·Έλ¨μ κ°λ°κ³Ό μ μ§λ³΄μμ μλͺ¨λλ μκ°μ νκΈ°μ μΌλ‘ κ°μ ν΄ μ£Όμμ΅λλ€.
| κ΅¬λΆ | μ μ | μ©λ |
|---|---|---|
| ν΄λμ€(Class) | κ°μ²΄λ₯Ό μ μ | κ°μ²΄ μμ± |
| κ°μ²΄(Object) | νμ€ μΈκ³μ μ‘΄μ¬νλ μ¬λ¬Ό λλ κ°λ | κ° κ°μ²΄κ° κ°μ§κ³ μλ κΈ°λ₯κ³Ό μμ± |
κ°μ²΄(Object)λ μμ μΈκΈνλ―μ΄ μ°λ¦¬κ° 'μΈμ§ν μ μκ³ μ€μ¬νλ λͺ¨λ κ²'μ΄μ 'μ¬μ©ν μ μλ μ€μ²΄'λ₯Ό μλ―Έν©λλ€.
κ·Έλ¦¬κ³ ν΄λμ€(Class)λ μ΄λ° κ°μ²΄λ₯Ό μ μν΄ λμ μ€κ³λ λλ νμ΄λΌκ³ ν μ μμ΅λλ€.
μ΄ν΄νκΈ° μ½κ² μ€μνμμ ν΄λμ€μ κ°μ²΄μ κ΄κ³λ₯Ό λνλ΄λ©΄
- μλμ°¨ μ€κ³λμ μμ±λ μλμ°¨
- λ μνΌμ λ§λ€μ΄μ§ μμ
- ν΄λν° μ€κ³λμ μ°λ¦¬κ° μ¬μ©νκ³ μλ ν΄λν°
- λΆμ΄λΉ΅ κΈ°κ³μ λΆμ΄λΉ΅
μΌλ‘ μμλ₯Ό λ€ μ μκ² μ΅λλ€.
μμ μμμμ 'μ€κ³λ'μ ν΄λΉνλ 'μλμ°¨ μ€κ³λ', 'λ μνΌ', 'ν΄λν° μ€κ³λ', 'λΆμ΄λΉ΅ κΈ°κ³'κ° ν΄λμ€μ ν΄λΉλ©λλ€.
κ·Έλ¦¬κ³ ν΄λμ€λ₯Ό ν΅ν΄ μμ±λ 'μλμ°¨', 'μμ', 'ν΄λν°', 'λΆμ΄λΉ΅'μ κ°μ²΄λΌκ³ νλλ° ν΄λμ€μ μν΄ μμ±λ κ°μ²΄λ₯Ό ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€(instance)λΌκ³ ν©λλ€. κ·Έλ¦¬κ³ ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό λ§λλ κ³Όμ μ μΈμ€ν΄μ€ν(instantiate)λΌκ³ ν©λλ€.
κ°μ²΄μ μΈμ€ν΄μ€λ κ°μ μλ―Έμ΄λ―λ‘ μ¬μ©μ μ°¨μ΄λ₯Ό λ νμλ μμ΅λλ€. λ€λ§ κ°μ²΄λ λͺ¨λ μΈμ€ν΄μ€λ₯Ό μλ―Ένλ€λ©΄, μΈμ€ν΄μ€λ ν΄λΉ μΈμ€ν΄μ€κ° μ΄λ€ ν΄λμ€λ‘λΆν° μμ±λμλμ§λ₯Ό κ°μ‘°νλ€λ λ° μλ―Έμ μ°¨μ΄κ° μμ΅λλ€.
π‘ μΈμ€ν΄μ€(Instance)
- ν΄λμ€λ κ°μ²΄μ μμ±μ μ μνκ³ , κΈ°λ₯μ ꡬννμ¬ λ§λ€μ΄ λμ μ½λ μν
- μ€μ ν΄λμ€ κΈ°λ°μΌλ‘ μμ±λ κ°μ²΄(μΈμ€ν΄μ€)λ κ°κ° λ€λ₯Έ λ©€λ² λ³μ κ°μ κ°μ§
- new ν€μλλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ μμ±
κ°μ²΄λ μμ±κ³Ό κΈ°λ₯μ΄λΌλ λ κ°μ§ ꡬμ±μμλ‘ μ΄λ€μ Έ μμ΅λλ€. μΌλ°μ μΌλ‘ κ°μ²΄λ μ¬λ¬κ°μ§ μμ±κ³Ό κΈ°λ₯μ κ°μ§κ³ μμΌλ©° κ°μ²΄λ μ΄ μμ±κ³Ό κΈ°λ₯λ€μ μ§ν©μ΄λΌκ³ λ³Ό μ μμ΅λλ€. λν, κ°μ²΄κ° κ°μ§κ³ μλ μμ±κ³Ό κΈ°λ₯μ κ·Έ κ°μ²΄μ λ©€λ²(member)λΌκ³ ν©λλ€.
μμ±(property)μ λ©€λ²λ³μ, νλ(field), νΉμ±, μνλΌκ³ λ νκ³ κΈ°λ₯(function)μ λ©μλ(method), ν¨μ, νμλΌκ³ μ§μΉνκΈ°λ ν©λλ€. 보ν΅μ μμ±κ³Ό νλ, κ·Έλ¦¬κ³ κΈ°λ₯μ λ³΄ν΅ λ©μλλΌκ³ μ§μΉν©λλ€.
μμ±κ³Ό κΈ°λ₯μ 'λΌλμ€'λ‘ μλ₯Ό λ€μ΄ λ³΄κ² μ΅λλ€.
λΌλμ€μ μμ±μΌλ‘λ μ μμν, λλΉ, λμ΄, μμ, λ³Όλ₯¨, μ±λκ³Ό κ°μ κ²λ€μ΄ μμ μ μκ³ , κΈ°λ₯μΌλ‘λ μ μ turnOn/Off, λ³Όλ₯¨ β/β, μ±λλ³κ²½ λ±μ΄ μκ² μ΅λλ€. μ΄λ₯Ό ν΄λμ€ κ°μ²΄μ μ½λλ‘ μμ±ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
class Radio {
// λΌλμ€μ μμ±(attribute)
boolean power;
String color;
int volume;
double channel;
// λΌλμ€μ κΈ°λ₯(method)
void stateOfPower {
if(power == true) System.out.prinLn("νμ¬ μ μμ΄ μΌμ§ μνμ
λλ€");
else System.out.println("νμ¬ μ μμ΄ κΊΌμ§ μνμ
λλ€");
}
void turnOn() {
power = true;
System.out.println("μ μμ μΌλλ€");
}
void turnOff() {
power = false;
System.out.println("μ μμ λλλ€");
}
void volumeUp() {
volume++;
System.out.println("νμ¬ λ³Όλ₯¨μ " +volume + "μ
λλ€");
}
void volumeDown() {
volume--;
System.out.println("νμ¬ λ³Όλ₯¨μ " + volume + "μ
λλ€");
}
void channelUp() {
channel++;
System.out.println("νμ¬μ±λμ (ch)" + channel + "μ
λλ€");
}
void channelDown() {
channel--;
System.out.println("νμ¬ μ±λμ (ch)" + channel + "μ
λλ€");
}
}μμ μμλ λ¨μν λΌλμ€μ μ€κ³λμ λΆκ³ΌνκΈ° λλ¬Έμ λΌλμ€λ‘ μ¬μ©ν μ μμ΅λλ€. μ€κ³λ₯Ό λλΈ κ°μ²΄λ₯Ό μ¬μ©νλ €λ©΄ κ°μ²΄λ₯Ό μμ±ν΄μΌν©λλ€. μ¦, μΈμ€ν΄μ€ν ν΄μΌν©λλ€.
κ°μ²΄λ₯Ό μμ±ν λλ newμ°μ°μλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ν ν μ μμ΅λλ€. κ·Έλ¦¬κ³ μμ±λ κ°μ²΄μ ν¬μΈνΈ μ°μ°μ.λ₯Ό μ¬μ©ν΄μ κ°μ²΄μ λ©€λ²μ μ κ·Όν μ μμ΅λλ€.
class RadioTest {
public static void main(String args[]) {
Radio myRadio = new Radio();
myRadio.power = true;
myRadio.color = blue;
myRadio.volume = 5;
myRadio.channel = 7.0;
myRadio.turnOn()
myRadio.volumeUp();
myRadio.channelDown();
}
}λ€μμΌλ‘ κ°μ²΄κ° μ΄λ»κ² μ μ₯λκ³ κ°μ΄ ν λΉλλμ§ μμλ³΄κ² μ΅λλ€.
1. μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκΈ°μν μ°Έμ‘°λ³μ μμ±
Radio myRadio;Radioνμ μ μ°Έμ‘°λ³μ myRadioλ₯Ό μ μΈνκ³ λ©λͺ¨λ¦¬μ μ°Έμ‘°λ³μ myRadioλ₯Ό μν 곡κ°μ΄ λ§λ ¨λ©λλ€.
2. μΈμ€ν΄μ€ μμ± ν, κ°μ²΄μ μ£Όμλ₯Ό μ°Έμ‘°λ³μμ ν λΉ
myRadio = new Radio();newμ°μ°μμ μν΄ Radioν΄λμ€μ μΈμ€ν΄μ€κ° λ©λͺ¨λ¦¬μ λΉ κ³΅κ°μ μμ±λ©λλ€. μ΄λ newμ°μ°μλ‘ μμ±λ κ°μ²΄λ Heap Memoryμ μμ±λκ³ , μ°Έμ‘°λ³μ myRadioλ μΈμ€ν΄μ€κ° μ μ₯λμ΄ μλ ν λ©λͺ¨λ¦¬μ μ£Όμκ°μ κ°λ¦¬ν΅λλ€.
μ¬κΈ°μ κ°μ²΄μμ± μμ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό μκΉ μ΄ν΄λ³΄κ² μ΅λλ€.
π‘ κ°μ²΄μμ± μ λ©λͺ¨λ¦¬ ꡬ쑰 >
μμ κ·Έλ¦Όμ 보μλ©΄ 'new'μ°μ°μλ‘ μμ±λ κ°μ²΄κ° ν λ©λͺ¨λ¦¬ μμμ μ μ₯λλ κ²μ λ³Ό μ μμ΅λλ€. ν΄λμ€ μμ, μ€ν μμ, ν λ©λͺ¨λ¦¬ μμμΌλ‘ ꡬμ±λ κ³³μ΄ λ°λ‘ JVMμ Runtime Data Areaμ λλ€.
μ°Έμ‘°λ³μλ₯Ό μμ±νλ©΄ μ°Έμ‘°λ³μκ° μ°Έμ‘°ν ν΄λμ€νμ μ 'ν΄λμ€ μμ' μ κ·Έλ¦¬κ³ μ°Έμ‘°λ³μλ μΌλ° λ³μμ κ°μ΄ 'μ€ν(stack)' μμμ μ μ₯λ©λλ€.
κ·Έλ¦¬κ³ newμ°μ°μλ‘ κ°μ²΄λ₯Ό ν λ©λͺ¨λ¦¬ μμμ μ μ₯νλ©΄ μ°Έμ‘°λ³μ myRadioλ νλ©λͺ¨λ¦¬ μμμ μ μ¬λ μ£Όμκ°μ μ°Έμ‘°νκ² λ©λλ€.
μ¬κΈ°μ μ€μν κ²μ μμ±μ ν λ©λͺ¨λ¦¬ μμμ μ μ₯λλ κ²μ λ°ν΄ λ©μλλ 'ν΄λμ€ μμ' μ μ μ₯λ©λλ€. λ©μλκ° ν΄λμ€μ μ μ₯λκ³ κ°μ²΄μμμ λ©μλμ μμΉλ₯Ό κ°λ¦¬ν€λ μ΄μ λ κ°μ ν΄λμ€λ‘ λ§λ λͺ¨λ κ°μ²΄λ λμΌν λ©μλλ₯Ό 곡μ νκΈ° λλ¬Έμ νλ²λ§ μ μ₯ν΄λκ³ μ°Έμ‘°νμ¬ μ¬μ©νλ κ²μ λλ€.
3. ν΄λΉ κ°μ²΄μ μμ±κ³Ό λ©μλμ μ κ·Όνμ¬ μ¬μ©
myRadio.color = "red";
myRadio.turnOn();μμ μμ μ κ°μ΄ .μ ν΅ν΄μ κ°μ²΄ μμ μλ νλκ°κ³Ό λ©μλμ μ κ·Όμ΄ κ°λ₯ν©λλ€.
π‘ ν(Heap) λ©λͺ¨λ¦¬
- μμ±λ μΈμ€ν΄μ€λ λμ λ©λͺ¨λ¦¬μΈ ν λ©λͺ¨λ¦¬(heap memory)μ ν λΉλ¨
- Cλ C++ μ¬μ©ν λμ λ©λͺ¨λ¦¬λ₯Ό μ§μ ν΄μ μμΌμΌνμ§λ§(free() or delete μ¬μ©), Javaμμλ Garbage Collectorκ° μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μκ±°
- νλμ ν΄λμ€λ‘λΆν° μ¬λ¬κ°μ μΈμ€ν΄μ€κ° μμ±λκ³ κ°κ° λ€λ₯Έ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°μ§
μλ°μμ λ³μλ ν¬κ² ν΄λμ€ λ³μ(cv, class variable), μΈμ€ν΄μ€ λ³μ(iv, instance variable), μ§μ λ³μ(lv, local variable) μΈ μ’
λ₯κ° μμ΅λλ€. μ΄ μΈκ°μ§ λ³μλ λ³μκ° μ μΈλ μμΉμ λ°λΌ μ’
λ₯κ° κ²°μ λλ―λ‘ λ³μκ° μ΄λ€ νλμ μ μΈλμλμ§κ° κ°μ₯ μ€μν©λλ€. μ΄λ€μ μ μΈλ μμΉμ λ°λΌ μ’
λ₯κ° κ²°μ λκ³ κ°κ° λ€λ₯Έ μ ν¨ λ²μ(scope)λ₯Ό κ°μ§κ² λ©λλ€.
π‘ νλ(Field)
- ν΄λμ€μ ν¬ν¨λ λ³μλ‘ ν΄λμ€ λ΄μ μ μλ κ°μ²΄μ μμ±λΆλΆμ νλλΌκ³ μ§μΉν©λλ€.
μ¬κΈ°μ νλμ ν΄λΉνλ λ³μλ ν΄λμ€ λ³μ(cv)μ μΈμ€ν΄μ€ λ³μ(iv)μ
λλ€. λ κ°μ λ³μλ λ©€λ²λ³μλΌκ³ λ νλ©° λλ¨Έμ§λ μ§μλ³μ(lv)μ ν΄λΉν©λλ€.
λ©€λ²λ³μ μ€ staticμ΄ λΆμ κ²μ΄ ν΄λμ€ λ³μμ΄κ³ , κ·Έλ μ§ μμ κ²μ΄ μΈμ€ν΄μ€ λ³μ μ
λλ€.
class Varialbe {
int iv; // μΈμ€ν΄μ€ λ³μ
static int cv; // ν΄λμ€ λ³μ(staticλ³μ, 곡μ λ³μ);
void method() {
int lv; // μ§μλ³μ, method(){}μμμλ§ μ ν¨
}
}μΈμ€ν΄μ€ λ³μλ λ©€λ²λ³μμ ν΄λΉλλ©° new μμ±μ()λ₯Ό ν΅ν΄μ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λ λ λ§λ€μ΄μ§λλ€. κ·Έλ κΈ° λλ¬Έμ μΈμ€ν΄μ€ λ³μλ μ¬μ©νκΈ° μν΄μλ λ°λμ μ΄μ μ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μΌ ν©λλ€.
μΈμ€ν΄μ€λ ν λ©λͺ¨λ¦¬μ λ
립μ μΈ κ³΅κ°μ μ μ₯λκ³ , μμ±λ μΈμ€ν΄μ€λ§λ€ κ³ μ ν κ°μ κ°μ§ μ μμ΅λλ€.
μ¬λμ μ΄λ¦, μ νλ²νΈ, λμ΄, μ·¨λ―Έ λ±μ΄ μΈμ€ν΄μ€ λ³μλ‘ μ¬μ©λ μ μμ΅λλ€.
ν΄λμ€ λ³μλ μΈμ€ν΄μ€ λ³μκ° λ
립μ μΈ μ μ₯곡κ°μ κ°μ§λλ° λ°ν΄ 곡ν΅λ μ μ₯곡κ°μ 곡μ ν©λλ€. ν΄λμ€λ‘ μμ±λ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅μ μΈ κ°μ μ μ§ν΄μΌνλ κ²½μ° staticμ μ¬μ©νμ¬ ν΄λμ€ λ³μλ‘ μ μΈν΄μΌ ν©λλ€.
λν, ν΄λμ€ λ³μλ μΈμ€ν΄μ€λ₯Ό λ°λ‘ μμ±νμ§ μκ³ λ μΈμ λΌλ ν΄λμ€λͺ
.ν΄λμ€λ³μλ₯Ό ν΅ν΄μ μ¬μ© κ°λ₯ν©λλ€. μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ μ¬μ©κ°λ₯ν μ΄μ λ ν΄λμ€ λ³μλ ν΄λμ€ μμμ μ μ₯λμ΄ μκΈ° λλ¬Έμ
λλ€.
μ§μλ³μλ ν΄λμ€ λ΄ λ©μλ λ΄μμλ§ μ¬μ© κ°λ₯ν λ³μμ λλ€. μμ λ©€λ²λ³μλ€κ³Ό λ€λ₯΄κ² μ§μλ³μλ μ€ν λ©λͺ¨λ¦¬μ μ μ₯λμ΄ λ©μλμ μ’ λ£μ ν¨κ» λμμ μλ©Έλμ΄ λμ΄μ μ¬μ©ν μ μκ² λ©λλ€.
| κ΅¬λΆ | μΈμ€ν΄μ€ λ³μ | ν΄λμ€ λ³μ |
|---|---|---|
| μμ± μμ | μΈμ€ν΄μ€κ° μμ±λ λ | νλ‘κ·Έλ¨ μ€ν μ |
| μ¬μ©κ°λ₯ μμ | μΈμ€ν΄μ€ μμ± ν | μΈμ€ν΄μ€ μμ± μ |
| μμ± κ³΅κ° | ν λ©λͺ¨λ¦¬μ μΈμ€ν΄μ€ λ΄ | ν΄λμ€ μμμ ν΄λμ€ μ½λ λ΄ |
| μ©λ | κ° κ°μ²΄μ κ³ μ ν μμ± | λͺ¨λ κ°μ²΄μ 곡μ μμ± |
μμ μΈκΈν κ² μ²λΌ ν΄λμ€ λ³μλ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅λ μ μ₯곡κ°μ 곡μ νκ³ ν΄λμ€ μμμ μ μ₯λμ΄ μΈμ€ν΄μ€νλ₯Ό νμ§ μκ³ ν΄λμ€λ₯Ό μ¬μ©νμ¬ μ¬μ©ν μ μμ΅λλ€. κ°λ¨ν μμ λ₯Ό ν΅ν΄ μ΄ν΄λ³΄κ² μ΅λλ€.
public static void main(String[] args) {
StaticEx staticEx1 = new StaticEx();
StaticEx staticEx2 = new StaticEx();
staticEx1.num1 = 100;
staticEx2.num1 = 200;
staticEx1.num2 = 300;
staticEx2.num2 = 400;
System.out.println("staticEx1.num1 = " + staticEx1.num1); // 100;
System.out.println("staticEx2.num1 = " + staticEx2.num1); // 200;
System.out.println("staticEx1.num2 = " + staticEx1.num2); // 400;
System.out.println("staticEx2.num2 = " + staticEx2.num2); // 400;
}
class StaticEx {
int num1;
static int num2;
}staticλ³μλ₯Ό μ¬μ©ν λλ μ°Έμ‘°λ³μλͺ μ΄ μλλΌ ν΄λμ€λͺ .λ³μλͺ μΌλ‘ μ°Έμ‘°ν΄μΌνμ§λ§ μΈμ€ν΄μ€ λ²Όλμ μ§μ μ μΈ μ°¨μ΄μ μ νμΈνκΈ° μν΄ μ°Έμ‘°λ³μλ₯Ό μ¬μ©νμ¬ μ¬μ©νμ΅λλ€.
κ° μμ±μ κ°μ 100, 200, 300, 400μ μ λ ₯νμ΅λλ€. μΆλ ₯ μμλ 100, 200, 300, 400μ΄ μΆλ ₯λμ΄μΌν κ² κ°μ§λ§ μΈμ€ν΄μ€λ³μλ κ° κ³ μ μ κ°μ μΆλ ₯ν κ²μ λ°ν΄, staticλ³μλ‘ μ μΈλ num2λ λͺ¨λ 400μΌλ‘ μΆλ ₯λ¨μ μ μ μμ΅λλ€.
μ΄μ²λΌ staticλ³μλ₯Ό μ¬μ©νλ©΄ λͺ¨λ μΈμ€ν΄μ€μ 곡ν΅μ μΌλ‘ 곡μ λλ κ°μ΄ μ μ©λλ€λ κ²μ μ μ μμ΅λλ€. κ·Έλ¦¬κ³ ν΄λμ€λ³μλ λ€μκ³Ό κ°μ μ¬μ©μ κΆμ₯ν©λλ€.
StaticEx.num2 = 400;λ©μλ(method)λ **"νΉμ μμ μ μννλ μΌλ ¨μ λͺ λ Ήλ¬Έλ€μ μ§ν©"**μ μλ―Έν©λλ€. μμ μμ λ‘ λ΄€μλ λΌλμ€ μμ μμ μ μμΌκΈ°, λ³Όλ₯¨μ‘°μ , μ±λμ‘°μ λ±μ΄ λ©μλ μ λλ€.
λ©μλλ λ©μλ μκ·Έλμ²μ '{}'μμ λ©μλ λ°λλ‘ κ΅¬λΆν μ μμ΅λλ€.
μ μ΄μ λ°ννμ
λ©μλλͺ
(λ§€κ° λ³μ) { // λ©μλ μκ·Έλμ²
λ©μλ λ΄μ© // λ©μλ λ°λ
}
public static int add(int x, int y) {
return x + y;
}λ©μλ μκ·Έλμ²μλ μ μ΄μ λ°ννμ
λ©μλλͺ
κ·Έλ¦¬κ³ λ§€κ°λ³μκ° νμνλ°, μ¬κΈ°μ λ§€κ°λ³μλ λ©μλ λ°λμ μμ
μ μννκΈ° μν΄ νμν μμ±μ μ
λ ₯λ°λ λ³μμ
λλ€.
λ©μλλ₯Ό μ¬μ©ν΄μ μ»μ μ μλ μ΄μ μ λ€μκ³Ό κ°μ 3κ°μ§κ° μμ΅λλ€.
- λμ μ¬μ¬μ©μ±(reusability)
- μ€λ³΅μ½λμ κ±°
- νλ‘κ·Έλ¨μ ꡬ쑰ν
μ무λλ λ©μλλ₯Ό μ¬μ©νλ©΄ νλ² λ§λ€μ΄ λμ λ©μλλ₯Ό νμν λ§νΌ λ°λ³΅ν΄μ μ¬μ©ν μ μκ³ , λ€λ₯Έ νλ‘κ·Έλ¨μμλ λ©μλ μ¬μ©μ΄ κ°λ₯νκΈ° λλ¬Έμ μ¬μ¬μ©μ±μ λμΌ μ μκ³ μ€λ³΅μ½λλ₯Ό μ κ±° ν μ μμ΅λλ€.
λν mainλ©μλμ νλ²μ μ½λλ₯Ό μμ±νλκ² μλλΌ μμ λ¨μλ‘ λλ μ νλ‘κ·Έλλ°ν μ μμ΄μ νλ‘κ·Έλ¨μ ꡬ쑰νκ° κ°λ₯ν©λλ€.
λ©μλλ₯Ό μ μνλ€κ³ ν΄μ μ¬μ©λλ κ²μ μλλλ€. λ©μλλ₯Ό νμν κ³³μ νΈμΆν΄μΌ λ©μλ λ°λμ μνλ¬Έλ€μ΄ μνλ©λλ€. μΈλΆ ν΄λμ€μ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄μλ μΈμ€ν΄μ€ μμ± ν μ¬μ©ν΄μΌ νμ§λ§ λμΌ ν΄λμ€μ λ©μλλΌλ¦¬λ λ°λ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ νΈμΆκ°λ₯ν©λλ€.
λ©μλλ₯Ό νΈμΆνλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
void add(int x, int y) {
System.out.printf("x + y = %d", x + y);
}
void printHelloWorld() {
System.out.println("Hello World!");
}
printHelloWorld();
add(3, 5);add()λ©μλλ₯Ό νΈμΆν λ κ΄νΈ()μμ κ°μ μ μ΄μ£Όκ²λλλ° μ΄κ²μ μΈμ(argument)λΌκ³ ν©λλ€. μΈμμ κ°μμ μμλ μ μλ λ§€μλμ λ§€κ°λ³μμ μΌμΉν΄μΌ ν©λλ€. νΉμ μλνλ³νμ΄ κ°λ₯ν΄μΌ ν©λλ€.
λ©μλ μ€λ²λ‘λ©μ νλμ ν΄λμ€ μμ κ°μ μ΄λ¦μΌλ‘ λ λ©μλλ₯Ό μ¬λ¬κ° μ μ ν κ²μ λ§ν©λλ€. λ©μλλ λ©μλμ μ΄λ¦ λλ λ§€κ°λ³μμ νμ μ΄ λ€λ₯΄λ©΄ λ€λ₯Έ λ§€κ°λ³μλΌκ³ μΈμνλ μλ° κ°μλ¨Έμ μ κΈ°λ₯κ³Ό κ΄κ³κ° μμ΅λλ€.
μ€λ²λ‘λ©(overloading)μ μ¬μ μ μλ―Έλ 'κ³Όμ νλ€'μ λλ€. μ¦ λ§μ΄ μ£λ κ²μ λ»νλλ° νλμ λ©μλμ μ¬λ¬ κΈ°λ₯μ ꡬννκΈ° λλ¬Έμ λΆμ¬μ§ μ΄λ¦μ λλ€.
public class Overloading {
public static void main(String[] args) {
Add result = new Add();
result.addNum();
result.addNum(2, 3);
result.addNum(2, 3, 5);
result.addNum(2, 3, 5, 10);
}
}
class Add {
public void addNum() {
System.out.println("κ³μ°ν μ«μλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ");
}
public void addNum(int x, int y) {
System.out.printf("%d + %d = %d\n", x, y, x+y);
}
public void addNum(int x, int y, int z) {
System.out.printf("%d + %d + %d = %d\n", x, y, z, x+y+z);
}
public void addNum(int x, int y, int z, int a) {
System.out.printf("%d + %d + %d + %d = %d\n", x, y, z, a, x+y+z+a);
}
}
/* ====== result ======
κ³μ°ν μ«μλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ
2 + 3 = 5
2 + 3 + 5 = 10
2 + 3 + 5 + 10 = 20
====================== */μμ μμμ κ°μ΄ addNum()μ΄λΌλ μ΄λ¦μ κ°μ§ λμΌν μ΄λ¦μ λ©μλκ° 4κ°κ° μ‘΄μ¬νλλ° λ©μλλ§λ€ λ€λ₯Έ κ°μ μΆλ ₯νλ κ²μ λ³΄μ€ μ μμ΅λλ€. 무쑰건 λ§€μλλͺ
λ§ κ°λ€κ³ λ©μλ μ€λ²λ‘λ©μ΄ λλ κ²μ΄ μλλλ€.
λ©μλλ₯Ό μ€λ²λ‘λ©νκΈ° μν 쑰건μΌλ‘λ λ€μ λ κ°μ§κ° μμ΅λλ€.
- λ©μλμ μ΄λ¦μ΄ μΌμΉ
- λ§€κ°λ³μμ κ°μ λλ νμ μ΄ λ¬λΌμΌν¨
λ©μλ μ€λ²λ‘λ©μ μ₯μ μΌλ‘λ νλμ λ©μλλ‘ μ¬λ¬ κ²½μ°μ μλ₯Ό ν΄κ²°ν μ μλ€λ μ μ λλ€. λ§μ½ λ©μλ μ€λ²λ‘λ©μ΄ μμλ€λ©΄ μμ μμ μ κ²½μ° '2κ°μ μλ₯Ό λνλ λ§€μλλͺ ', '3κ°μ μλ₯Ό λνλ λ§€μλλͺ ', '4κ°μ μλ₯Ό λνλ λ§€μλλͺ ' λ± κ²½μ°μ μμ λ°λ₯Έ λ§€μλλͺ μ μΆκ°νκ³ μ¬μ©ν λλ§λ€ λ§€μλλͺ μ κ²μν΄μΌ νλ λ²κ±°λ‘μμ΄ λ°μν κ²μ λλ€.
μμ±μλ μΈμ€ν΄μ€κ° μμ±λ λ νΈμΆλλ μΈμ€ν΄μ€ μ΄κΈ°ν λ©μλ μ
λλ€. μμ±μ μμ λ©μλ μ²λΌ ν΄λμ€ λ΄μ μ μΈλκ³ λ©μλμ λΉμ·νμ§λ§ returnκ°μ΄ μλ κ²μ΄ νΉμ§μ
λλ€. μμ±μμ 쑰건μ λ€μ λ κ°μ§κ° μμ΅λλ€.
- μμ±μμ μ΄λ¦μ ν΄λμ€μ μ΄λ¦κ³Ό κ°μμΌ ν¨
- μμ±μλ λ¦¬ν΄ κ°μ΄ μμ
μμ±μλ κΈ°λ³Έ μμ±μμ λ§€κ°λ³μκ° μλ μμ±μλ‘ λλ μ μμ΅λλ€. κΈ°λ³Έ μμ±μμ λ§€κ°λ³μκ° μλ μμ±μλ₯Ό κ°λ¨νκ² μ΄ν΄λ³΄κ² μ΅λλ€.
ν΄λμ€ μ΄λ¦(νμ
λ³μλͺ
, νμ
λ³μλͺ
, ...) {
// μΈμ€ν΄μ€ λ³μ μ΄κΈ°ν
}
Card() { // κΈ°λ³Έ μμ±μ
}
Card(String customerID, String cardNum, String customerName) { // λ§€κ°λ³μκ° μλ μμ±μ
...
}μμ μμμμ λ³Ό μ μλ―μ΄ κΈ°λ³Έ μμ±μμ λ§€κ°λ³μκ° μλ μμ±μλ‘ μμ±μ μ€λ²λ‘λ©μ΄ κ°λ₯ν©λλ€. ν΄λμ€μμ λ΄€λ―μ΄ μμ±μλ κ°μ²΄λ₯Ό μμ±νλ κ²μ΄κΈ° λλ¬Έμ newλ₯Ό μ¬μ©ν΄μ νΈμΆν μ μμ΅λλ€.
κΈ°λ³Έ μμ±μλ μμ μμ μμ λ³Ό μ μλ―μ΄ λ§€κ°λ³μκ° μλ μμ±μ μ λλ€. λͺ¨λ ν΄λμ€μλ λ°λμ νλ μ΄μμ μμ±μκ° μ μλμ΄ μμ΄μΌ ν©λλ€.
νμ§λ§ μμ±μλ₯Ό μ μΈνμ§ μμλ ν΄λμ€λ₯Ό μΈμ€ν΄μ€ν ν μ μμλλ° μ΄λ μλ° μ»΄νμΌλ¬κ° 'κΈ°λ³Έ μμ±μ(default constructor)'λ₯Ό μ 곡ν΄μ£ΌκΈ° λλ¬Έμ λλ€.
class Card {
int cardNum;
Card(int cardNum) {
this.cardNum = cardNum;
}
}
class defaultEx {
public static void main(String[] args) {
Card SHcard = new Card(); // compile error λ°μ
}
}μμ μμ μμλ κΈ°λ³Έ μμ±μλ₯Ό μ¬μ©νμ¬ μμ±μλ₯Ό μ μΈνμ§λ§ μλ¬κ° λ°μνμ΅λλ€. κ·Έ μ΄μ λ ν΄λμ€ λ΄λΆμμ μμ±μλ₯Ό λ§λ€μκΈ° λλ¬Έμ λλ€. κΈ°λ³Έ μμ±μλ ν΄λμ€ λ΄ μμ±μκ° λ¨ 1κ°λΌλ μμΌλ©΄ μμ±λμ§ μμ΅λλ€.
λ§€κ°λ³μκ° μλ μμ±μλ λ©μλμ²λΌ νΈμΆ μ μΈμ κ°μ λ겨λ°μμ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ μμ±μ μ λλ€. λ§€κ°λ³μλ‘λ ν΄λμ€μ μμ±λ€μ΄ μν©λλ€. μμ μμ μμ Cardλ λ§€κ°λ³μκ° μλ μμ±μλ₯Ό κ°μ§κ³ μμ΅λλ€.
μμ±μλ λ§μ°¬κ°μ§λ‘ μ€λ²λ‘λ©μ΄ κ°λ₯ν©λλ€. μμ±μλ₯Ό λ°λ‘ ꡬννκ² λλ©΄ κΈ°λ³Έ μμ±μκ° μ 곡λμ§ μμΌλ―λ‘ νμμ μ§μ μμ±ν΄μ μ¬μ©ν΄μΌν©λλ€. μμ±μλ μμ μ€λ²λ‘λ©μ΄ μ±λ¦½νκΈ° μν΄μ μ‘°κ±΄μ΄ νμνλ° λ©μλ μ€λ²λ‘λ©μ 쑰건과 κ°μ΅λλ€.
- λ©μλ μ΄λ¦μ΄ κ°μμΌ ν¨
- λ§€κ°λ³μμ κ°μ λλ νμ μ΄ λ¬λΌμΌν¨
class Card {
int cardNum;
Card() {}
Card(int cardNum) {
this.cardNum = cardNum;
}
}κ°μ ν΄λμ€ λ΄μ λ©μλλ€λΌλ¦¬ μλ‘ νΈμΆν μ μλ κ² μ²λΌ μμ±μλ this()λ₯Ό μ¬μ©ν΄μ μνΈ νΈμΆμ΄ κ°λ₯ν©λλ€. this()λ₯Ό μ¬μ©νκΈ° μν΄μ λ κ°μ§ 쑰건μ λ§μ‘±ν΄μΌ νλλ° λ€μκ³Ό κ°μ΅λλ€.
- λ°λμ 첫 μ€μ μμΉν΄μΌν¨
- μμ±μμ λ΄λΆμμλ§ μ¬μ©κ°λ₯
public class ClassThis {
public static void main(String[] args) {
ThisEx ex1 = new ThisEx();
ThisEx ex2 = new ThisEx("Kim");
}
}
class ThisEx {
public ThisEx() {
System.out.println("ThisExμ κΈ°λ³Έμμ±μ νΈμΆ");
}
public ThisEx(String str) {
this();
System.out.printf("%sλμ΄ ThisExμ λ λ²μ§Έ μμ±μλ₯Ό νΈμΆ", str);
}
}
/* ====== Result ======
ThisExμ κΈ°λ³Έμμ±μ νΈμΆ
ThisExμ κΈ°λ³Έμμ±μ νΈμΆ
Kimλμ΄ ThisExμ λ λ²μ§Έ μμ±μλ₯Ό νΈμΆ
======================= */class ThisExλ λ κ°μ μμ±μλ₯Ό κ°μ§κ³ μμ΅λλ€. κΈ°λ³Έμμ±μ 1κ°μ λ§€κ°λ³μκ° μλ μμ±μ 1κ° μ
λλ€. λ§€κ°λ³μκ° μλ λ λ²μ§Έ μμ±μμλ λ΄λΆμ 첫 λ²μ§Έ μ€μ this()κ° ν¬ν¨λμ΄ μμ΅λλ€.
'result'μμ νμΈν μ μλ―μ΄ λ§€κ°λ³μκ° μλ μμ±μλ₯Ό νΈμΆ νμ λ this()μ μνμΌλ‘ 첫 λ²μ§Έ μμ±μμ ThisExμ κΈ°λ³Έ μμ±μ νΈμΆ"μ΄ λ¨Όμ μΆλ ₯λκ³ λ λ²μ§Έ μμ±μμ Kimλμ΄ ThisExμ λ λ²μ§Έ μμ±μλ₯Ό νΈμΆ"μ΄ νΈμΆ λ κ²μ λ³Ό μ μμ΅λλ€.
thisν€μλλ λ¨Όμ μμ λ₯Ό λ³΄κ³ μμλ³΄κ² μ΅λλ€.
class CustomerInfo {
private static long customerId;
private String customerName;
private String address;
private int age;
CustomerInfo (String customerName, String address, int age) {
long customerID = customerId++;
this.customerName = customerName;
this.address = address;
this.age = age;
}
void printInfo() {
System.out.printf("%sλμ %sμ κ±°μ£Όνκ³ %dμΈ μ
λλ€. customerId = %d", customerName, address, age, customerId);
}
}
public class ThisEx2 {
public static void main(String[] args) {
CustomerInfo kim = new CustomerInfo("kim", "μμΈ", 10);
kim.printinfo();
}
}μμ μμ λ³Ό μ μλ―μ΄ class CustomerInfoμ μΈμ€ν΄μ€ λ³μ customerId, customerName, address, ageκ° μκ³ μμ±μμ λ§€κ°λ³μλ‘ customerName, address, ageκ° μμ΅λλ€.
μ΄λ° κ²½μ°μ μΈμ€ν΄μ€ λ³μμ λ§€κ°λ³μλ₯Ό μ΄λ¦μΌλ‘ ꡬλΆνκΈ° μ΄λ ΅μ΅λλ€. μ΄λ μ΄λ₯Ό ꡬλΆνκΈ° μν΄ μ¬μ©λλ κ²μ΄ thisμ
λλ€. μμ μμ±μμμ this.customerName = customerNameμμ 'this'λ₯Ό μ§μ°κ³ μμ±νλ©΄ λ λ³μ λͺ¨λ μ§μλ³μλ‘ κ°μ£Όλ©λλ€.
thisλ μΈμ€ν΄μ€ μμ μ κ°λ¦¬ν€λ©°, thisλ₯Ό ν΅ν΄μ μΈμ€ν΄μ€ μμ μ λ³μμ μ κ·Όν©λλ€.
λ΄λΆ ν΄λμ€λ ν΄λμ€ λ΄μ μ μΈλ ν΄λμ€λ‘, μΈλΆ ν΄λμ€μ λ΄λΆ ν΄λμ€κ° μλ‘ μ°κ΄λμ΄ μμ λ μ¬μ©ν©λλ€. λ΄λΆ ν΄λμ€λ₯Ό μ΄μ©νλ©΄ μΈλΆ ν΄λμ€μ λ©€λ²μ μ½κ² μ κ·Όν μ μκ³ μ½λμ 볡μ‘μ±(μΊ‘μν)μ μ€μΌ μ μμ΅λλ€.
λ΄λΆ ν΄λμ€μ μ’
λ₯λ μΈμ€ν΄μ€ λ΄λΆ ν΄λμ€, μ μ λ΄λΆ ν΄λμ€, μ§μ λ΄λΆ ν΄λμ€, μ΅λͺ
λ΄λΆ ν΄λμ€κ° μμ΅λλ€.
class a {
class b {
// μΈμ€ν΄μ€ λ΄λΆ ν΄λμ€
}
static class c {
// μ μ λ΄λΆ ν΄λμ€
}
void methodEx() {
class d {
// μ§μ λ΄λΆ ν΄λμ€
}
}
}| μ’ λ₯ | μ μΈ μμΉ | μ¬μ© κ°λ₯ν λ³μ |
|---|---|---|
| μΈμ€ν΄μ€ λ΄λΆ ν΄λμ€ | μΈλΆ ν΄λμ€μ λ©€λ²λ³μ μμΉ | μΈλΆ μΈμ€ν΄μ€ λ³μ, μΈλΆ μ μ λ³μ |
| μ μ λ΄λΆ ν΄λμ€ | μΈλΆ ν΄λμ€μ λ©€λ² λ³μ | μΈλΆ μ μ λ³μ |
| μ§μ λ΄λΆ ν΄λμ€ | μΈλΆ ν΄λμ€μ λ©μλ νΉμ μ΄κΈ°ν λΈλ | μΈλΆ μΈμ€ν΄μ€ λ³μ, μΈλΆ μ μ λ³μ |
