Java/๐Ÿ“• Effective Java

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™ ไธญ

61. ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐint, double, boolean ๐Ÿ‘‰ ๊ธฐ๋ณธํƒ€์ž…String, List ๐Ÿ‘‰ ์ฐธ์กฐํƒ€์ž…Integer, Double, Boolean ๐Ÿ‘‰ ๊ฐ๊ฐ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์— ๋Œ€์‘ํ•˜๋Š” ์ฐธ์กฐํƒ€์ž… ๐Ÿ‘‰ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…  โœณ๏ธ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ์ฐจ์ด์  ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‚˜, ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’์— ๋”ํ•ด ์‹๋ณ„์„ฑ์ด๋ž€ ์†์„ฑ์„ ๊ฐ€์ง ๐Ÿ‘‰ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋‘ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ’์ด ๊ฐ™์•„๋„ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๊ณ  ์‹๋ณ„๋  ์ˆ˜ ์žˆ์Œ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์€ ์–ธ์ œ๋‚˜ ์œ ํšจํ•˜๋‚˜, ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์ธ null์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ๊ธฐ๋ณธ ํƒ€์ž…์ด ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณด๋‹ค ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฉด์—์„œ ๋” ํšจ์œจ์  โœณ๏ธ ์ฃผ์˜ํ•ด์•ผํ•  ์  Comparator naturalOrder = (i, j) ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™ ไธŠ

57. ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ์ง€์—ญ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถ”์ž๐Ÿ‘‰ ๊ทธ ๋ฐฉ๋ฒ•์€ "๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๊ธฐ" & ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๊ธฐ โœณ๏ธ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘๋ฉด...? ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘๋ฉด ์ฝ”๋“œ๊ฐ€ ์–ด์ˆ˜์„ ํ•ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง ๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์—๋Š” ํƒ€์ž…๊ณผ ์ดˆ๊นƒ๊ฐ’์ด ๊ธฐ์–ต๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ ๐ŸŒŸ ๊ฑฐ์˜ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ๋งŒ์•ฝ, ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ถฉ๋ถ„ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ์„ ์–ธ์„ ๋ฏธ๋ค„์•ผ ํ•จ๋‹ค๋งŒ try-catch ๋ฌธ์—์„œ๋Š” ์˜ˆ์™ธ์ธ๋ฐ, ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ‘œํ˜„์‹์—์„œ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด try ๋ธ”๋ก ์•ˆ์—์„œ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ ๐Ÿ‘‰ ๊ทธ๋ ‡์ง€ ์•Š์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ธ”๋ก์„ ๋„˜์–ด ๋ฉ”์„œ๋“œ์—๊นŒ์ง€ ์ „..

Java/๐Ÿ“• Effective Java

[๐Ÿ“•Effective Java] ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์–ด๋…ธํ…Œ์ด์…˜ ไธ‹

38. ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐ ํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉํ•˜๊ธฐ์—ด๊ฑฐ ํƒ€์ž… ์ž์ฒด๋Š” ํ™•์žฅํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋ณธ ์—ด๊ฑฐ ํƒ€์ž…์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Œ  public interface Operation { double apply(double x, double y);}public enum BasicOperation implements Operation { PLUS("+") { public double apply(double x, double y) { return x + y; } }, MINUS("-") { public double apply(double x, double y) { return x - y; } }, TIMES("*"..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์–ด๋…ธํ…Œ์ด์…˜ ไธŠ

34. int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž… ์‚ฌ์šฉํ•˜๊ธฐ์—ด๊ฑฐ ํƒ€์ž… = ์ผ์ • ๊ฐœ์ˆ˜์˜ ์ƒ์ˆ˜ ๊ฐ’์„ ์ •์˜ํ•œ ๋‹ค์Œ, ๊ทธ ์™ธ์˜ ๊ฐ’์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํƒ€์ž… โœด๏ธ ์—ด๊ฑฐ ํŒจํ„ด์˜ ๋‹จ์  ํƒ€์ž… ์•ˆ์ „ ๋ณด์žฅ Xํ‘œํ˜„๋ ฅ ์ข‹์ง€ Xํ‰๋ฒ”ํ•œ ์ƒ์ˆ˜๋ฅผ ๋‚˜์—ดํ•œ ๊ฒƒ์ด๋ผ ์ƒ์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ํด๋ผ์ด์–ธํŠธ๋„ ๋ฐ˜๋“œ์‹œ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•จ์ •์ˆ˜ ์ƒ์ˆ˜๋Š” ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์›€๐Ÿ‘‰ ์—ด๊ฑฐ ํƒ€์ž… (ENUM type)์ด ๋Œ€์•ˆpublic enum Apple {FUJI, PIPPIN, GRANNY_SMITH}public enum Orange {NAVEL, TEMPLE, BLOOD}โœณ๏ธ ์—ด๊ฑฐ ํƒ€์ž…  ์—ด๊ฑฐ ํƒ€์ž… ์ž์ฒด๋Š” ํด๋ž˜์Šค์ƒ์ˆ˜ ํ•˜๋‚˜๋‹น ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด public static final ํ•„๋“œ๋กœ ๊ณต๊ฐœ๋ฐ–์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์‹ค์ƒ finalํด๋ผ์ด์–ธ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ์ œ๋„ค๋ฆญ ไธŠ

์ œ๋„ค๋ฆญ์ž๋ฐ” 5๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ผ ๋•Œ๋งˆ๋‹ค ํ˜•๋ณ€ํ™˜ํ•  ํ•„์š” ์—†์Œ์ปฌ๋ ‰์…˜์ด ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์ปดํŒŒ์ผ๋Ÿฌ์— ์•Œ๋ ค์คŒ ๐Ÿ‘‰ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•Œ์•„์„œ ํ˜•๋ณ€ํ™˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ์— ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋จ ๐Ÿ‘‰ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค or ์ œ๋„ค๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค = ์ œ๋„ค๋ฆญ ํƒ€์ž…๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ํƒ€์ž…  = List ๐Ÿ‘‰ String์€ ์ •๊ทœ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ E (List)์— ํ•ด๋‹นํ•˜๋Š” ์‹ค์ œ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜  26. Raw ํƒ€์ž…์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ธฐ raw ํƒ€์ž…์ด๋ž€ ์ œ๋„ค๋ฆญ ํƒ€์ž…์—์„œ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ๋ฅผ ๋งํ•จex). List์˜ raw ํƒ€์ž…์€ List์ž„ ๐Ÿ‘‰ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํ•œ์ฐธ ๋’ค์ธ ๋Ÿฐํƒ€์ž„์—์•ผ ์•Œ์•„์ฑŒ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ ! โœณ๏ธ ์ปฌ๋ ‰์…˜์˜ raw ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ // Stamp ์ธ์Šคํ„ด์Šค๋งŒ ์ทจ๊ธ‰private f..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ไธ‹

23. ํƒœ๊ทธ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ ํ™œ์šฉํ•˜๊ธฐํƒœ๊ทธ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค ๐Ÿ‘‰ ์ƒ์ˆ˜ ํ•„๋“œ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•(enum) ๋“ฑ์„ ํ™œ์šฉํ•ด์„œ ํŠน์ • ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์นดํ…Œ๊ณ ๋ฆฌ์— ์†ํ•˜๋Š”์ง€ ์‹๋ณ„class Figure { enum Shape {RECTANGLE, CIRCLE}; // ํƒœ๊ทธ ํ•„๋“œ - ํ˜„์žฌ ๋ชจ์–‘์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. final Shape shape; // ๋‹ค์Œ ํ•„๋“œ๋“ค์€ ๋ชจ์–‘์ด ์‚ฌ๊ฐํ˜•(RECTANGLE)์ผ ๋•Œ๋งŒ ์“ฐ์ธ๋‹ค. double length; double width; // ๋‹ค์Œ ํ•„๋“œ๋Š” ๋ชจ์–‘์ด ์›(CIRCLE)์ผ ๋•Œ๋งŒ ์“ฐ์ธ๋‹ค. double radius; // ์›์šฉ ์ƒ์„ฑ์ž Figure(double radius) { shape = Shape.CIRCLE; ..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ไธญ

18. ์ƒ์†๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜ ์‚ฌ์šฉ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์ผ์€ ์œ„ํ—˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๊ณผ ๋‹ฌ๋ฆฌ ์ƒ์†์€ ์บก์Šํ™”๋ฅผ ๊นจ๋œจ๋ฆผ ๐Ÿ‘‰ ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š๋ƒ์— ๋”ฐ๋ผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋™์ž‘์— ์ด์ƒ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ์ƒ์œ„ ํด๋ž˜์Šค๋Š” ๋ฆด๋ฆฌ์ฆˆ๋งˆ๋‹ค ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋กœ ์ธํ•ด ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์˜ค๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ โœณ๏ธ ์ƒ์†์„ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ public class InstrumentedHashSet extends HashSet { private int addCount = 0; public InstrumentedHashSet(){ } public InstrumentedHashSet(int initCap, float loadFactor){ super(i..

Java/๐Ÿ“• Effective Java

[๐Ÿ“• Effective Java] ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ไธŠ

15. ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™” ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •๋ณด ์€๋‹‰(์บก์Šํ™”)์˜ ํ•ต์‹ฌ  ๋ชจ๋“  ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์„ฑ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ขํ˜€์•ผ ํ•จํŒจํ‚ค์ง€ ์™ธ๋ถ€์—์„œ ์“ธ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด package-private์œผ๋กœ ์„ ์–ธํ•œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” package-private ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ์•ˆ์— private static์œผ๋กœ ์ค‘์ฒฉ์‹œํ‚ค๊ธฐโœจ public์ผ ํ•„์š”๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์˜ ์ ‘๊ทผ ์ˆ˜์ค€์„ package-private ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋กœ ์ขํžˆ๊ธฐ โœณ๏ธ ์ ‘๊ทผ ์ˆ˜์ค€ private : ๋ฉค๋ฒ„๋ฅผ ์„ ์–ธํ•œ ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ package-private : ๋ฉค๋ฒ„๊ฐ€ ์†Œ์†๋œ ํŒจํ‚ค์ง€ ์•ˆ์˜ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€ ์ ‘๊ทผ ์ˆ˜์ค€.pro..

soogoori
'Java/๐Ÿ“• Effective Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก