item 67 Jung incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

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

μ•„λž˜μ™€ 같은 μ΅œμ ν™” 격언이 μžˆλ‹€.

(λ§Ήλͺ©μ μΈ μ–΄λ¦¬μ„μŒμ„ 포함해) κ·Έ μ–΄λ–€ 핑계보닀 νš¨μœ¨μ„±μ΄λΌλŠ” 이름 μ•„λž˜ 행해진 μ»΄ν“¨νŒ… 죄악이 더 λ§Žλ‹€(심지어 νš¨μœ¨μ„ 높이지도 λͺ»ν•˜λ©΄μ„œ)
μœŒλ¦¬μ—„ μšΈν”„

(μ „μ²΄μ˜ 97% 정도인) μžκ·Έλ§ˆν•œ νš¨μœ¨μ„±μ€ λͺ¨λ‘ 잊자. μ„£λΆ€λ₯Έ μ΅œμ ν™”κ°€ λ§Œμ•…μ˜ 근원이닀.
λ„λ„λ“œ ν¬λˆ„μŠ€

μ΅œμ ν™”λ₯Ό ν•  λ•ŒλŠ” λ‹€μŒ 두 κ·œμΉ™μ„ λ”°λ₯΄λΌ.
첫 번째, ν•˜μ§€ 마라
두 번째, (μ „λ¬Έκ°€ ν•œμ •)아직 ν•˜μ§€ 마라. λ‹€μ‹œ 말해, μ™„μ „νžˆ λͺ…λ°±ν•˜κ³  μ΅œμ ν™”λ˜μ§€ μ•Šμ€ 해법을 찾을 λ•ŒκΉŒμ§€λŠ” ν•˜μ§€ 마라
M. A. 잭슨

μ΅œμ ν™”λŠ” 쒋은 κ²°κ³Όλ³΄λ‹€λŠ” ν•΄λ‘œμš΄ 결과둜 이어지기 쉽고, μ„£λΆˆλ¦¬ μ§„ν–‰ν•˜λ©΄ 특히 더 κ·Έλ ‡λ‹€. λΉ λ₯Έ ν”„λ‘œκ·Έλž¨λ³΄λ‹€λŠ” 쒋은 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. 쒋은 ν”„λ‘œκ·Έλž¨μ΄μ§€λ§Œ μ›ν•˜λŠ” μ„±λŠ₯이 λ‚˜μ˜€μ§€ μ•ŠλŠ”λ‹€λ©΄ κ·Έ μ•„ν‚€ν…μ²˜ μžμ²΄κ°€ μ΅œμ ν™”ν•  수 μžˆλŠ” 길을 μ•ˆλ‚΄ν•΄μ€„ 것이닀. 쒋은 ν”„λ‘œκ·Έλž¨μ€ 정보 은닉 원칙을 λ”°λ₯΄λ―€λ‘œ κ°œλ³„ κ΅¬μ„±μš”μ†Œμ˜ λ‚΄λΆ€λ₯Ό λ…λ¦½μ μœΌλ‘œ 섀계할 수 μžˆλ‹€. λ”°λΌμ„œ μ‹œμŠ€ν…œμ˜ λ‚˜λ¨Έμ§€μ— 영ν–₯을 주지 μ•Šκ³ λ„ 각 μš”μ†Œλ₯Ό λ‹€μ‹œ 섀계할 수 μžˆλ‹€.

κ΅¬ν˜„μƒμ˜ λ¬Έμ œλŠ” λ‚˜μ€‘μ— μ΅œμ ν™”ν•΄ ν•΄κ²°ν•  수 μžˆμ§€λ§Œ, μ•„ν‚€ν…μ²˜μ˜ 결함이 μ„±λŠ₯을 μ œν•œν•˜λŠ” 상황이라면 μ‹œμŠ€ν…œ 전체λ₯Ό λ‹€μ‹œ μž‘μ„±ν•˜μ§€ μ•Šκ³ λŠ” ν•΄κ²°ν•˜κΈ° λΆˆκ°€λŠ₯ν•  수 μžˆλ‹€. λ”°λΌμ„œ 섀계 λ‹¨κ³„μ—μ„œ μ„±λŠ₯을 λ°˜λ“œμ‹œ 염두에 두어야 ν•œλ‹€.

