π™ΉπšŠπšŸπšŠ

[Java] λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” & ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€μ˜ μ΄ˆκΈ°ν™” μ‹œμ 

ν•΄λ²„λ‹ˆ 2024. 4. 16. 16:42
λ°˜μ‘ν˜•

λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” : λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  처음으둜 값을 μ €μž₯ν•˜λŠ” 것

멀버 λ³€μˆ˜(클래슀 λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)와 λ°°μ—΄μ˜ μ΄ˆκΈ°ν™”λŠ” μ„ νƒμ μ΄μ§€λ§Œ, μ§€μ—­λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”λŠ” ν•„μˆ˜μ μ΄λ‹€.

 

class InitTest{
    int x;     // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
    int y = x; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

    void method1() {
        int i;     // μ§€μ—­λ³€μˆ˜
        int j = i; // μ—λŸ¬. μ§€μ—­λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šκ³  μ‚¬μš©
    }
}






멀버 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” 방법

1️⃣ λͺ…μ‹œμ  μ΄ˆκΈ°ν™”(explicit initialization)
2️⃣ μƒμ„±μž(constructor)
3️⃣ μ΄ˆκΈ°ν™” λΈ”λŸ­(initialization block)
- μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­ : μΈμŠ€ν„΄μŠ€λ³€μˆ˜ μ΄ˆκΈ°ν™” ν•˜λŠ”λ° μ‚¬μš©
- 클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­ : ν΄λž˜μŠ€λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•˜λŠ”λ° μ‚¬μš©






1️⃣ λͺ…μ‹œμ  μ΄ˆκΈ°ν™”(explicit initialization)

λͺ…μ‹œμ (ζ˜Žη€Ίηš„)

1.λšœλ ·ν•˜κ²Œ λ“œλŸ¬λ‚˜ λ³΄μ΄λŠ” 것

2.μˆ¨κΉ€μ΄λ‚˜ 감좀이 없이 λΆ„λͺ…ν•˜κ²Œ λ‚˜νƒ€λ‚΄λŠ” 것

3.μ–΄λ–€ 일을 λΆ„λͺ…ν•˜κ²Œ λ“œλŸ¬λ‚΄λŠ” 것

λ³€μˆ˜λ₯Ό μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•˜λŠ” 것을 λͺ…μ‹œμ  μ΄ˆκΈ°ν™”λΌκ³  ν•œλ‹€.

κ°€μž₯ κΈ°λ³Έμ μ΄λ©΄μ„œλ„ κ°„λ‹¨ν•œ μ΄ˆκΈ°ν™” λ°©λ²•μ΄λ―€λ‘œ μ—¬λŸ¬ μ΄ˆκΈ°ν™” 방법 μ€‘μ—μ„œ κ°€μž₯ μš°μ„ μ μœΌλ‘œ κ³ λ €λ˜μ–΄μ•Ό ν•œλ‹€.

 

class Car {
    int door = 4; // κΈ°λ³Έν˜•(primitive type) λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”
    Engine e = new Engine(); // μ°Έμ‘°ν˜•(reference type) λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” 
}






3️⃣ μ΄ˆκΈ°ν™” λΈ”λŸ­(initialization block)

클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­ : ν΄λž˜μŠ€λ³€μˆ˜μ˜ λ³΅μž‘ν•œ μ΄ˆκΈ°ν™”μ— μ‚¬μš©λœλ‹€.
μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­ : μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ˜ λ³΅μž‘ν•œ μ΄ˆκΈ°ν™”μ— μ‚¬μš©λœλ‹€.

 

class InitBlock {
    static { /* 클래슀 μ΄ˆκΈ°ν™”λΈ”λŸ­ μž…λ‹ˆλ‹€. */ }

    { /* μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™”λΈ”λŸ­ μž…λ‹ˆλ‹€. */ }
}

 

클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­ 은 ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 처음 λ‘œλ”©λ  λ•Œ ν•œλ²ˆλ§Œ μˆ˜ν–‰λ˜λ©°, μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­μ€ μƒμ„±μžμ™€ 같이 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ§ˆλ‹€ μˆ˜ν–‰λœλ‹€.

그리고 μƒμ„±μžλ³΄λ‹€ μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­μ΄ λ¨Όμ € μˆ˜ν–‰λœλ‹€.

 

 

Car() {
    count++;
    serialNo = count;
    color = "White";
    gearType = "auto";
}

Car(String color, String gearType) {
    count++;
    serialNo = count;
    this.color = color;
    this.gearType = gearType;
}
{
    count++;
    serialNo = count;
}

Car() {
    color = "White";
    gearType = "auto";
}

Car(String color, String gearType) {
    this.color = color;
    this.gearType = gearType;
}

μœ—μͺ½μ—μ„œ λ°‘μͺ½μœΌλ‘œ κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.

μ½”λ“œμ˜ 쀑볡을 μ œκ±°ν•˜λŠ” 것은 μ½”λ“œμ˜ 신뒰성을 λ†’μ—¬ μ£Όκ³ , 였λ₯˜μ˜ λ°œμƒκ°€λŠ₯성을 쀄여쀀닀.

 

 

ν΄λž˜μŠ€λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”μ‹œμ  : ν΄λž˜μŠ€κ°€ 처음 λ‘œλ”©λ  λ•Œ 단 ν•œλ²ˆ μ΄ˆκΈ°ν™” λœλ‹€.
μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”μ‹œμ  : μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œλ§ˆλ‹€ 각 μΈμŠ€ν„΄μŠ€λ³„λ‘œ μ΄ˆκΈ°ν™”κ°€ 이루어진닀.

ν΄λž˜μŠ€λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”μˆœμ„œ : κΈ°λ³Έκ°’ → λͺ…μ‹œμ μ΄ˆκΈ°ν™” → 클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­
μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”μˆœμ„œ : κΈ°λ³Έκ°’ → λͺ…μ‹œμ μ΄ˆκΈ°ν™” → μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­ → μƒμ„±μž

 

λ°˜μ‘ν˜•