πŸ“™ Java

[Java] μƒμ„±μžμ™€ λ‚΄λΆ€ 클래슀

ji_wonna 2022. 9. 5. 20:56

μƒμ„±μž

new ν‚€μ›Œλ“œλ₯Ό 톡해 μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ ν˜ΈμΆœλ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ΄ˆκΈ°ν™” λ©”μ„œλ“œμ΄λ‹€.

μƒμ„±μžλŠ” λ©”μ„œλ“œμ™€ λΉ„μŠ·ν•œ ꡬ쑰λ₯Ό κ°–κ³  μžˆμ§€λ§Œ 클래슀의 이름과 같은 이름을 μ‚¬μš©ν•œλ‹€λŠ” 점과 λ°˜ν™˜ νƒ€μž…μ΄ μ—†λ‹€λŠ” μ μ—μ„œ λ©”μ„œλ“œμ™€λŠ” 큰 차이λ₯Ό κ°–λŠ”λ‹€.

 

this와 this()

this() λ©”μ„œλ“œλŠ” μžμ‹ μ΄ μ†ν•œ ν΄λž˜μŠ€μ—μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λœλ‹€. λ°˜λ“œμ‹œ μƒμ„±μž λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 있으며 첫 번째 쀄에 μœ„μΉ˜ν•΄μ•Ό ν•œλ‹€.

public class Test {
    public static void main(String[] args) {
        Hello hello = new Hello();
        Hello hello2 = new Hello(10);
    }
}

class Hello  {
    public Hello() {
        System.out.println("Hello의 첫 번째 μƒμ„±μž 호좜!");
    };

    public Hello(int x) {
        this();//Hello() μ‹€ν–‰
        System.out.println("Hello의 두 번째 μƒμ„±μž 호좜!");
    }
}

//Output
Hello의 첫 번째 μƒμ„±μž 호좜!
Hello의 첫 번째 μƒμ„±μž 호좜!
Hello의 두 번째 μƒμ„±μž 호좜!

this()κ°€ ν˜ΈμΆœλ˜μ–΄ λ‹€μ‹œ 첫 번째 μƒμ„±μžκ°€ 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

 

 

this ν‚€μ›Œλ“œλŠ” this()와 λΉ„μŠ·ν•˜κ²Œ(?) μƒκ²Όμ§€λ§Œ μ „ν˜€ λ‹€λ₯Έ 역할을 μˆ˜ν–‰ν•œλ‹€. thisλŠ” μΈμŠ€ν„΄μŠ€ 자기 μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” μ°Έμ‘° λ³€μˆ˜λ‘œ, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ λ§€κ°œλ³€μˆ˜λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©λœλ‹€. μ°Έμ‘° λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— κ°’μ—λŠ” μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°€ μ €μž₯λœλ‹€.

 

클래슀 μ™ΈλΆ€μ—μ„œ 멀버(ν•„λ“œ, λ©”μ„œλ“œ, μ΄λ„ˆ 클래슀)λ₯Ό ν˜ΈμΆœν•˜λ €λ©΄ λ¨Όμ € 객체λ₯Ό μƒμ„±ν•œ 후에 μ°Έμ‘° λ³€μˆ˜λͺ….멀버λͺ…μ˜ ν˜•νƒœλ‘œ μ ‘κ·Όν•΄μ•Ό ν•˜μ§€λ§Œ 클래슀 λ‚΄λΆ€μ—μ„œλŠ” 객체 생성 없이 this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

일반적인 경우 μ»΄νŒŒμΌλŸ¬κ°€ this.λ₯Ό μΆ”κ°€ν•΄μ£ΌκΈ° λ•Œλ¬Έμ— μƒλž΅ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€. ν•˜μ§€λ§Œ μžλ°”μ—μ„œ μ œκ³΅ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ APIμ—λŠ” λ©”μ„œλ“œμ˜ 지역 λ³€μˆ˜λͺ…이 ν•„λ“œλͺ…κ³Ό λ™μΌν•˜κ²Œ κ΅¬μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ— this.λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ λ‘˜μ„ ꡬ뢄해야 ν•œλ‹€.

class Ex{
    int m,n;//ν•„λ“œ, 0으둜 κ°•μ œ μ΄ˆκΈ°ν™”

