Item 4. Noninstantiability

μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €κ±°λ“  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ

λ³΄ν†΅μ˜ 상황은 μ•„λ‹ˆμ§€λ§Œ μ•„λž˜μ™€ 같은 κ²½μš°μ—λŠ” μΈμŠ€ν„΄μŠ€ν™” λΆˆκ°€ 클래슀λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ μ‘΄μž¬ν•œλ‹€.

  • 정적 λ©”μ„œλ“œμ™€ 정적 ν•„λ“œλ§Œμ„ 담은 ν΄λž˜μŠ€κ°€ ν•„μš”ν•  λ•Œ(ex. java.lang.Math, java.util.Arrays)

  • νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 객체λ₯Ό μƒμ„±ν•΄μ£ΌλŠ” 정적 λ©”μ„œλ“œλ₯Ό 담은 ν΄λž˜μŠ€κ°€ ν•„μš”ν•  λ•Œ(ex. java.util.Collections)

  • final ν΄λž˜μŠ€μ™€ κ΄€λ ¨ν•œ λ©”μ„œλ“œλ“€μ„ λͺ¨μ•„놓을 λ•Œ(ex. java.lang.reflect.Method)

λ•Œλ¬Έμ— μœ„μ™€ 같은 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λ“€μ€ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ μ“°λ €κ³  μ„€κ³„ν•œκ²Œ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ν™” λΆˆκ°€ 클래슀둜 λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

μΈμŠ€ν„΄μŠ€ν™” λΆˆκ°€ 클래슀λ₯Ό λ§Œλ“œλŠ” 방법

μƒμ„±μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ£Όμ§€λ§Œ, λͺ…μ‹œμ μœΌλ‘œ private μƒμ„±μžλ₯Ό μ„ μ–Έν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€. (**좔상 클래슀둜 λ§Œλ“€μ–΄λ„ μΈμŠ€ν„΄μŠ€ν™” λΆˆκ°€ ν΄λž˜μŠ€κ°€ λ˜μ§€λ§Œ, 상속을 λ°›μ•„ μΈμŠ€ν„΄μŠ€ν™” κ°€λŠ₯ν•œ ν΄λž˜μŠ€κ°€ λ§Œλ“€μ–΄μ§ˆ 수 있기 λ•Œλ¬Έμ— 이 방법은 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.)

class UtilityClass {
    // κΈ°λ³Έ μƒμ„±μžλ₯Ό private으둜 μ„ μ–Έν•˜κ³ , μ—λŸ¬λ₯Ό λ°œμƒν•΄ reflectionμ΄λ‚˜ λ‚΄λΆ€ λ©”μ„œλ“œλ₯Ό 톡해 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 것을 λ§‰λŠ”λ‹€.
    private UtilityClass() {
        throw new AssertionError();
    }
}

private μƒμ„±μžλ‘œ μ„ μ–Έν•˜λ©΄ 상속도 λΆˆκ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” νš¨κ³Όλ„ μžˆμ–΄ ν•˜μœ„ ν΄λž˜μŠ€κ°€ μƒκΈ°λŠ” 것도 막을 수 μžˆλ‹€.

Last updated