์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 10์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 69: ์˜ˆ์™ธ๋Š” ์ง„์งœ ์˜ˆ์™ธ ์ƒํ™ฉ์—๋งŒ ์‚ฌ์šฉํ•˜๋ผ ์˜ˆ์™ธ๋Š” ์˜ค์ง ์˜ˆ์™ธ ์ƒํ™ฉ์—์„œ๋งŒ ์“ฐ์—ฌ์•ผ ํ•˜๋ฉฐ, ์ผ์ƒ์ ์ธ ์ œ์–ด ํ๋ฆ„์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ์˜ˆ์™ธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JVM์—์„œ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๊ฐ€ ์ ์–ด์ง„๋‹ค. try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) {} // don't for (Mountain m : range) m.climb(); // do ์ž˜ ์„ค๊ณ„๋œ API๋ผ๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์ƒ์ ์ธ ์ œ์–ด ํ๋ฆ„์—์„œ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•  ์ผ์ด ์—†์–ด์•ผ ํ•œ๋‹ค. ํŠน์ • ์ƒํƒœ์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ ์˜์กด์  ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด, ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค....

August 16, 2021 ยท 3 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 11์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 78: ๊ณต์œ  ์ค‘์ธ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋Š” ๋™๊ธฐํ™”ํ•ด ์‚ฌ์šฉํ•˜๋ผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์— ์ž…์ถœ๋ ฅ ์‹œ ๋™๊ธฐํ™”์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ž˜๋ชป๋œ ๋™์ž‘์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. // ์ฝ”๋“œ 78-1 ์ž˜๋ชป๋œ ์ฝ”๋“œ - ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์‹คํ–‰๋ ๊นŒ? (415์ชฝ) public class StopThread { private static boolean stopRequested; public static void main(String[] args) throws InterruptedException { Thread backgroundThread = new Thread(() -> { int i = 0; while (!stopRequested) i++; }); backgroundThread.start(); TimeUnit.SECONDS.sleep(1); stopRequested = true; } } ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ€๊ฒฝํ•œ ๊ฐ’์„ ์–ธ์ œ ๋ณด๊ฒŒ ๋  ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค....

August 16, 2021 ยท 6 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 12์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 85: ์ž๋ฐ” ์ง๋ ฌํ™”์˜ ๋Œ€์•ˆ์„ ์ฐพ์œผ๋ผ ์ž๋ฐ” ์ง๋ ฌํ™”์—๋Š” ๊ณต๊ฒฉ์˜ ์†Œ์ง€๊ฐ€ ๋งค์šฐ ๋งŽ๊ณ , ์ ์  ๋” ๋งŽ์•„์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์  ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ์ž๋ฐ” ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์•„๋ฌด๊ฒƒ๋„ ์—ญ์ง๋ ฌํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ ˆ๊ฑฐ์‹œ ๋“ฑ์œผ๋กœ ์–ด์ฉ” ์ˆ˜ ์—†์ด ์‚ฌ์šฉํ•˜๋”๋ผ๋„, ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋Œ€ ์—ญ์ง๋ ฌํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•„์ดํ…œ 86: Serializable์„ ๊ตฌํ˜„ํ• ์ง€๋Š” ์‹ ์ค‘ํžˆ ๊ฒฐ์ •ํ•˜๋ผ Serializable ๊ตฌํ˜„์˜ ๋‹จ์ ๋“ค Serializable์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฆด๋ฆฌ์ฆˆํ•œ ๋’ค์—๋Š” ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. โ†’ ์ง๋ ฌํ™” ํ˜•ํƒœ ๋˜ํ•œ ๊ณต๊ฐœ API๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ ๋ฒ„๊ทธ์™€ ๋ณด์•ˆ ๊ตฌ๋ฉ์ด ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค....

