# [Effective Java] Item 4. μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막을 λ•Œ private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μž.
Study Repository

[Effective Java] Item 4. μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막을 λ•Œ private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μž.

by rlaehddnd0422

객체지ν–₯적으둜 쒋은 방식은 μ•„λ‹ˆμ§€λ§Œ, κ°œλ°œμžλ“€μ€ static 정적 λ©”μ†Œλ“œμ™€ static 정적 ν•„λ“œλ§Œμ„ 담을 클래슀λ₯Ό λ§Œλ“€κ³  싢을 λ•Œκ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

 

  • 예λ₯Όλ“€λ©΄ Mathλ‚˜ Arrays처럼 κΈ°λ³Έ νƒ€μž… κ°’μ΄λ‚˜, λ°°μ—΄ κ΄€λ ¨ λ©”μ†Œλ“œλ“€μ„ λͺ¨μ•„ 놓을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ˜λŠ” Collections 처럼 νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 객체λ₯Ό μƒμ„±ν•΄μ£ΌλŠ” 정적 λ©”μ†Œλ“œλ₯Ό λͺ¨μ•„놓을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ§ˆμ§€λ§‰μœΌλ‘œ final 클래슀λ₯Ό μƒμ†ν•΄μ„œ ν•˜μœ„ ν΄λž˜μŠ€μ— λ©”μ†Œλ“œλ₯Ό λ„£λŠ” 것은 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— final ν΄λž˜μŠ€μ™€ κ΄€λ ¨ν•œ λ©”μ†Œλ“œλ“€μ„ λͺ¨μ•„ 놓을 λ•Œλ„ μ‚¬μš©ν•  수 μžˆκ² μŠ΅λ‹ˆλ‹€. 

이런 정적 λ©€λ²„λ§Œ 담은 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ‘œ λ§Œλ“€μ–΄ μ“°λ €κ³  μ„€κ³„ν•œ 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μ•„μ£Όμ–΄μ•Όν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μƒμ„±μžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ£ΌκΈ° λ•Œλ¬Έμ—, μ˜λ„μΉ˜ μ•Šκ²Œ μΈμŠ€ν„΄μŠ€ν™” λ˜λŠ” 것을 κ°œλ°œμžκ°€ 직접 막아주어야 ν•©λ‹ˆλ‹€. 

 

이 λ•Œ abstract ν‚€μ›Œλ“œλ‘œ μΆ”μƒν΄λž˜μŠ€λ‘œ λ§Œλ“€μ–΄ μΈμŠ€ν„΄μŠ€ν™” ν•˜μ§€ λͺ»ν•˜κ²Œ 막을 μˆ˜λ„ μžˆκ² μ§€λ§Œ, abstract ν‚€μ›Œλ“œλ₯Ό λ³Έ μ‚¬μš©μžλŠ” 이λ₯Ό μƒμ†ν•΄μ„œ μ“°λΌλŠ” 의미둜 λ°›μ•„λ“€μ—¬μ§ˆ 수 μžˆκΈ°λ„ ν•˜κ³ , 좔상 클래슀λ₯Ό κ΅¬ν˜„ν•œ ν•˜μœ„ 클래슀λ₯Ό μΈμŠ€ν„΄μŠ€ν™” ν•  수 있기 λ•Œλ¬Έμ— 쒋은 방법은 μ•„λ‹™λ‹ˆλ‹€.

 

μΈμŠ€ν„΄μŠ€ν™”λ₯Ό ν™•μ‹€ν•˜κ²Œ λ§‰λŠ” 방법은 μ•„μ£Ό κ°„λ‹¨ν•©λ‹ˆλ‹€. λ°”λ‘œ κΈ°λ³Έ μƒμ„±μžλ₯Ό private으둜 μ„ μ–Έν•΄μ£Όλ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€. 

 

public class UtilClass {

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

여기에 더해 private 으둜 μƒμ„±μžλ₯Ό μ„ μ–Έν•˜λ‹€κ³  해도, 클래슀 λ‚΄λΆ€μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆμœΌλ‹ˆ 이 λ˜ν•œ ν™•μ‹€νžˆ 막아주기 μœ„ν•΄ private μƒμ„±μž 내에 μƒμ„±μžκ°€ μ‹€ν–‰λ˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€λ„λ‘ ν•¨μœΌλ‘œμ¨ 클래슀 μ•ˆμ—μ„œ μ‹€μˆ˜λ‘œλΌλ„ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šλ„λ‘ ν•  수 μžˆκ² μŠ΅λ‹ˆλ‹€!

private UtilClass() {
    throw new AssertionError();
}

 

그런데 μƒμ„±μžκ°€ λΆ„λͺ… μ‘΄μž¬λŠ” ν•˜λŠ”λ° ν˜ΈμΆœν•  μˆ˜λŠ” μ—†λ‹€κ³  ν•˜λ‹ˆ, μ§κ΄€μ μœΌλ‘œ 보이지 μ•Šμ£ . κ·ΈλŸ¬λ‹ˆ μ΄λŸ¬ν•œ μ½”λ“œμ—λŠ” μ μ ˆν•œ 주석을 달아주면 더 μ’‹μŠ΅λ‹ˆλ‹€.

 

이 방식은 상속도 λΆˆκ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” νš¨κ³Όκ°€ μžˆμ–΄, ν•˜μœ„ ν΄λž˜μŠ€κ°€ μƒμœ„ 클래슀의 μƒμ„±μžμ— μ ‘κ·Όν•  길이 λ§‰ν˜€ λ²„λ¦°λ‹€λŠ” 점에 μœ μ˜ν•©μ‹œλ‹€.

 

μ°Έκ³  : 상속받은 ν•˜μœ„ν΄λž˜μŠ€λ₯Ό 생성할 λ•ŒλŠ” μƒμœ„ 클래슀의 μƒμ„±μž 호좜이 λ¨Όμ € 이루어진닀.

 

 

λΈ”λ‘œκ·Έμ˜ 정보

Study Repository

rlaehddnd0422

ν™œλ™ν•˜κΈ°