Skip to content

Latest commit

Β 

History

History
115 lines (86 loc) Β· 4.65 KB

File metadata and controls

115 lines (86 loc) Β· 4.65 KB

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

1. ν†±λ ˆλ²¨ ν΄λž˜μŠ€μ™€ 정적 멀버 클래슀

{% hint style="info" %} ν†±λ ˆλ²¨ ν΄λž˜μŠ€λž€ μ†ŒμŠ€ 파일 μ•ˆμ—μ„œ λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ†ν•˜μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ μ„ μ–Έλœ 클래슀λ₯Ό λ§ν•œλ‹€. {% endhint %}

일반적으둜 μžλ°”μ—μ„œλŠ” μ†ŒμŠ€ νŒŒμΌλ‹Ή ν•˜λ‚˜μ˜ ν†±λ ˆλ²¨ 클래슀만 λ‘λŠ” 것이 ꢌμž₯λœλ‹€. κ·ΈλŸ¬λ‚˜ μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μ†ŒμŠ€ 파일 μ•ˆμ— μ—¬λŸ¬ 개의 ν†±λ ˆλ²¨ 클래슀λ₯Ό μ„ μ–Έν•˜λ”λΌλ„ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ μ΄λŠ” μ—¬λŸ¬ κ°€μ§€ 문제λ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.

1) ν†±λ ˆλ²¨ 클래슀λ₯Ό μ—¬λŸ¬ 개 μ„ μ–Έ μ‹œ 문제점

컴파일러의 처리 μˆœμ„œμ— λ”°λ₯Έ λ™μž‘ 차이:

  • λ§Œμ•½ μ†ŒμŠ€ 파일 ν•˜λ‚˜μ— 두 개의 ν†±λ ˆλ²¨ 클래슀λ₯Ό μ •μ˜ν•œ ν›„, λ™μΌν•œ μ΄λ¦„μœΌλ‘œ λ‹€λ₯Έ μ†ŒμŠ€ νŒŒμΌμ—λ„ 같은 ν†±λ ˆλ²¨ 클래슀λ₯Ό μ •μ˜ν–ˆλ‹€λ©΄, μ–΄λŠ νŒŒμΌμ„ λ¨Όμ € μ»΄νŒŒμΌν•˜λŠλƒμ— 따라 ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ΄ λ‹¬λΌμ§ˆ 수 μžˆλ‹€.
  • μ΄λŠ” 예기치 λͺ»ν•œ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 있으며, μ½”λ“œκ°€ μ–΄λ””μ„œ μ–΄λ–»κ²Œ 싀행될지 μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“ λ‹€.

μ˜ˆμ‹œ

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

class Dessert {
    static final String NAME = "cake";
}
// Dessert.java
class Utensil {
    static final String NAME = "pot";
}

class Dessert {
    static final String NAME = "pie";
}
  • λ§Œμ•½ javac Main.java Utensil.java λͺ…λ ΉμœΌλ‘œ μ»΄νŒŒμΌν•˜λ©΄ pancake이 좜λ ₯λœλ‹€.
  • λ°˜λ©΄μ— javac Dessert.java Main.java λͺ…λ ΉμœΌλ‘œ μ»΄νŒŒμΌν•˜λ©΄ potpieκ°€ 좜λ ₯λœλ‹€.
  • 같은 ν”„λ‘œκ·Έλž¨μ΄λΌλ„ 컴파일 μˆœμ„œμ— 따라 μ „ν˜€ λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ‚³κ²Œ λœλ‹€.

2) ν•΄κ²°μ±…

ν†±λ ˆλ²¨ 클래슀λ₯Ό 각각의 파일둜 λΆ„λ¦¬ν•˜λ©΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€. 각 ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” κ³ μœ ν•œ μ†ŒμŠ€ νŒŒμΌμ„ κ°€μ Έμ•Ό ν•˜λ©°, μ΄λ ‡κ²Œ ν•˜λ©΄ 컴파일 μˆœμ„œμ— 관계없이 μ˜ˆμƒν•œ λŒ€λ‘œ ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•œλ‹€.

