πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” ν•œ νŒŒμΌμ— ν•˜λ‚˜λ§Œ λ‹΄μœΌλΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ25)]

Amenable 2023. 5. 8. 23:33

  μ†ŒμŠ€ νŒŒμΌμ— ν•˜λ‚˜μ— ν†±λ ˆλ²¨ 클래슀(ν†±λ ˆλ²¨ ν΄λž˜μŠ€λž€ νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆλŠ” κ°€μž₯ λ°”κΉ₯에 μžˆλŠ” 클래슀λ₯Ό λ§ν•œλ‹€)λ₯Ό μ—¬λŸ¬ 개 μ„ μ–Έν•˜λ”λΌλ„ μ»΄νŒŒμΌν•  λ•ŒλŠ” λ¬Έμ œκ°€ μ—†λ‹€. μœ νš¨ν•œ λ¬Έλ²•μ΄λΌλŠ” 것이닀.

  ν•˜μ§€λ§Œ 이것은 μ•„λ¬΄λŸ° 득이 μ—†μ„λΏλ”λŸ¬ μ‹¬κ°ν•œ μœ„ν—˜μ„ κ°μˆ˜ν•΄μ•Ό ν•œλ‹€. κ·Έ μ΄μœ λŠ” ν•œ μ†ŒμŠ€ νŒŒμΌμ— ν†±λ ˆλ²¨ 클래슀λ₯Ό μ—¬λŸ¬ 개 μ„ μ–Έν•˜λ©΄ 컴파일 μˆœμ„œμ— 따라 κ²°κ³Όκ°€ λ‹¬λΌμ§ˆ 수 있기 λ•Œλ¬Έμ΄λ‹€.

  문제 상황에 λŒ€ν•œ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ³ , 해결책을 μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

 

1. 문제점 πŸ’

  μ§‘κΈ°(Utensil)와 λ””μ €νŠΈ(Dessert) ν΄λž˜μŠ€κ°€ Utensil.javaλΌλŠ” ν•œ νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆλ‹€κ³  ν•˜μž.

// Utensil.java

class Utensil {
    static final String NAME = "pan";
}

class Dessert {
    static final String NAME = "cake";
}

  이런 κ²½μš°μ—λŠ” μ•„λž˜ μ½”λ“œκ°€ μž‘λ™ν•˜λŠ”λ° λ¬Έμ œκ°€ μ—†λ‹€.

public class Main {
    
    public static void main(String[] args) {
        System.out.println(Utensil.NAME + Dessert.NAME); // pancake
    }
}

  ν•˜μ§€λ§Œ, Dessert.javaλΌλŠ” νŒŒμΌμ„ μ•„λž˜μ™€ 같이 λ§Œλ“€μ—ˆλ‹€κ³  ν•œλ‹€λ©΄ 컴파일 μˆœμ„œμ— λ”°λΌμ„œ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

// Dessert.java

class Utensil {
    static final String NAME = "pan";
}

class Dessert {
    static final String NAME = "cake";
}

πŸ“˜ 1. 컴파일 μˆœμ„œ(1)

  • javac Main.java Dessert.java

  μœ„μ™€ 같은 컴파일 μˆœμ„œλΌλ©΄ μ•„μ£Ό 운이 μ’‹κ²Œλ„ 컴파일 였λ₯˜κ°€ λ°œμƒν•˜κ³  μ»΄νŒŒμΌλŸ¬κ°€ Utensilκ³Ό Dessert 클래슀λ₯Ό 쀑볡 μ •μ˜ν–ˆλ‹€κ³  μ•Œλ €μ€„ 것이닀.

  κ°€μž₯ λ¨Όμ € Main.javaλ₯Ό μ»΄νŒŒμΌν•˜κ³ , κ·Έ μ•ˆμ—μ„œ Dessert 참쑰보닀 λ¨Όμ € λ‚˜μ˜€λŠ” Utensil μ°Έμ‘°λ₯Ό λ§Œλ‚˜λ©΄ Utensil.java νŒŒμΌμ„ μ‚΄νŽ΄ Utensilκ³Ό Dessertλ₯Ό λͺ¨λ‘ μ°Ύμ•„λ‚Έλ‹€. 그리고 두 번째 λͺ…령쀄 인수둜 λ„˜μ–΄μ˜¨ Dessert.javaλ₯Ό μ²˜λ¦¬ν•˜λ €κ³  ν•  λ•Œ 같은 클래슀의 μ •μ˜κ°€ 이미 μžˆμŒμ„ μ•Œ 수 있기 λ•Œλ¬Έμ— 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

πŸ“˜ 2. μ»΄νŒŒμΌ μˆœμ„œ(2)

  • javac Main.java

λ˜λŠ”

  • javac Main.java Utensil.java

  이런 κ²½μš°μ—λŠ” Dessert.javaλ₯Ό μ •μ˜ν•˜κΈ° 전에 μ‚΄νŽ΄λ³Έ κ²ƒμ²˜λŸΌ pancakeλ₯Ό 좜λ ₯ν•œλ‹€.

πŸ“˜ 3. μ»΄νŒŒμΌ μˆœμ„œ(3)

  • javac Dessert.java Main.java

  ν•˜μ§€λ§Œ μœ„μ™€ 같은 μˆœμ„œλ‘œ μ»΄νŒŒμΌλœλ‹€λ©΄ potpieλ₯Ό μΆœλ ₯ν•œλ‹€.

 

  즉, μ΄λ ‡κ²Œ μ–΄λŠ μ†ŒμŠ€ νŒŒμΌμ„ λ¨Όμ € μ»΄νŒŒμΌν•˜λŠλƒμ— λ”°λΌμ„œ κ²°κ³Όκ°€ λ‹¬λΌμ§„λ‹€. 

  ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” ν•œ νŒŒμΌμ— ν•˜λ‚˜λ§Œ λ‹΄μ•„μ•Ό ν•œλ‹€.

 

2. ν•΄κ²°μ±… πŸ’Ž

  해결책은 κ°„λ‹¨ν•˜λ‹€. ν†±λ ˆλ²¨ ν΄λž˜μŠ€λ“€(Utensilκ³Ό Dessert)을 μ„œλ‘œ λ‹€λ₯Έ μ†ŒμŠ€ 파일둜 λΆ„λ¦¬ν•˜λŠ” 것이닀.

  λ§Œμ•½ ꡳ이 μ—¬λŸ¬ ν†±λ ˆλ²¨ 클래슀λ₯Ό ν•œ νŒŒμΌμ— λ‹΄κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 정적 멀버 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 κ³ λ €ν•΄ λ³Ό 수 μžˆλ‹€.

// ν†±λ ˆλ²¨ ν΄λž˜μŠ€λ“€μ„ 정적 멀버 클래슀둜 λ°”κΏ”λ³Έ λͺ¨μŠ΅
public class Test {

    public static void main(String[] args) {
        System.out.println(Utensil.NAME + Dessert.NAME);
    }

    private static class Utensil {
        static final String NAME = "pan";
    }

    private static class Dessert {
        static final String NAME = "cake";
    }
}

  λ‹€λ₯Έ ν΄λž˜μŠ€μ— λ”Έλ¦° 뢀차적인 클래슀라면 정적 멀버 클래슀둜 λ§Œλ“œλŠ” μͺ½μ΄ 일반적으둜 더 λ‚˜μ„ 것이닀. 읽기 μ’‹κ³ , private으둜 μ„ μ–Έν•˜λ©΄ μ ‘κ·Ό λ²”μœ„λ„ μ΅œμ†Œλ‘œ 관리할 수 있기 λ•Œλ¬Έμ΄λ‹€.