BackEnd🌱/Java

[Java] static 과 instance의 차이

dkswnkk 2022. 3. 21. 01:35

μ„œλ‘ 

staticκ³Ό instance의 차이에 λŒ€ν•΄μ„œ ν•œλ²ˆ μ •λ¦¬ν•˜μ—¬ 짚고 λ„˜μ–΄ 갈렀고 ν•©λ‹ˆλ‹€.

λͺ©μ°¨

1. 클래슀(static) λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 차이
2. 클래슀(static) λ©”μ„œλ“œμ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ 차이
3. 클래슀(static) 멀버와 μΈμŠ€ν„΄μŠ€ 멀버 κ°„μ˜ 참쑰와 호좜

 

1. 클래슀(static) λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 차이

멀버 λ³€μˆ˜ 쀑 static이 뢙은 것은 클래슀 λ³€μˆ˜, 뢙지 μ•Šμ€ 것은 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μž…λ‹ˆλ‹€. μ•„λž˜ μ½”λ“œλ₯Ό 보며 μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

public class Test {

    int instanceValue;   // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜  
    static int classValue;   // 클래슀 λ³€μˆ˜

    void method() {
        int stackValue = 0; // 지역 λ³€μˆ˜
    }
    
}

μœ„ μ½”λ“œμ—λŠ” 3개의 intν˜• λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ–΄ μžˆλŠ”λ°, instanceValue와 classValueλŠ” 클래슀 μ˜μ—­ μ•ˆμ— μ„ μ–Έλ˜μ–΄μžˆμœΌλ―€λ‘œ 멀버 λ³€μˆ˜μž…λ‹ˆλ‹€. 그쀑 classValueλŠ” μ•žμ— static λΆ™μ–΄μ„œ μ„ μ–Έλ˜μ–΄ μžˆμœΌλ―€λ‘œ 클래슀 λ³€μˆ˜μ΄λ©°, instanceValueλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μž…λ‹ˆλ‹€. 그리고 stackValueλŠ” λ©”μ„œλ“œμΈ method()의 λ‚΄λΆ€, 즉 'λ©”μ„œλ“œ μ˜μ—­'에 μ„ μ–Έλ˜μ–΄ μžˆμœΌλ―€λ‘œ μ§€μ—­λ³€μˆ˜μž…λ‹ˆλ‹€.

λ³€μˆ˜μ˜ μ’…λ₯˜ μ„ μ–Έ μœ„μΉ˜ 생성 μ‹œκΈ°
클래슀 λ³€μˆ˜(class variable) 클래슀 μ˜μ—­ ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ
μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(instance variable) μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ—ˆμ„ λ•Œ
지역 λ³€μˆ˜(local variable) 클래슀 μ˜μ—­ μ΄μ™Έμ˜ μ˜μ—­(λ©”μ„œλ“œ, μƒμ„±μž, μ΄ˆκΈ°ν™” λΈ”λŸ­ λ‚΄λΆ€) λ³€μˆ˜ 선언문이 μˆ˜ν–‰λ˜μ—ˆμ„ λ•Œ

μ„Έ 가지 λ³€μˆ˜μ˜ μ’…λ₯˜λ₯Ό μžμ„Έν•˜κ²Œ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

1) μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(instance variable)

클래슀 μ˜μ—­μ— μ„ μ–Έλ˜λ©°, 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 값을 읽어 μ˜€κ±°λ‚˜ μ €μž₯ν•˜κΈ° μœ„ν•΄ μ„œλŠ” λ¨Όμ € μΈμŠ€ν„΄μŠ€λ₯Ό 생성해야 ν•©λ‹ˆλ‹€.

예): Test test = new Test();

μΈμŠ€ν„΄μŠ€λŠ” 독립적인 μ €μž₯곡간을 κ°€μ§€λ―€λ‘œ μ„œλ‘œ λ‹€λ₯Έ 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ κ³ μœ ν•œ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•˜λŠ” μ†μ„±μ˜ 경우, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‘œ μ„ μ–Έν•©λ‹ˆλ‹€.

2) 클래슀 λ³€μˆ˜(calss variable)