ν•˜μ§€λ§Œ μ—¬λŸ¬ ν†±λ ˆλ²¨ 클래슀λ₯Ό ν•œ νŒŒμΌμ— 두고 μ‹Άλ‹€λ©΄ 정적 멀버 클래슀λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

정적 멀버 클래슀둜 λ³€κ²½

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

    private static class Utensil {  // Utensil을 정적 멀버 클래슀둜 μ„ μ–Έ
        static final String NAME = "pan";
    }

    private static class Dessert {  // Dessertλ₯Ό 정적 멀버 클래슀둜 μ„ μ–Έ
        static final String NAME = "cake";
    }
}

λΆ€κ°€ μ„€λͺ…: 정적 멀버 클래슀의 μž₯점

  • 독립성: 정적 멀버 ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•  수 μžˆμœΌλ―€λ‘œ, μ™ΈλΆ€ 클래슀의 μƒνƒœλ₯Ό κ³΅μœ ν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ λ°”κΉ₯ ν΄λž˜μŠ€μ— μ†ν•œ 클래슀처럼 μž‘λ™ν•œλ‹€.
  • μ ‘κ·Όμ„±: private으둜 μ„ μ–Έν•˜λ©΄ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μ—†κ²Œ ν•˜μ—¬ λΆˆν•„μš”ν•œ λ…ΈμΆœμ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ½”λ“œμ˜ 가독성이 μ’‹μ•„μ§€κ³ , λΆˆν•„μš”ν•œ μ°Έμ‘°λ₯Ό 쀄여 λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ˜ˆλ°©ν•  수 μžˆλ‹€.
  • ꡬ쑰적 정리: μ—¬λŸ¬ κ΄€λ ¨λœ ν΄λž˜μŠ€λ“€μ„ ν•˜λ‚˜μ˜ νŒŒμΌμ— 두고 싢을 λ•Œ, 정적 멀버 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ 더 읽기 μ‰¬μ›Œμ§€κ³  μœ μ§€λ³΄μˆ˜λ„ μš©μ΄ν•΄μ§„λ‹€.

✨ μ΅œμ’… 정리

μ†ŒμŠ€ 파일 ν•˜λ‚˜μ—λŠ” λ°˜λ“œμ‹œ ν†±λ ˆλ²¨ 클래슀(ν˜Ήμ€ ν†±λ ˆλ²¨ μΈν„°νŽ˜μ΄μŠ€)λ₯Ό ν•˜λ‚˜λ§Œ λ‹΄μž.

src/
  com/
    example/
      ClassA.java
package com.example;

public class ClassA {
    public void print() {
        System.out.println("This is ClassA");
    }
}

class ClassB {
    public void print() {
        System.out.println("This is ClassB");
    }
}
  1. ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” 보톡 μ†ŒμŠ€ νŒŒμΌλ‹Ή ν•˜λ‚˜λ§Œ μ„ μ–Έν•˜λŠ” 것이 μ’‹λ‹€. μ—¬λŸ¬ ν†±λ ˆλ²¨ 클래슀λ₯Ό ν•œ νŒŒμΌμ— μ •μ˜ν•˜λ©΄, 컴파일 μˆœμ„œμ— 따라 ν”„λ‘œκ·Έλž¨ λ™μž‘μ΄ λ‹¬λΌμ§ˆ 수 μžˆμ–΄ μœ μ§€λ³΄μˆ˜μ™€ 디버깅이 μ–΄λ €μ›Œμ§„λ‹€.
  2. 정적 멀버 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μ‚¬μš©λ  수 μžˆμœΌλ©΄μ„œλ„ μ™ΈλΆ€ 클래슀의 μƒνƒœμ™€ λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•  수 μžˆμ–΄ μ½”λ“œμ˜ μ•ˆμ •μ„±κ³Ό νš¨μœ¨μ„±μ΄ λ†’μ•„μ§„λ‹€.
  3. 정적 멀버 클래슀λ₯Ό 적절히 ν™œμš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ˜λ©°, λΆˆν•„μš”ν•œ μ™ΈλΆ€ 참쑰둜 μΈν•œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•  수 μžˆλ‹€