Effective Java

๊ฒ€์ƒ‰๊ฒฐ๊ณผ 6 ๊ฐœ
[Item12] toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ

toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ Object์˜ ๊ธฐ๋ณธ toString ๋ฉ”์„œ๋“œ๋Š” ์ปค์Šคํ…€์œผ๋กœ ์ž‘์„ฑ๋œ ํด๋ž˜์Šค์— ์ ํ•ฉํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†๊ณ , ํด๋ž˜์Šค์ด๋ฆ„@ํ•ด์‹œ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. toString์˜ ์ผ๋ฐ˜ ๊ทœ์•ฝ ์ค‘... ๊ฐ„๊ฒฐํ•˜๋ฉด์„œ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ์˜ ์œ ์ตํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ผ ์‹ค์ „์—์„œ toString์€ ๊ทธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์ฃผ์š” ์ •๋ณด ๋ชจ๋‘๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ–ˆ์„ ๋•Œ {Jenny=PhoneNumber@123dsdfa12l} ์ด๋Ÿฐ ์ •๋ณด๋ณด๋‹ค๋Š” {Jenny=707-349-1284}๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ›จ์”ฌ ์œ ์ตํ•œ ์ •๋ณด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. โžก๏ธ ์Šค์Šค๋กœ๋ฅผ ์™„๋ฒฝํžˆ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•œ๋‹ค. ๊ณ ๋ คํ•ด๋ณผ ์‚ฌํ•ญ ๋ฐ˜ํ™˜๊ฐ’์˜ ํฌ๋งท์„ ๋ฌธ์„œํ™”ํ• ์ง€ ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ๋‚˜ ํ–‰๋ ฌ ๊ฐ™..

[Item11] equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ

equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ equals๋ฅผ ์žฌ์ •์˜ํ•œ ํด๋ž˜์Šค ๋ชจ๋‘์—์„œ hashCode๋„ ์žฌ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด hashCode์˜ ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์–ด๊ธฐ๊ฒŒ ๋˜์–ด ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ HashMap, HashSet ๋“ฑ์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค. - equals ๋น„๊ต์— ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, hashCode ๋ฉ”์„œ๋“œ๋Š” ๋ช‡ ๋ฒˆ์„ ํ˜ธ์ถœํ•ด๋„ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. - equals๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค๋ฉด, hashCode๋Š” ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. - equals๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋”๋ผ๋„, hashCode๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค. equals๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๊ฐ™๋‹ค๊ณ ..

[Item10] equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ

equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ ํด๋ž˜์Šค๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ์ธ์Šคํ„ด์Šค๋Š” ์˜ค์ง ์ž๊ธฐ ์ž์‹ ๊ณผ๋งŒ ๊ฐ™๊ฒŒ ๋œ๋‹ค. ๋‹ค์Œ ์ƒํ™ฉ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ตœ์„ ์ด๋‹ค. ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋‹ค. ์ธ์Šคํ„ด์Šค์˜ '๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ(logical equality)'์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋‹ค. ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•œ equals๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์—๋„ ๋”ฑ ๋“ค์–ด๋งž๋Š”๋‹ค. ํด๋ž˜์Šค๊ฐ€ private์ด๊ฑฐ๋‚˜ package-private์ด๊ณ  equals ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ผ์ด ์—†๋‹ค. equals๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•  ๋•Œ?! ์ƒ์œ„ ํด๋ž˜์Šค์˜ equals๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๋น„๊ตํ•˜๋„๋ก ์žฌ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ฃผ๋กœ ๊ฐ’ ํด๋ž˜์Šค๋“ค์ด ์—ฌ๊ธฐ ํ•ด๋‹นํ•œ๋‹ค. equals๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ ๋”ฐ๋ผ์•ผํ•  ์ผ๋ฐ˜ ๊ทœ์•ฝ ๋ฐ˜์‚ฌ์„ฑ(reflexivity) : null์ด ์•„๋‹Œ ๋ชจ..

[Item4] ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

์ •์  ๋ฉ”์„œ๋“œ์™€ ์ •์  ํ•„๋“œ๋งŒ์„ ๋‹ด์€ ํด๋ž˜์Šค ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์ด๋‚˜ ๋ฐฐ์—ด ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋“ค ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ •์  ๋ฉ”์„œ๋“œ final ํด๋ž˜์Šค์™€ ๊ด€๋ จํ•œ ๋ฉ”์„œ๋“œ๋“ค ์ด๋Ÿฌํ•œ ์ •์  ๋ฉค๋ฒ„๋ฅผ ๋‹ด์€ ํด๋ž˜์Šค๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š”๋ฐ, ์ „๋ถ€ static์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ์˜ˆ์‹œ ์ฝ”๋“œ public class StringUtil { public staic List splitStr(String str) { return Arrays.stream(categories.split(",")).collect(Collectors.toList()); } } ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ StringUtil.splitStr(); ์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ! ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰๋Š” ๋ฐฉ๋ฒ• ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ํ•˜..