๐Ÿ“‚ JAVA

    ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ - [8์žฅ. ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™(์•„์ดํ…œ57)]

    ์ง€์—ญ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œ๋กœ ์ค„์ด๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง€๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์•„์ง„๋‹ค. ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ•˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. ๐Ÿ“™ 1. ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๋ผ. ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ด๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋ฒ•์€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„ ์–ธ์„ ๋ฏธ๋ฆฌ ํ•ด๋‘๋ฉด ์ฝ”๋“œ๊ฐ€ ์–ด์ˆ˜์„ ํ•ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๐Ÿ“™ 2. ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•˜๋ผ. ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ถฉ๋ถ„ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ์„ ์–ธ์„ ๋ฏธ๋ค„์•ผ ํ•œ๋‹ค. try-catch ๋ฌธ์˜ ๊ฒฝ์šฐ ๋ณ€์ˆ˜ ๊ฐ’์„ try ๋ธ”๋ก ๋ฐ”๊นฅ์—์„œ๋„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์˜ˆ์™ธ๋‹ค. ๐Ÿ“™ 3. ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ผ. ๋ฐ˜๋ณต๋ฌธ์€ ๋…ํŠนํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณ€์ˆ˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•ด์ค€๋‹ค. ๋ฐ˜๋ณต ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ ๋’ค์—๋„ ์จ์•ผ ํ•˜..

    ๊ณต๊ฐœ๋œ API์š”์†Œ์—๋Š” ํ•ญ์ƒ ๋ฌธ์„œํ™” ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ56)]

    ๐Ÿ“™ 1. ๋ฌธ์„œํ™” ์ฃผ์„ ์ž‘์„ฑ ๋ฐฉ๋ฒ• ์ž๋ฐ”์—๋Š” ์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ์—์„œ ๋ฌธ์„œํ™” ์ฃผ์„(doc comment; ์ž๋ฐ”๋… ์ฃผ์„)์ด๋ผ๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ๊ธฐ์ˆ ๋œ ์„ค๋ช…์„ ์ถ”๋ ค API ๋ฌธ์„œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ์ž๋ฐ”๋…์ด ์žˆ๋‹ค. ๋ฌธ์„œํ™” ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋Š” ๊ทœ์น™์€ '๋ฌธ์„œํ™” ์ฃผ์„ ์ž‘์„ฑ๋ฒ•(How to Write Doc Comments)'์— ๊ธฐ์ˆ ๋˜์–ด ์žˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์„œ์— ๋”ํ•ด์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•˜๋Š” ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. API๋ฅผ ์˜ฌ๋ฐ”๋กœ ๋ฌธ์„œํ™”ํ•˜๋ ค๋ฉด ๊ณต๊ฐœ๋œ ๋ชจ๋“  ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ ์„ ์–ธ์— ๋ฌธ์„œํ™” ์ฃผ์„์„ ๋‹ฌ์•„์•ผ ํ•œ๋‹ค. ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋ผ๋ฉด ์ง๋ ฌํ™” ํ˜•ํƒœ์— ๊ด€ํ•ด์„œ๋„ ์ ์–ด์•ผ ํ•œ๋‹ค. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์—๋Š” ๋ฌธ์„œํ™” ์ฃผ์„์„ ๋‹ฌ ๋ฐฉ๋ฒ•์ด ์—†์œผ๋‹ˆ ๊ณต๊ฐœ ํด๋ž˜์Šค๋Š” ์ ˆ๋Œ€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ์œ ์ง€๋ณด์ˆ˜๊นŒ์ง€ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๋Œ€๋‹ค์ˆ˜์˜ ๊ณต๊ฐœ๋˜์ง€ ์•Š์€ ํด๋ž˜..

    ์˜ต์…”๋„ ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํžˆ ํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ55)]

    ๐Ÿ“™ 1. ์˜ต์…”๋„ ๊ฐœ๋… Optional๋Š” null์ด ์•„๋‹Œ T ํƒ€์ž… ์ฐธ์กฐ๋ฅผ ํ•˜๋‚˜ ๋‹ด๊ฑฐ๋‚˜, ํ˜น์€ ์•„๋ฌด๊ฒƒ๋„ ๋‹ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต์€ T๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ํŠน์ • ์กฐ๊ฑด์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ T ๋Œ€์‹  Optional๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค. ์˜ต์…”๋„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๋ฉ”์„œ๋“œ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ณด๋‹ค ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ž‘๋‹ค. ์ปฌ๋ ‰์…˜์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Optional๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. // Optional์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ public static E max(Collection c) { if(c.isEmpty()) throw new IllegalArgumentException("๋นˆ ์ปฌ๋ ‰์…˜"); E result = null; ..

    null์ด ์•„๋‹Œ, ๋นˆ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ54)]

    ๐Ÿ“™ 1. null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋งค์žฅ ์•ˆ์˜ ์น˜์ฆˆ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. private final List cheeseInStock = ...; /** * @return ๋งค์žฅ ์•ˆ์˜ ๋ชจ๋“  ์น˜์ฆˆ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. * ๋‹จ, ์žฌ๊ณ ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. */ public List getCheeses() { return cheeseInStock.isEmpty() ? null : new ArrayList(cheeseInStock); } ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ(container)๊ฐ€ ๋น„์—ˆ์„ ๋•Œ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋ฉด ํ•ญ์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์–ด ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค. List cheeses = shop.getCheese(); if(cheeses != null && chee..

    ๊ฐ€๋ณ€์ธ์ˆ˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ53)]

    ๐Ÿ“™ 1. ๊ฐ€๋ณ€์ธ์ˆ˜ ์ธ์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ๊ฐ€๋ณ€์ธ์ˆ˜(varargs)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋ณ€์ธ์ˆ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ๊ฐ€์žฅ ๋จผ์ € ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ์ธ์ˆ˜๋“ค์„ ์ด ๋ฐฐ์—ด์— ์ €์žฅํ•˜์—ฌ ๊ฐ€๋ณ€์ธ์ˆ˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑด๋„ค์ค€๋‹ค. ์ž…๋ ฅ๋ฐ›์€ int ์ธ์ˆ˜๋“ค์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•ด ์ฃผ๋Š” ๊ฐ€๋ณ€์ธ์ˆ˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. static int sum(int... args) { int sum = 0; for (int arg : args) sum += arg; return sum; } ๐Ÿ“™ 2. ๊ฐ€๋ณ€์ธ์ˆ˜์˜ ๋ฌธ์ œ์ ๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ํ•ด๊ฒฐ์ฑ… ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜๋ชป ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. static int min(int... args) { if(args.length == 0) throw new Illega..

    ๋‹ค์ค‘์ •์˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ52)]

    ๐Ÿ“™ 1. ๋‹ค์ค‘์ •์˜์˜ ๋ฌธ์ œ ์ปฌ๋ ‰์…˜์„ '์ง‘ํ•ฉ, ๋ฆฌ์ŠคํŠธ, ๊ทธ ์™ธ'๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. public class CollectionClassifier { public static String classify(Set s) { return "์ง‘ํ•ฉ"; } public static String classify(List s) { return "์ง‘ํ•ฉ"; } public static String classify(Collection s) { return "์ง‘ํ•ฉ"; } public static void main(String[] args) { Collection [] collections = { new HashSet(), new ArrayList(), new HashMap().values() }; for (Coll..

    ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์‹ ์ค‘ํžˆ ์„ค๊ณ„ํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ51)]

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

    ์ ์‹œ์— ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ50)]

    ์ž๋ฐ”๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์•ˆ์ „ํ•œ ์–ธ์–ด๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๋ฆฌ ์ž๋ฐ”๋ผ ํ•ด๋„ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ์˜ ์นจ๋ฒ”์„ ์•„๋ฌด๋Ÿฐ ๋…ธ๋ ฅ ์—†์ด ๋‹ค ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์šฐ๋ฆฌ์˜ ๋ถˆ๋ณ€์‹์„ ๊นจ๋œจ๋ฆฌ๋ ค ํ˜ˆ์•ˆ์ด ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋ฐฉ์–ด์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด์•ผ ํ•œ๋‹ค. ๐Ÿ“™ 1. ์ฒซ ๋ฒˆ์งธ ๊ณต๊ฒฉ - ์ƒ์„ฑ์ž ์ด์šฉ '์‹œ์ž‘ ์‹œ๊ฐ์ด ์ข…๋ฃŒ ์‹œ๊ฐ๋ณด๋‹ค ๋Šฆ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๋ถˆ๋ณ€์‹'์ด ์žˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. public final class Period { private final Date start; private final Date end; /** * @param start ์‹œ์ž‘ ์‹œ๊ฐ * @param end ์ข…๋ฃŒ ์‹œ๊ฐ; ์‹œ์ž‘ ์‹œ๊ฐ๋ณด๋‹ค ๋’ค์—ฌ์•ผ ํ•˜๋‚Ÿ. * @throws IllegalArgumentException ์‹œ์ž‘ ์‹œ๊ฐ์ด ์ข…..

    ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ49)]

    ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋ฉด ๊ทธ ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์— ์–ด๋–ค ์ œ์•ฝ์ด ์žˆ์„์ง€ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ์›์น™ 2๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณด์ž. ๐Ÿ“™ 1. ์›์น™ 1 : ์˜ค๋ฅ˜๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ (๋ฐœ์ƒํ•œ ๊ณณ์—์„œ) ์žก์•„์•ผ ํ•œ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•œ ์ฆ‰์‹œ ์žก์ง€ ๋ชปํ•˜๋ฉด ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ณ , ๊ฐ์ง€ํ•˜๋”๋ผ๋„ ์˜ค๋ฅ˜์˜ ๋ฐœ์ƒ ์ง€์ ์„ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฒ€์‚ฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ์ค‘๊ฐ„์— ๋ชจํ˜ธํ•œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉฐ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ์ž˜ ์ˆ˜ํ–‰๋˜์ง€๋งŒ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ œ์—†์ด ์ˆ˜ํ–‰๋์ง€๋งŒ, ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ด์ƒํ•œ ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด๋†“์•„์„œ ๋ฏธ๋ž˜์˜ ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ์ ์— ์ด ๋ฉ”์„œ๋“œ์™€๋Š” ๊ด€๋ จ ์—†๋Š” ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ณ ์ž public๊ณผ protected ๋ฉ”์„œ๋“œ..

    ์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌํ™”๋Š” ์ฃผ์˜ํ•ด์„œ ์ ์šฉํ•˜๋ผ - [7์žฅ. ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ(์•„์ดํ…œ48)]

    ๐Ÿ“™ 1. ์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž๋ฐ”๋Š” ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธก๋ฉด์—์„œ ํ•ญ์ƒ ์•ž์„œ๊ฐ”๋‹ค. ์ฒ˜์Œ ๋ฆด๋ฆฌ์Šค๋œ 1996๋…„ ์Šค๋ ˆ๋“œ, ๋™๊ธฐํ™”, wait/notify ์ง€์› ์ž๋ฐ” 5 ๋™์‹œ์„ฑ ์ปฌ๋ ‰์…˜์ธ java.util.concurrent ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‹คํ–‰์ž(Executor) ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์› ์ž๋ฐ” 7 ๊ณ ์„ฑ๋Šฅ ๋ณ‘๋ ฌ ๋ถ„ํ•ด(parallel decom-position) ํ”„๋ ˆ์ž„์›Œํฌ์ธ ํฌํฌ-์กฐ์ธ(fork-join) ํŒจํ‚ค์ง€ ์ถ”๊ฐ€ ์ž๋ฐ” 8 parallel ๋ฉ”์„œ๋“œ๋งŒ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ณ‘๋ ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ์ง€์› ์ด์ฒ˜๋Ÿผ ์ž๋ฐ”๋กœ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์ ์  ์‰ฌ์›Œ์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ๋Š” ์•ˆ์ „์„ฑ(safety)๊ณผ ์‘๋‹ต ๊ฐ€๋Šฅ(liveness) ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์• ์จ์•ผ ํ•œ๋‹ค. ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ ํ”„๋กœ๊ทธ..

    ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ๋Š” ์ŠคํŠธ๋ฆผ๋ณด๋‹ค ์ปฌ๋ ‰์…˜์ด ๋‚ซ๋‹ค - [7์žฅ. ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ(์•„์ดํ…œ47)]

    ๐Ÿ“™ 1. ์›์†Œ ์‹œํ€€์Šค ๋ฐ˜ํ™˜ ํƒ€์ž… ๋น„๊ต ์ผ๋ จ์˜ ์›์†Œ(์›์†Œ ์‹œํ€€์Šค)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ์ˆ˜์—†์ด ๋งŽ๋‹ค. ์ด๋Ÿฐ ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ Collection, Set, List์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค, Iterable, ๋ฐฐ์—ด, ์ŠคํŠธ๋ฆผ์ด ์กด์žฌํ•œ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ํƒ€์ž…์€ ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ๋งŒ์•ฝ, API๋ฅผ ์ŠคํŠธ๋ฆผ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์งœ๋†“์œผ๋ฉด ๋ฐ˜ํ™˜๋œ ์ŠคํŠธ๋ฆผ์„ for-each๋กœ ๋ฐ˜๋ณตํ•˜๊ธธ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๋‹น์—ฐํžˆ ๋ถˆ๋งŒ์„ ํ† ๋กœํ•  ๊ฒƒ์ด๋‹ค. ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์šฐํšŒ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. for (ProcessHandle ph : (Iterable) ProcessHandle.allProcesses()::iterator) { ... } ์ž‘๋™์€ ํ•˜์ง€๋งŒ ์‹ค์ „์— ์“ฐ๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋‚œ์žกํ•˜๊ณ  ์ง๊ด€์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด..

    ์ŠคํŠธ๋ฆผ์—์„œ๋Š” ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [7์žฅ. ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ(์•„์ดํ…œ46)]

    ๐Ÿ“™ 1. ์ŠคํŠธ๋ฆผ์˜ ํ•ต์‹ฌ ์ŠคํŠธ๋ฆผ์€ ๊ทธ์ € ๋˜ ํ•˜๋‚˜์˜ API๊ฐ€ ์•„๋‹Œ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๊ธฐ์ดˆํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค. ์ŠคํŠธ๋ฆผ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•ต์‹ฌ์€ ๊ณ„์‚ฐ์„ ์ผ๋ จ์˜ ๋ณ€ํ™˜(transformation)์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ด๋•Œ ๊ฐ ๋ณ€ํ™˜ ๋‹จ๊ณ„๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์ด์ „ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ž€ ์˜ค์ง ์ž…๋ ฅ๋งŒ์ด ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค. ๋‹ค๋ฅธ ๊ฐ€๋ณ€ ์ƒํƒœ๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ , ํ•จ์ˆ˜ ์Šค์Šค๋กœ๋„ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” (์ค‘๊ฐ„ ๋‹จ๊ณ„๋“  ์ข…๋‹จ ๋‹จ๊ณ„๋“ ) ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ์— ๊ฑด๋„ค๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ๋ชจ๋“  ๋ถ€์ž‘์šฉ(side effect)์ด ์—†์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋งŒ์•ฝ ๋ถ€์ž‘์šฉ(side effect)์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฐ€๋…์„ฑ Stream์„ ์‚ฌ์šฉํ•œ ์ˆœ๊ฐ„ ๋ฐ์ดํ„ฐ์˜ ๋ณ€..