클래슀 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법은 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ•žμ— static을 λΆ™μ΄κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 독립적인 μ €μž₯곡간을 κ°–λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€λŠ” 달리, 클래슀 λ³€μˆ˜λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅ν†΅λœ μ €μž₯ 곡간(λ³€μˆ˜)을 κ³΅μœ ν•˜κ²Œ λ©λ‹ˆλ‹€. ν•œ 클래슀의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ“€μ΄ 곡톡적인 값을 μœ μ§€ν•΄μ•Ό ν•˜λŠ” μ†μ„±μ˜ 경우, 클래슀 λ³€μˆ˜λ‘œ μ„ μ–Έν•΄μ•Ό ν•©λ‹ˆλ‹€.

 ν΄λž˜μŠ€ λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 달리 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ–Έμ œλΌλ„ μ•„λž˜μ™€ 같이 λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

예:) Test.λ³€μˆ˜λͺ…

ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ”©(loading)될 λ•Œ μƒμ„±λ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λ˜λ©°, public을 μ•žμ— 뢙이면 같은 ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ–΄λ””μ„œλ‚˜ μ ‘κ·Όν•  수 μžˆλŠ” 'μ „μ—­ λ³€μˆ˜(global variable)'의 성격을 κ°–μŠ΅λ‹ˆλ‹€.

3) 지역 λ³€μˆ˜(local variable)

λ©”μ„œλ“œ 내에 μ„ μ–Έλ˜μ–΄ λ©”μ„œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ©°, λ©”μ„œλ“œκ°€ μ’…λ£Œλ˜λ©΄ μ†Œλ©Έλ˜μ–΄ μ‚¬μš©ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€. forλ¬Έ λ˜λŠ” whileλ¬Έκ³Ό 같이 λΈ”λŸ­ 내에 μ„ μ–Έλœ μ§€μ—­λ³€μˆ˜λŠ”, μ§€μ—­λ³€μˆ˜κ°€ μ„ μ–Έλœ λΈ”λŸ­{} μ•ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ©°, λΈ”λŸ­{}을 λ²—μ–΄λ‚˜λ©΄ μ†Œλ©Έλ˜μ–΄ μ‚¬μš©ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€. 

 

2. 클래슀(static) λ©”μ„œλ“œμ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ 차이

λ³€μˆ˜μ—μ„œ 그랬던 것과 같이, λ©”μ„œλ“œ μ•žμ— static이 λΆ™μ–΄ 있으면 클래슀 λ©”μ„œλ“œμ΄κ³ , λΆ™μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμž…λ‹ˆλ‹€. 클래슀 λ©”μ„œλ“œλ„ 클래슀 λ³€μˆ˜μ²˜λŸΌ, 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 호좜이 κ°€λŠ₯ν•˜μ§€λ§Œ λ°˜λ©΄μ— μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” λ°˜λ“œμ‹œ 객체λ₯Ό μƒμ„±ν•΄μ•Όλ§Œ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1) 클래슀λ₯Ό 섀계할 λ•Œ, 멀버 λ³€μˆ˜ 쀑 λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것에 static을 뢙인닀.

  • μƒμ„±λœ 각 μΈμŠ€ν„΄μŠ€λŠ” μ„œλ‘œ 독립적이기 λ•Œλ¬Έμ— 각 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μ„œλ‘œ λ‹€λ₯Έ 값을 μœ μ§€ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—μ„œ 같은 값이 μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” λ³€μˆ˜λŠ” static을 λΆ™μ—¬μ„œ 클래슀 λ³€μˆ˜λ‘œ μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2) 클래슀 λ³€μˆ˜(staticλ³€μˆ˜)λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 μžˆλ‹€.

  • static이 뢙은 λ³€μˆ˜(클래슀 λ³€μˆ˜)λŠ” ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ 이미 μžλ™μ μœΌλ‘œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

3) 클래슀 λ©”μ„œλ“œ(staticλ©”μ„œλ“œ)λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

  • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€κ°€ λ°˜λ“œμ‹œ μ‘΄μž¬ν•΄μ•Όλ§Œ μ‚¬μš©ν•  수 μžˆλŠ”λ°, 클래슀 λ©”μ„œλ“œ(static)λŠ” μΈμŠ€ν„΄μŠ€ 생성 없이 호좜 κ°€λŠ₯ν•˜λ―€λ‘œ 클래슀 λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 클래슀 λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ‚¬μš©μ„ κΈˆμ§€ν•©λ‹ˆλ‹€.
  • λ°˜λ©΄μ— μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œλŠ” static이 뢙은 멀버듀을 μ‚¬μš©ν•˜λŠ” 것이 μ–Έμ œλ‚˜ κ°€λŠ₯ν•©λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€λŠ” 것은 staticλ³€μˆ˜κ°€ 이미 λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

4) λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, static을 λΆ™μ΄λŠ” 것을 κ³ λ €ν•œλ‹€.

  • λ©”μ„œλ“œμ˜ μž‘μ—…λ‚΄μš© μ€‘μ—μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό ν•„μš”λ‘œ ν•œλ‹€λ©΄, static을 뢙일 수 μ—†μŠ΅λ‹ˆλ‹€. 
  • λ°˜λŒ€λ‘œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ static을 λΆ™μ΄λŠ” 게  λ©”μ„œλ“œ ν˜ΈμΆœμ‹œκ°„μ΄ μ§§μ•„μ§€λ―€λ‘œ μ„±λŠ₯ ν–₯상에 μ’‹μŠ΅λ‹ˆλ‹€.
  • μ΄μœ λŠ” static을 μ•ˆ 뢙인 λ©”μ„œλ“œ(μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ)λŠ” μ‹€ν–‰ μ‹œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•  λ©”μ„œλ“œλ₯Ό μ°ΎλŠ” 과정이 μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ 더 였래 걸리기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ•„λž˜ μ˜ˆμ‹œ μ½”λ“œλ₯Ό λ³΄μ‹œλ©΄ 이해가 더 잘 λ˜μ‹€ 것 κ°™μŠ΅λ‹ˆλ‹€.

class MyMath2 {
    long a, b;

    // μΈμŠ€ν„΄μŠ€λ³€μˆ˜ a, bλ§Œμ„ μ΄μš©ν•΄μ„œ μž‘μ—…ν•˜λ―€λ‘œ λ§€κ°œλ³€μˆ˜κ°€ ν•„μš”μ—†λ‹€.
    long add() 	    { return a + b; }  // a, bλŠ” μΈμŠ€ν„΄μŠ€λ³€μˆ˜
    long subtract() { return a - b; }
    long multiply() { return a * b; }
    double divide() { return a / b; }

    // μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ™€ 관계없이 λ§€κ°œλ³€μˆ˜λ§ŒμœΌλ‘œ μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ‹€.
    static long   add(long a, long b) 	   	 { return a + b; } // a, bλŠ” μ§€μ—­λ³€μˆ˜
    static long   subtract(long a, long b)   { return a - b; }
    static long   multiply(long a, long b)	 { return a * b; }
    static double divide(double a, double b) { return a / b; }
}

class MyMathTest2 {
    public static void main(String args[]) {
        // ν΄λž˜μŠ€λ©”μ„œλ“œ 호좜. μΈμŠ€ν„΄μŠ€ 생성없이 ν˜ΈμΆœκ°€λŠ₯
        System.out.println(MyMath2.add(200L, 100L));
        System.out.println(MyMath2.subtract(200L, 100L));
        System.out.println(MyMath2.multiply(200L, 100L));
        System.out.println(MyMath2.divide(200.0, 100.0));

        MyMath2 mm = new MyMath2(); // μΈμŠ€ν„΄μŠ€λ₯Ό 생성
        mm.a = 200L;
        mm.b = 100L;
        // μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œλŠ” 객체생성 ν›„μ—λ§Œ 호좜이 κ°€λŠ₯함.
        System.out.println(mm.add());
        System.out.println(mm.subtract());
        System.out.println(mm.multiply());
        System.out.println(mm.divide());
    }
}

 

3. 클래슀(static) 멀버와 μΈμŠ€ν„΄μŠ€ 멀버 κ°„μ˜ 참쑰와 호좜

같은 ν΄λž˜μŠ€μ— μ†ν•œ 멀버듀 κ°„μ—λŠ” λ³„λ„μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ„œλ‘œ μ°Έμ‘° λ˜λŠ” 호좜이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 단, 클래슀 멀버가 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ°Έμ‘° λ˜λŠ” ν˜ΈμΆœν•˜κ³ μž ν•˜λŠ” κ²½μš°μ—λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성해야 ν•©λ‹ˆλ‹€.

 κ·Έ μ΄μœ λŠ” μΈμŠ€ν„΄μŠ€ 멀버가 μ‘΄μž¬ν•˜λŠ” μ‹œμ μ— 클래슀 λ©€λ²„λŠ” 항상 μ‘΄μž¬ν•˜μ§€λ§Œ, 클래슀 멀버가 μ‘΄μž¬ν•˜λŠ” μ‹œμ μ—λŠ” μΈμŠ€ν„΄μŠ€ 멀버가 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

class Test{
    
    void instanceMethod(){}         // μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ 
    static void staticMethod(){}    // static λ©”μ„œλ“œ
    
    void instanceMethod2(){         // μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
        instanceMethod();           // λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
        staticMethod();             // static λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
    }
    