August 16, 2021 ยท 4 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 8์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 49: ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋ผ ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์–ด๋–ค ์ œ์•ฝ์ด ์žˆ์„์ง€ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ์ œ์•ฝ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ๋ฉ”์„œ๋“œ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ช…์‹œ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜์ž. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„์— ๋ชจํ˜ธํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์‹คํŒจ ์›์ž์„ฑ์ด ๊นจ์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์„ ์ˆ˜ ์žˆ๋‹ค. public๊ณผ protected ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ์ž˜๋ชป๋์„ ๋•Œ ๋˜์ง€๋Š” ์˜ˆ์™ธ๋ฅผ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•œ๋‹ค. /** * (ํ˜„์žฌ ๊ฐ’ mod m) ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” * ํ•ญ์ƒ ์Œ์ด ์•„๋‹Œ BigInteger๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ ์—์„œ remainder ๋ฉ”์„œ๋“œ์™€ ๋‹ค๋ฅด๋‹ค....

August 16, 2021 ยท 5 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 9์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 57: ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ ์ž๋ฐ”๋Š” ๋ฌธ์žฅ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ฉด ์–ด๋””๋“  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ์Šค์ฝ”ํ”„๊ฐ€ ์˜ค์—ผ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€์—ญ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ์‹œ์  ๊ฑฐ์˜ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ์™ธ์ ์œผ๋กœ try-catch๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” try ๋ธ”๋ก ์•ˆ์—์„œ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์€ while ๋ฌธ๋ณด๋‹ค๋Š” for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ž โ†’ while ๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋ณต๋ฌธ ๋ธ”๋ก ๋ฐ–์— ๋ถˆํ•„์š”ํ•œ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค....

August 16, 2021 ยท 4 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 7์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 42: ์ต๋ช… ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ ์˜ˆ์ „์—๋Š” ํ•จ์ˆ˜ ํƒ€์ž…์„ ํ‘œํ˜„ํ•  ๋•Œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ต๋ช… ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค. Collections.sort(words, new Comparator<String>() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); ๋žŒ๋‹ค๊ฐ€ ๋„์ž…๋˜๋ฉด์„œ ๊ฐ„๊ฒฐํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length())); // ์ฝ”๋“œ 42-4 ํ•จ์ˆ˜ ๊ฐ์ฒด(๋žŒ๋‹ค)๋ฅผ ์ธ์Šคํ„ด์Šค ํ•„๋“œ์— ์ €์žฅํ•ด ์ƒ์ˆ˜๋ณ„ ๋™์ž‘์„ ๊ตฌํ˜„ํ•œ ์—ด๊ฑฐ ํƒ€์ž… (256-257์ชฝ) public enum Operation { PLUS ("+", (x, y) -> x + y), MINUS ("-", (x, y) -> x - y), TIMES ("*", (x, y) -> x * y), DIVIDE("/", (x, y) -> x / y); private final String symbol; private final DoubleBinaryOperator op; Operation(String symbol, DoubleBinaryOperator op) { this....

May 22, 2021 ยท 5 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 6์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 34: int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ Java 1.5 Enum ๋“ฑ์žฅ ์ „ ์‚ฌ์šฉ๋˜๋˜ int enum ํŒจํ„ด public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; ํƒ€์ž… ์•ˆ์ „์„ ๋ณด์žฅํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ํ‘œํ˜„ ๋ฐฉ์‹์ด ๊นŒ๋‹ค๋กญ๋‹ค. toString(), ๋””๋ฒ„๊ฑฐ ๋“ฑ์—์„œ๋Š” ๊ทธ๋ƒฅ ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ์ƒ์ˆ˜๋กœ ๋ณด์ธ๋‹ค....

April 15, 2021 ยท 11 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 5์žฅ ์ •๋ฆฌ

์ œ๋„ค๋ฆญ์€ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ ค์คŒ์œผ๋กœ์จ, ์ปดํŒŒ์ผ ํƒ€์ž„์— ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ๋” ์•ˆ์ „ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์•„์ดํ…œ 26: ๋กœ ํƒ€์ž…์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ ๋กœ ํƒ€์ž…์ด๋ž€ ์ œ๋„ค๋ฆญ์—์„œ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. โ†’ ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋„ค๋ฆญ์˜ ์•ˆ์ „์„ฑ๊ณผ ํ‘œํ˜„๋ ฅ์„ ์ „ํ˜€ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค. public class Raw { public static void main(String[] args) { List<String> strings = new ArrayList<>(); unsafeAdd(strings, Integer....

April 12, 2021 ยท 9 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 4์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 15: ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ ์ •๋ณด ์€๋‹‰์€ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋กœ ๋…๋ฆฝ์‹œ์ผœ ์ค€๋‹ค. ์ •๋ณด ์€๋‹‰์˜ ์žฅ์  ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ธ๋‹ค. ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋น„์šฉ์„ ๋‚ฎ์ถ˜๋‹ค. ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋” ๋นจ๋ฆฌ ํŒŒ์•…ํ•˜๊ณ , ๊ต์ฒดํ•˜๋Š” ๋ฐ ๋ถ€๋‹ด์ด ์ค„์–ด๋“ ๋‹ค. ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋„์›€์„ ์ค€๋‹ค. ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋…๋ฆฝ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค. ์™ธ๋ถ€ ์˜์กด ์—†์ด ๋™์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋„ ์‚ฌ์šฉ์ด ์‰ฝ๋‹ค. ๋Œ€ํ˜• ์‹œ์Šคํ…œ ์ œ์ž‘ ๋‚œ์ด๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค....

April 5, 2021 ยท 10 min

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3์žฅ ์ •๋ฆฌ

์•„์ดํ…œ 10: equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ equals๋Š” ์–ธ์ œ ์žฌ์ •์˜ํ•ด์•ผ ํ• ๊นŒ? ํด๋ž˜์Šค๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์— ์žˆ๋‹ค๋ฉด ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋‹ค ์ธ์Šคํ„ด์Šค์˜ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋‹ค ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•œ equals๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์—๋„ ๋“ค์–ด๋งž๋Š”๋‹ค ํด๋ž˜์Šค๊ฐ€ private์ด๊ฑฐ๋‚˜ package-private์ด๊ณ  equals ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ผ์ด ์—†๋‹ค equals๊ฐ€ ๋งŒ์กฑ์‹œ์ผœ์•ผ ํ•˜๋Š” ์กฐ๊ฑด equals๋Š” ๋‹ค์Œ ๋‹ค์„ฏ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ˜์‚ฌ์„ฑ: A.equals(A)๊ฐ€ ์ฐธ์ด๋‹ค ๋Œ€์นญ์„ฑ: A.equals(B)๊ฐ€ ์ฐธ์ด๋ผ๋ฉด B.equals(A)์ด๋‹ค public class Point { @Override boolean equals(Object o) { if (!...

March 23, 2021 ยท 4 min