item 5 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e μ•„μ΄ν…œ 5λ₯Ό μš”μ•½ν•œ λ‚΄μš© μž…λ‹ˆλ‹€.

λ§Žμ€ ν΄λž˜μŠ€κ°€ ν•˜λ‚˜ μ΄μƒμ˜ μžμ›μ— μ˜μ‘΄ν•œλ‹€. 이런 클래슀λ₯Ό 정적 μœ ν‹Έλ¦¬ν‹° 클래슀둜 κ΅¬ν˜„ν•œ λͺ¨μŠ΅μ„ λ“œλ¬Όμ§€ μ•Šκ²Œ λ³Ό 수 μžˆλ‹€.

Q1. 정적 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λž€ λ¬΄μ—‡μΌκΉŒ? 그리고 μ–΄λ–€κ²Œ μžˆμ„κΉŒ?

public class SpellChecker {
	privte static final Lexion dictionary = ...;

	private SpellChecker() {} // 객체 생성 방지
	public static SpellChecher INSTANCE = new SpellChecker(...);

	public boolean isValid(String word) { ... }
	public List<String> suggertions(String type) {...}
}

μœ„μ˜ μ½”λ“œλŠ” 사전을 단 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•œλ‹€κ³  κ°€μ •ν•œλ‹€λŠ” μ μ—μ„œ 그리 ν›Œλ₯­ν•΄ 보이지 μ•ŠλŠ”λ‹€. μ‹€μ „μ—μ„œλŠ” 사전이 μ–Έμ–΄λ³„λ‘œ λ”°λ‘œ 있고 특수 μ–΄νœ˜μš© 사전을 λ³„λ„λ‘œ 두기도 ν•œλ‹€.

ν•„λ“œμ—μ„œ final ν•œμ •μžλ₯Ό μ œκ±°ν•˜κ³  λ‹€λ₯Έ μ‚¬μ „μœΌλ‘œ κ΅μ²΄ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•  수 μžˆμ§€λ§Œ, μ•„μ‰½κ²Œλ„ 이 방식은 μ–΄μƒ‰ν•˜κ³  였λ₯˜λ₯Ό λ‚΄κΈ° μ‰¬μš°λ©° λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλŠ” μ“Έ 수 μ—†λ‹€. μ‚¬μš©ν•˜λŠ” μžμ›μ— 따라 λ™μž‘μ΄ λ‹¬λΌμ§€λŠ” ν΄λž˜μŠ€μ—λŠ” 정적 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λ‚˜ μ‹±κΈ€ν„΄ 방식이 μ ν•©ν•˜μ§€ μ•Šλ‹€.

이 쑰건을 λ§Œμ‘±ν•˜λŠ” κ°„λ‹¨ν•œ νŒ¨ν„΄μ΄ μžˆμœΌλ‹ˆ, λ°”λ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ μƒμ„±μžμ— ν•„μš”ν•œ μžμ›μ„ λ„˜κ²¨μ£ΌλŠ” 방식이닀.

public class SpellChecker {
	privte static final Lexion dictionary = ...;

	public SpellChecker(Lexion dictionary) {
		this.dictionary = Objects.requireNonNull(dictionar);
    }
    
	public boolean isValid(String word) { ... }
	public List<String> suggertions(String type) {...}
}

λΆˆλ³€μ„ 보μž₯ν•˜μ—¬ (같은 μžμ›μ„ μ‚¬μš©ν•˜λ €λŠ”) μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈκ°€ 의쑴 객체듀을 μ•ˆμ‹¬ν•˜κ³  κ³΅μœ ν•  수 μžˆκΈ°λ„ ν•œλ‹€. 의쑴 객체 μ£Όμž…μ€ μƒμ„±μž, 정적 νŒ©ν„°λ¦¬, λΉŒλ” νŒ¨ν„΄ λͺ¨λ‘μ— λ˜‘κ°™μ΄ μ‘μš©ν•  수 μžˆλ‹€.

이 νŒ¨ν„΄μ˜ μ“Έλ§Œν•œ λ³€ν˜•μœΌλ‘œ μƒμ„±μžμ— μžμ› νŒ©ν„°λ¦¬λ₯Ό λ„˜κ²¨μ£ΌλŠ” 방식이 μžˆλ‹€. νŒ©ν„°λ¦¬λž€ ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ νŠΉμ • νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜λ³΅ν•΄μ„œ λ§Œλ“€μ–΄μ£ΌλŠ” 객체λ₯Ό λ§ν•œλ‹€.

이 방식을 μ‚¬μš©ν•΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ λͺ…μ‹œν•œ νƒ€μž…μ˜ ν•˜μœ„ νƒ€μž…μ΄λΌλ©΄ 무엇이든 생성할 수 μžˆλŠ” νŒ©ν„°λ¦¬λ₯Ό λ„˜κΈΈ 수 μžˆλ‹€.

의쑴 객체 μ£Όμž…μ΄ μœ μ—°μ„±κ³Ό ν…ŒμŠ€νŠΈ μš©μ΄μ„±μ„ κ°œμ„ ν•΄μ£ΌκΈ΄ ν•˜μ§€λ§Œ, μ˜μ‘΄μ„±μ΄ 수천 κ°œλ‚˜ λ˜λŠ” 큰 ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ½”λ“œλ₯Ό μ΄μ§€λŸ½κ²Œ λ§Œλ“€κΈ°λ„ ν•œλ‹€.

ν”„λ ˆμž„μ›Œν¬ ν™œμš©λ²•μ€ 이 μ±…μ—μ„œ λ‹€λ£° μ£Όμ œλŠ” μ•„λ‹ˆμ§€λ§Œ, 이듀 ν”„λ ˆμž„μ›Œν¬λŠ” 의쑴 객체λ₯Ό 직접 μ£Όμž…ν•˜λ„λ‘ μ„€κ³„λœ APIλ₯Ό μ•Œλ§žκ²Œ μ‘μš©ν•΄ μ‚¬μš©ν•˜κ³  μžˆμŒμ„ μ–ΈκΈ‰ν•΄λ‘”λ‹€.

정리

ν΄λž˜μŠ€κ°€ λ‚΄λΆ€μ μœΌλ‘œ ν•˜λ‚˜ μ΄μƒμ˜ μžμ›μ— μ˜μ‘΄ν•˜κ³ , κ·Έ μžμ›μ΄ 클래슀 λ™μž‘μ— 영ν–₯을 μ€€λ‹€λ©΄ μ‹±κΈ€ν„΄κ³Ό 정적 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€. 이 μžμ›λ“€μ„ ν΄λž˜μŠ€κ°€ 직접 λ§Œλ“€κ²Œ ν•΄μ„œλ„ μ•ˆλœλ‹€.

⚠️ **GitHub.com Fallback** ⚠️