Programming languages/Java

λ³€μˆ˜ (Variables)

yoooCo 2025. 3. 31. 12:51

🧠 Java λ³€μˆ˜ μ™„μ „ 정볡!

"λ³€μˆ˜λŠ” 데이터λ₯Ό λ‹΄λŠ” 그릇이닀" 🍽️




πŸ“Œ λ³€μˆ˜(Variable)λž€?

ν•˜λ‚˜μ˜ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 곡간
μžλ°”μ—μ„œ λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— 따라 μ—­ν• , 생λͺ…μ£ΌκΈ°, λ©”λͺ¨λ¦¬ μœ„μΉ˜κ°€ λ‹¬λΌμ Έμš”.
κ·Έ 차이λ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜λŠ” 건 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 첫걸음이죠! πŸš€

🧾 λ³€μˆ˜ 이름 κ·œμΉ™

  • 문자 / _ / $둜 μ‹œμž‘ κ°€λŠ₯ (숫자 μ‹œμž‘ ❌)
  • 길이 μ œν•œ μ—†μŒ
  • λŒ€μ†Œλ¬Έμž ꡬ뢄
  • μœ λ‹ˆμ½”λ“œ 문자 μ‚¬μš© κ°€λŠ₯ (ν•œκΈ€λ„ κ°€λŠ₯)
public class Variables {     
    int a = 1;     
    int _a = 1;     
    int $a = 1;     
    final int A = 1;     
    int ν•œκΈ€κ°€λŠ₯ = 1; 
}


πŸ” λ³€μˆ˜μ˜ μ’…λ₯˜

μžλ°” λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— 따라 크게 3κ°€μ§€λ‘œ λ‚˜λˆ μš”.



βœ… 1. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ (Instance Variable)

  • 클래슀 μ˜μ—­μ— μ„ μ–Έ (단, static 없이!)
  • 객체가 생성될 λ•Œ νž™ λ©”λͺ¨λ¦¬μ— ν• λ‹Ή
  • 각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λ…λ¦½λœ μ €μž₯곡간을 가짐
public class Dog {
    String name;  // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

    public void bark() {
        System.out.println(name + "κ°€ μ§–μ–΄μš”!");
    }


}
public class Main{
    public static void main(String[] args){
        Dog d1 = new Dog();
        Dog d2 = new Dog();
        d1.name = "μ΄ˆμ½”";
        d2.name = "바둑이";
    }
}


βœ… 2. 클래슀 λ³€μˆ˜ (Class Variable)

  • static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©
  • ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ  λ•Œ 1번만 생성
  • λͺ¨λ“  객체가 κ³΅μœ ν•˜λŠ” μ €μž₯곡간
  • λ©”μ„œλ“œ μ˜μ—­(Method Area)에 μ €μž₯됨
public class Counter {
    static int count = 0; // 클래슀 λ³€μˆ˜

    public Counter() {
        count++; // λͺ¨λ“  객체가 count 곡유
    }
}
public class Main{

    public static void main(String[] args){
        System.out.println(Counter.count); // 클래슀λͺ…μœΌλ‘œ 직접 μ ‘κ·Ό κ°€λŠ₯
    }
}


βœ… 3. 지역 λ³€μˆ˜ (Local Variable)

  • λ©”μ„œλ“œ, μƒμ„±μž, λ˜λŠ” 블둝(for/while) λ‚΄λΆ€μ—μ„œ μ„ μ–Έ
  • 블둝 μ‹€ν–‰ μ‹œ 생성 β†’ μ’…λ£Œ μ‹œ μ†Œλ©Έ
  • μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일 μ—λŸ¬ λ°œμƒ!
public void greeting() {
    String message = "μ•ˆλ…•ν•˜μ„Έμš”"; // 지역 λ³€μˆ˜
    System.out.println(message);
}


πŸ”§ 전체 흐름 예제

public class Variables {
    static int a = 10;   // 클래슀 λ³€μˆ˜
    int b = 9;           // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

    public void iamMethod() {
        int c = 8;       // 지역 λ³€μˆ˜
        System.out.println("지역 λ³€μˆ˜: " + c);
    }
}

🧬 λ³€μˆ˜ μ’…λ₯˜ λΉ„κ΅ν‘œ

ν•­λͺ© μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 클래슀 λ³€μˆ˜ (static) 지역 λ³€μˆ˜
μ„ μ–Έ μœ„μΉ˜ 클래슀 λ‚΄λΆ€ 클래슀 λ‚΄λΆ€ (static) λ©”μ„œλ“œ/λΈ”λŸ­ λ‚΄λΆ€
생성 μ‹œμ  μΈμŠ€ν„΄μŠ€ 생성 μ‹œ 클래슀 λ‘œλ”© μ‹œ λ©”μ„œλ“œ 호좜 μ‹œ
μ†Œλ©Έ μ‹œμ  μΈμŠ€ν„΄μŠ€ μ†Œλ©Έ μ‹œ ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ‹œ λ©”μ„œλ“œ μ’…λ£Œ μ‹œ
λ©”λͺ¨λ¦¬ μœ„μΉ˜ νž™ (Heap) λ©”μ„œλ“œ μ˜μ—­ (Method Area) μŠ€νƒ (Stack)
κΈ°λ³Έκ°’ μžλ™ μ΄ˆκΈ°ν™” μžλ™ μ΄ˆκΈ°ν™” ❌ μ΄ˆκΈ°ν™” ν•„μš”
μ ‘κ·Ό 방식 객체둜 μ ‘κ·Ό 클래슀λͺ… λ˜λŠ” 객체둜 μ ‘κ·Ό ν•΄λ‹Ή λΈ”λŸ­ λ‚΄λΆ€μ—μ„œλ§Œ
곡유 μ—¬λΆ€ ❌ κ°μ²΄λ§ˆλ‹€ 별도 βœ… λͺ¨λ“  객체가 곡유 ❌ 곡유 μ•ˆ 함


βœ… 마무리 μš”μ•½

  • μžλ°” λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— 따라 μ—­ν• κ³Ό 수λͺ…이 λ‹€λ¦…λ‹ˆλ‹€.
  • static은 곡유용, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” 각 객체의 μ†μ„±μš©, 지역 λ³€μˆ˜λŠ” ν•œμ‹œμ  μ‚¬μš©μš©!
  • 객체지ν–₯ μ΄ν•΄μ˜ 핡심 ν¬μΈνŠΈλŠ” λ°”λ‘œ λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ΅¬λΆ„ν•˜λŠ” κ±°μ˜ˆμš” πŸ˜†