μ„±λŠ₯을 μ œν•œν•˜λŠ” 섀계λ₯Ό ν”Όν•˜λΌ.

μ™„μ„± ν›„ λ³€κ²½ν•˜κΈ°κ°€ κ°€μž₯ μ–΄λ €μš΄ 섀계 μš”μ†ŒλŠ” λ°”λ‘œ μ»΄ν¬λ„ŒνŠΈλΌλ¦¬, ν˜Ήμ€ μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Όμ˜ μ†Œν†΅ 방식이닀.

APIλ₯Ό 섀계할 λ•Œ μ„±λŠ₯에 μ£ΌλŠ” 영ν–₯을 κ³ λ €ν•˜λΌ.

public νƒ€μž…μ„ κ°€λ³€μœΌλ‘œ λ§Œλ“€λ©΄, 즉 λ‚΄λΆ€ 데이터λ₯Ό λ³€κ²½ν•  수 있게 λ§Œλ“€λ©΄ λΆˆν•„μš”ν•œ 방어적 볡사λ₯Ό μˆ˜μ—†μ΄ μœ λ°œν•  수 μžˆλ‹€. λΉ„μŠ·ν•˜κ²Œ, μ»΄ν¬μ§€μ…˜μœΌλ‘œ ν•΄κ²°ν•  수 μžˆμŒμ—λ„ 상속 λ°©μ‹μœΌλ‘œ μ„€κ³„ν•œ public ν΄λž˜μŠ€λŠ” μƒμœ„ ν΄λž˜μŠ€μ— μ˜μ›νžˆ μ’…μ†λ˜λ©° κ·Έ μ„±λŠ₯ μ œμ•½κΉŒμ§€λ„ λ¬Όλ €λ°›κ²Œ λœλ‹€. νŠΉμ • κ΅¬ν˜„μ²΄μ— μ’…μ†λ˜κ²Œ ν•˜μ—¬, λ‚˜μ€‘μ— 더 λΉ λ₯Έ κ΅¬ν˜„μ²΄κ°€ λ‚˜μ˜€λ”λΌλ„ μ΄μš©ν•˜μ§€ λͺ»ν•˜κ²Œ λœλ‹€.

java.awt.Component 클래슀의 getSize λ©”μ„œλ“œλ₯Ό μƒκ°ν•΄λ³΄μž. Dimension μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•  뿐만 μ•„λ‹ˆλΌ κ°€λ³€μœΌλ‘œ μ„€κ³„λ˜μ–΄ getSizeλ₯Ό ν˜ΈμΆœν•˜λŠ” λͺ¨λ“  κ³³μ—μ„œ Dimension μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘œ μƒμ„±ν•΄μ•Όλ§Œ ν•œλ‹€.

public Dimension getSize() {
    return size();
}

@Deprecated
public Dimension size() {
    return new Dimension(width, height);
}

Dimension을 λΆˆλ³€μœΌλ‘œ λ§Œλ“œλŠ” 게 κ°€μž₯ μ΄μƒμ μ΄μ§€λ§Œ, getSizeλ₯Ό getWidth와 getHeight둜 λ‚˜λˆ„λŠ” 방법도 μžˆλ‹€. 즉, Dimension 객체의 κΈ°λ³Έ νƒ€μž… 값듀을 λ”°λ‘œλ”°λ‘œ λ°˜ν™˜ν•˜λŠ” 방식이닀.

public Long getSize() {
    return this.getWight() * this.getHeight();
}

μ„±λŠ₯을 μœ„ν•΄ APIλ₯Ό μ™œκ³‘ν•˜λŠ” 건 맀우 μ•ˆ 쒋은 생각이닀. APIλ₯Ό μ™œκ³‘ν•˜λ„λ‘ λ§Œλ“  κ·Έ μ„±λŠ₯ λ¬Έμ œλŠ” ν•΄λ‹Ή ν”Œλž«νΌμ΄λ‚˜ μ•„λž«λ‹¨ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ‹€μŒ λ²„μ „μ—μ„œ μ‚¬λΌμ§ˆ μˆ˜λ„ μžˆμ§€λ§Œ, μ™œκ³‘λœ API와 이λ₯Ό μ§€μ›ν•˜λŠ” 데 λ”°λ₯΄λŠ” 고톡은 μ˜μ›νžˆ 계속될 것이닀.

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