item 4 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

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

  • 정적 λ©”μ„œλ“œμ™€ 정적 ν•„λ“œλ§Œμ„ 담은 클래슀λ₯Ό λ§Œλ“€κ³  싢을 λ•Œ (객체지ν–₯적으둜 μ‚¬κ³ ν•˜μ§€ μ•ŠλŠ” 경우 λ‚¨μš©ν•˜λŠ” 방식)

λ‹€μŒ μ˜ˆμ‹œλ‘œ μ•Œμ•„λ³΄μž.

  • java.lang.Math와 java.util.Arrays 처럼 κΈ°λ³Έ νƒ€μž… κ°’μ΄λ‚˜ λ°°μ—΄κ³Ό κ΄€λ ¨λœ λ©”μ„œλ“œλ“€μ„ λͺ¨μ•„놓을 수 μžˆλ‹€.
  • java.util.Collection 처럼 νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 객체λ₯Ό μƒμ„±ν•΄μ£ΌλŠ” 정적 λ©”μ„œλ“œ(ν˜Ήμ€ νŒ©ν† λ¦¬)λ₯Ό λͺ¨μ•„놓을 μˆ˜μžˆλ‹€. (java 8λΆ€ν„° 이런 λ©”μ„œλ“œλ₯Ό μΈν„°νŽ˜μ΄μŠ€μ— 넣을 수 μžˆλ‹€.)
  • final ν΄λž˜μŠ€μ™€ κ΄€λ ¨ν•œ λ©”μ„œλ“œλ“€μ„ λͺ¨μ•„놓을 λ•Œλ„ μ‚¬μš©ν•œλ‹€.

final 클래슀λ₯Ό μƒμ†ν•΄μ„œ ν•˜μœ„ ν΄λž˜μŠ€μ— λ©”μ„œλ“œλ₯Ό λ„£λŠ” 건 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

  • 정적 λ©€λ²„λ§Œ 담은 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ‘œ λ§Œλ“€μ–΄ μ“°λ €κ³  μ„€κ³„ν•œ 게 μ•„λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μƒμ„±μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€. λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ§€ μ•ŠλŠ” public μƒμ„±μžκ°€ λ§Œλ“€μ–΄μ§€λ©° μ˜λ„μΉ˜μ•Šκ²Œ μΈμŠ€ν„΄μŠ€ν™”ν•  수 있게 된 ν΄λž˜μŠ€κ°€ μ’…μ’… λͺ©κ²©λ˜κ³€ ν•œλ‹€.

μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰λŠ” 방법

  • 좔상 클래슀둜 λ§Œλ“œλŠ” κ²ƒμœΌλ‘œλŠ” μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막을 수 μ—†λ‹€. ν•˜μœ„ 클래슀λ₯Ό λ§Œλ“€μ–΄ μΈμŠ€ν„΄μŠ€ν™” ν•˜λ©΄ 그만이기 λ•Œλ¬Έμ΄λ‹€.

  • μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“œλŠ” κ²½μš°λŠ” 였직 λͺ…μ‹œλœ μƒμ„±μžκ°€ 없을 λ•Œ λΏμ΄λ‹ˆ private μƒμ„±μžλ₯Ό μΆ”κ°€ν•˜λ©΄ 클래슀의 μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막을 수 μžˆλ‹€.

  • μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μ—†λŠ” μœ ν‹Έλ¦¬ν‹° 클래슀

public class UtilityClass {
    //κΈ°λ³Έ μƒμ„±μžκ°€ λ§Œλ“€μ–΄μ§€λŠ” 것을 λ§‰λŠ”λ‹€. (μΈμŠ€ν„΄μŠ€ν™” λ°©μ§€μš©)
    private UtilityClass() {
        throw new AssertionError();
    }
    ... μ€‘λž΅ 
}

λͺ…μ‹œμ  μƒμ„±μžκ°€ privateμ΄λ‹ˆ 클래슀 λ°”κΉ₯μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λ‹€.

클래슀 μ•ˆμ—μ„œ μ‹€μˆ˜λ‘œλΌλ„ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šλ„λ‘ errorλ₯Ό 뱉어쀀닀.

ν•˜μœ„ ν΄λž˜μŠ€κ°€ μƒμœ„ 클래슀의 μƒμ„±μžμ— μ ‘κ·Όν•  길이 λ§‰ν˜€λ²„λ € 상속을 λΆˆκ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” νš¨κ³Όλ„ μžˆλ‹€.

핡심 정리

λͺ…μ‹œμ  μƒμ„±μžλ₯Ό λ§Œλ“€μž.