    static void staticMethod2(){    // static λ©”μ„œλ“œ
        instanceMethod();           // μ—λŸ¬!(λΆˆκ°€λŠ₯) μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ 호좜 λΆˆκ°€λŠ₯
        staticMethod();             // static λ©”μ„œλ“œλŠ” 호좜 ν•  수 μžˆλ‹€.
    }
    
}

μœ„μ˜ μ½”λ“œλŠ” 같은 클래슀 λ‚΄μ˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ™€ staticλ©”μ„œλ“œ κ°„μ˜ ν˜ΈμΆœμ— λŒ€ν•΄μ„œ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. 같은 클래슀 λ‚΄μ˜ λ©”μ„œλ“œλŠ” μ„œλ‘œ 객체의 μƒμ„±μ΄λ‚˜ μ°Έμ‘° λ³€μˆ˜ 없이 직접 호좜이 κ°€λŠ₯ν•˜μ§€λ§Œ staticλ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ΄λ²ˆμ—” λ³€μˆ˜μ™€ λ©”μ„œλ“œ κ°„μ˜ ν˜ΈμΆœμ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œ κ°„μ˜ 호좜과 λ§ˆμ°¬κ°€μ§€λ‘œ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, static λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

class MemberCall {
	int iv = 10;
	static int cv = 20;

	int iv2 = cv;
//	static int cv2 = iv;		// μ—λŸ¬. ν΄λž˜μŠ€λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†μŒ.
	static int cv2 = new MemberCall().iv;	 // 이처럼 객체λ₯Ό 생성해야 μ‚¬μš©κ°€λŠ₯.

	static void staticMethod1() {
		System.out.println(cv);
//		System.out.println(iv); // μ—λŸ¬. ν΄λž˜μŠ€λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ₯Ό μ‚¬μš©λΆˆκ°€.
		MemberCall c = new MemberCall();	
		System.out.println(c.iv);   // 객체λ₯Ό μƒμ„±ν•œ 후에야 μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ˜ μ°Έμ‘°κ°€λŠ₯.
}

	void instanceMethod1() {
		System.out.println(cv);		
		System.out.println(iv); // μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œμ—μ„œλŠ” μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ₯Ό λ°”λ‘œ μ‚¬μš©κ°€λŠ₯.
}

	static void staticMethod2() {
		staticMethod1();
//		instanceMethod1(); // μ—λŸ¬. ν΄λž˜μŠ€λ©”μ„œλ“œμ—μ„œλŠ” μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μ—†μŒ.
		MemberCall c = new MemberCall();
		c.instanceMethod1(); // μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œ 후에야 ν˜ΈμΆœν•  수 있음.
 	}
	
	void instanceMethod2() {	// μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œμ—μ„œλŠ” μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œμ™€ ν΄λž˜μŠ€λ©”μ„œλ“œ
		staticMethod1();		//  λͺ¨λ‘ μΈμŠ€ν„΄μŠ€ 생성없이 λ°”λ‘œ 호좜이 κ°€λŠ₯ν•˜λ‹€.
		instanceMethod1();
	}
}

클래슀 멀버(클래슀 λ³€μˆ˜μ™€ 클래슀 λ©”μ„œλ“œ)λŠ” μ–Έμ œλ‚˜ μ°Έμ‘° λ˜λŠ” 호좜이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ 멀버가 클래슀 멀버λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ•„λ¬΄λŸ° λ¬Έμ œκ°€ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 클래슀 멀버 κ°„μ˜ μ°Έμ‘° λ˜λŠ” 호좜 μ—­μ‹œ μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

 κ·ΈλŸ¬λ‚˜, μΈμŠ€ν„΄μŠ€  멀버(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ)λŠ” λ°˜λ“œμ‹œ 객체λ₯Ό μƒμ„±ν•œ ν›„μ—λ§Œ μ°Έμ‘° λ˜λŠ” 호좜이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 클래슀 멀버가 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ°Έμ‘°, ν˜ΈμΆœν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체λ₯Ό μƒμ„±ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.

 ν•˜μ§€λ§Œ, μΈμŠ€ν„΄μŠ€ 멀버 κ°„μ˜ ν˜ΈμΆœμ—λŠ” μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€ 멀버가 μ‘΄μž¬ν•œλ‹€λŠ” 것은 μΈμŠ€ν„΄μŠ€κ°€ 이미 μƒμ„±λ˜μ—ˆλ‹€λŠ” 것을 μ˜λ―Έν•˜λ©°, 즉 λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€ 멀버듀도 λͺ¨λ‘ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.