    void init(int m, int n) {
        // λ§€κ°œλ³€μˆ˜μΈ m, n은 μ§€μ—­λ³€μˆ˜μ— ν• λ‹Ήλ˜μ–΄ init()μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.
        m = m;
        n = n;
    }
}

public class This_ex {
    public static void main(String[] args) {

        Ex e = new Ex();
        // 객체의 m, n을 좜λ ₯(ν˜„μž¬ μ΄ˆκΈ°ν™”λ§Œ 진행)
        System.out.println(e.m); // 0
        System.out.println(e.n); // 0

        // ν•΄λ‹Ή 값은 λ©”μ„œλ“œμ—μ„œλ§Œ ν™œμš©κ°€λŠ₯
        e.init(5, 10);
        System.out.println(e.m); // 0
        System.out.println(e.n); // 0
    }
}

e객체의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ init()의 λ³€μˆ˜λͺ…이 m, n으둜 λ™μΌν•˜κ²Œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. 이 κ²½μš°μ— μ»΄νŒŒμΌλŸ¬λŠ” m, n을 더 쒁은 λ²”μœ„μΈ 지역 λ³€μˆ˜λ‘œ μΈμ‹ν•˜μ—¬ ν•΄λ‹Ή λ©”μ„œλ“œ μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•  수 있게 λœλ‹€. λ”°λΌμ„œ ν•„λ“œ 값이 5, 10으둜 λ°”λ€Œμ§€ μ•Šκ³  0이 좜λ ₯λœλ‹€. μ•„λ§ˆλ„ μž‘μ„±μžλŠ” μ΄ˆκΈ°ν™” 값이 μ•„λ‹Œ λ³€κ²½λœ ν•„λ“œ 값이 좜λ ₯λ˜λŠ” 것을 μ˜λ„ν–ˆμ„ 것이닀. μž‘μ„±μžκ°€ μ˜λ„ν•œ λŒ€λ‘œ λ„˜κ²¨λ°›μ€ λ§€κ°œλ³€μˆ˜λ₯Ό ν•„λ“œμ— λŒ€μž…ν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 this.ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

 

μˆ˜μ •ν•œ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

class Ex{
    int m,n;//ν•„λ“œ, 0으둜 κ°•μ œ μ΄ˆκΈ°ν™”

    void init(int m, int n) {
        // ν•„λ“œ 값에 λŒ€μž… λœλ‹€.
        this.m = m;
        this.n = n;
    }
}

public class This_ex {
    public static void main(String[] args) {

        Ex e = new Ex();
        // 객체의 m, n을 좜λ ₯(ν˜„μž¬ μ΄ˆκΈ°ν™”λ§Œ 진행)
        System.out.println(e.m); // 0
        System.out.println(e.n); // 0

        e.init(5, 10);
        System.out.println(e.m); // 5
        System.out.println(e.n); // 10
    }
}

 


 

λ‚΄λΆ€ 클래슀

λ‚΄λΆ€ 클래슀(Inner Class)λŠ” 클래슀 내뢀에 μ„ μ–Έλœ 클래슀둜, μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μ„œλ‘œ μ—°κ΄€λ˜μ–΄ μžˆμ„ λ•Œ μ‚¬μš©ν•œλ‹€.

λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ™ΈλΆ€ 클래슀의 멀버듀에 μ‰½κ²Œ μ ‘κ·Όν•  수 있으며 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€. λ˜ν•œ μ™ΈλΆ€μ μœΌλ‘œ λΆˆν•„μš”ν•œ 정보듀을 숨길 수 μžˆμ–΄μ„œ 객체지ν–₯의 핡심 원칙인 μΊ‘μŠν™”λ₯Ό λ‹¬μ„±ν•˜λŠ” 데 μœ μš©ν•˜λ‹€.

λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” λ³€μˆ˜κ°€ μ„ μ–Έ μœ„μΉ˜μ— 따라 κ΅¬λΆ„λ˜λŠ” 것과 μœ μ‚¬ν•˜κ²Œ κ·Έ μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ ꡬ뢄할 수 있으며 λ³€μˆ˜μ™€ μœ μ‚¬ν•˜κ²Œ μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€μ™€ 정적 λ‚΄λΆ€ 클래슀λ₯Ό 멀버 λ‚΄λΆ€ 클래슀라고 ν†΅μΉ­ν•œλ‹€.

  1. μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀
  2. 정적 λ‚΄λΆ€ 클래슀
  3. 지역 λ‚΄λΆ€ 클래슀