item 12 incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

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

equals와 hashCode만큼 λŒ€λ‹¨νžˆ μ€‘μš”ν•˜μ§„ μ•Šμ§€λ§Œ toString을 잘 κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λŠ” μ‚¬μš©ν•˜κΈ°μ— 훨씬 즐겁고, κ·Έ 클래슀λ₯Ό μ‚¬μš©ν•œ μ‹œμŠ€ν…œμ€ λ””λ²„κΉ…ν•˜κΈ° 쉽닀.

toString을 μ œλŒ€λ‘œ μž¬μ •μ˜ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ“Έλͺ¨μ—†λŠ” λ©”μ‹œμ§€λ§Œ λ‘œκ·Έμ— 남을 것이닀.

toString을 κ΅¬ν˜„ν•  λ•Œλ©΄ λ°˜ν™˜κ°’μ˜ 포맷을 λ¬Έμ„œν™”ν• μ§€ μ •ν•΄μ•Ό ν•œλ‹€. 포맷을 λͺ…μ‹œν•˜λ©΄ κ·Έ κ°μ²΄λŠ” ν‘œμ€€μ μ΄κ³ , λͺ…ν™•ν•˜κ³ , μ‚¬λžŒμ΄ 읽을 수 있게 λœλ‹€. λ”°λΌμ„œ κ·Έ κ°’ κ·ΈλŒ€λ‘œ μž…μΆœλ ₯에 μ‚¬μš©ν•˜κ±°λ‚˜ CSV 파일처럼 μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” 데이터 객체둜 μ €μž₯ν•  μˆ˜λ„ μžˆλ‹€.

단점도 μžˆλ‹€.

포맷을 ν•œλ²ˆ λͺ…μ‹œν•˜λ©΄ (κ·Έ ν΄λž˜μŠ€κ°€ 많이 쓰인닀면) 평생 κ·Έ 포맷에 μ–½λ§€μ΄κ²Œ λœλ‹€. λ°˜λŒ€λ‘œ 포맷을 λͺ…μ‹œν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ν–₯ν›„ λ¦΄λ¦¬μŠ€μ—μ„œ 정보λ₯Ό 더 λ„£κ±°λ‚˜ 포맷을 κ°œμ„ ν•  수 μžˆλŠ” μœ μ—°μ„±μ„ μ–»κ²Œ λœλ‹€.

포맷을 λͺ…μ‹œν•˜λ“  μ•„λ‹ˆλ“  μ—¬λŸ¬λΆ„μ˜ μ˜λ„λŠ” λͺ…ν™•νžˆ λ°ν˜€μ•Ό ν•œλ‹€.

포맷 λͺ…μ‹œ 여뢀와 상관없이 toString이 λ°˜ν™˜ν•œ 값에 ν¬ν•¨λœ 정보λ₯Ό μ–»μ–΄μ˜¬μˆ˜ μžˆλŠ” APIλ₯Ό μ œκ³΅ν•˜μž.

이전에 μ†Œκ°œν•œ κ΅¬κΈ€μ˜ AutoValue ν”„λ ˆμž„μ›Œν¬λŠ” toString도 생성해쀀닀.

비둝 μžλ™ 생성에 적합 ν•˜μ§€λŠ” μ•Šλ”λΌλ„ 객체의 값에 κ΄€ν•΄ 아무것도 μ•Œλ €μ£Όμ§€ μ•ŠλŠ” Object의 toStringλ³΄λ‹€λŠ” μžλ™ μƒμ„±λœ toString이 훨씬 μœ μš©ν•˜λ‹€.

정리

λͺ¨λ“  ꡬ체 ν΄λž˜μŠ€μ—μ„œ Object의 toString을 μž¬μ •μ˜ν•˜μž. μƒμœ„ ν΄λž˜μŠ€μ—μ„œ 이미 μ•Œλ§žκ²Œ μž¬μ •μ˜ν•œ κ²½μš°λŠ” μ˜ˆμ™Έλ‹€. toString을 μž¬μ •μ˜ν•œ ν΄λž˜μŠ€λŠ” μ‚¬μš©ν•˜κΈ°λ„ 즐겁고 κ·Έ 클래슀λ₯Ό μ‚¬μš©ν•œ μ‹œμŠ€ν…œμ„ λ””λ²„κΉ…ν•˜κΈ° μ‰½κ²Œ ν•΄μ€€λ‹€. toString은 ν•΄λ‹Ή 객체에 κ΄€ν•œ λͺ…ν™•ν•˜κ³  μœ μš©ν•œ 정보λ₯Ό 읽기 쒋은 ν˜•νƒœλ‘œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.