Programming/Java 22

[Effective Java] ์™œ EnumSet ๊ณผ EnumMap ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ฐฑ๊ธฐ์„ ๋‹˜์˜ [Effective Java] ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋Š” ์ค‘ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Enum ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ฑฐ๋‚˜ Enum ๊ฐ์ฒด๋ฅผ Key ๋กœ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ ์™œ EnumMap ์ด๋‚˜ EnumSet ์„ ์“ฐ๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ Map / Set ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์ ์ธ์ง€์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๋Š” ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ด๋“ค์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ทธ์— ๋Œ€ํ•œ ์ฐจ์ด์  ๋ฐ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์™œ ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? Java 1.5 ๋ฒ„์ „ ์ด์ „์—๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜๋ฅผ int ํƒ€์ž…์œผ๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋ฅผ ์ •์ˆ˜ ์—ด๊ฑฐ ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ณผ๊ฑฐ์˜ ๋ฐฉ์‹์ฒ˜๋Ÿผ int ๋ฅผ ์ด์šฉํ•ด ์ƒ์ˆ˜๋ฅผ ์—ด๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. 1. ์ปดํŒŒ์ผ ํƒ€์ž„์—์„œ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. 2. Name..

Programming/Java 2022.11.20

F019 - Socket

โœ๏ธ ์ด์ „ ์‹œ๊ฐ„์— IO์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ๊ณผ๋Š” ์ „ํ˜€ ๊ด€๋ จ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ํ•˜๋‚˜ ๋‘˜ ์”ฉ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ํ•˜๋‚˜์˜ ๋ฟŒ๋ฆฌ์—์„œ ์‹œ์ž‘๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ทธ ์—ฐ์žฅ์œผ๋กœ Socket ํ†ต์‹ ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. Socket Socket(์ดํ•˜ ์†Œ์ผ“)์€ ๋ฌด์—‡์ผ๊นŒ? ์ผ์ƒ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฝ˜์„ผํŠธ ์†Œ์ผ“์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์ „๊ตฌ๋ฅผ ๋ผ์šฐ๋Š” ์†Œ์ผ“์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์†Œ์ผ“์ด๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋“ค์˜ ๊ณตํ†ต์ ์€ A์™€ B๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์กด์žฌ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. A socket is an endpoint for communication between two machines. ์†Œ์ผ“์€ ๋‘ ๊ธฐ๊ธฐ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ์—”๋“œํฌ์ธํŠธ์ด๋‹ค. - Java 8 Referenc..

Programming/Java 2021.06.22

F018 - Serializable (์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”)

โœ๏ธ ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Domain ํด๋ž˜์Šค์— Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ดค๋˜ ๊ฒฝํ—˜์ด ์žˆ๋Š”๋ฐ, ๋‹น์‹œ์—๋Š” ์™œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœํ–ˆ์—ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Serializable ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ณต๋ถ€ํ•ด๋ณด์ž Serializable public class SerializableTest implements Serializable { ... } ์‚ฌ์ „์  ์˜๋ฏธ๋กœ๋Š” ์ง๋ ฌํ™”๋ผ๋Š” ๋œป์„ ๊ฐ€์ง„๋‹ค. ์ง๋ ฌํ™”๋Š” ๋ฌด์—‡์ผ๊นŒ? ๋ชจ๋ž˜์‹œ๊ณ„ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋ž˜๋ญ‰์น˜๊ฐ€ ์ข์€ ํ†ต๋กœ๋ฅผ ํ†ต๊ณผ ํ•  ๋•Œ ๊ฐ๊ฐ์˜ ์•Œ๊ฐฑ์ด๋กœ ๋‚˜๋‰˜์–ด์ ธ ์ง€๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” Serializable ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์™ธ๋ถ€์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ Stream ์ด์šฉํ•˜์—ฌ ํ†ต์‹ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ Str..

Programming/Java 2021.06.16

F017 - Blocking, Non-Blocking / Synchronous, Asynchronous

โœ๏ธ ์˜ˆ์ „์— Node.js๋ฅผ ์ž ๊น ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ธฐ์ดˆ ์ง€์‹์„ ์Œ“๋Š”๋‹ค๊ณ  ํ•ด๋‹น ๊ฐœ๋…์„ ์Šค์ณ ์ง€๋‚˜๊ฐ€ ๋“ฏ ์ฐพ์•„ ๋ดค๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋„ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ๋‹น์‹œ์—๋Š” Thread์™€ Process ๊ทธ๋ฆฌ๊ณ  ์ด๋กœ ์ธํ•ด ์šด์˜์ฒด์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์กฐ๊ธˆ๋„ ์•Œ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ˜€ ์ดํ•ด๊ฐ€ ์•ˆ๋œ ์ƒํƒœ๋กœ ๊ธ€๋งŒ ์ •๋ฆฌํ–ˆ์—ˆ๋‹ค. (๋ณต๋ถ™ ์ˆ˜์ค€) ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ทธ๋ž˜๋„ ์œ„์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ๋ฏธ์•ฝํ•˜๊ฒŒ๋‚˜๋งˆ ์ •๋ฆฌ๊ฐ€ ๋˜์—ˆ์œผ๋‹ˆ ์ด๋ฅผ ๋ฐœํŒ์œผ๋กœ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, Blocking๊ณผ Non-Blocking์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž! Blocking / Non-Blocking Blocking : ์–ด๋– ํ•œ ํ–‰์œ„์— ์˜ํ•ด ์ž์‹ ์˜ ํ–‰์œ„๋ฅผ ์ด์–ด์„œ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋ง‰ํžˆ๋Š” ๊ฒƒ. Non-Blocking : ์–ด๋– ํ•œ ํ–‰์œ„์— ๊ตฌ์•  ๋ฐ›์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ. Sync /..

Programming/Java 2021.06.15

F016 - File, I/O, Stream

โœ๏ธ ์‹ค๋ฌด์—์„œ ์—‘์…€์ด๋‚˜ CSV ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ๋Š”๋ฐ, ์—‘์…€์˜ ๊ฒฝ์šฐ Apache ์žฌ๋‹จ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๊ณ , CSV์˜ ๊ฒฝ์šฐ ByteArrayInputStream ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์‹œ์—๋Š” ๊ทธ๋ƒฅ ์ด ํด๋ž˜์Šค๋ฅผ ์“ฐ๋ฉด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ/์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ์–ด๋–ป๊ฒŒ ๋‹ค์šด๋กœ๋“œ/์—…๋กœ๋“œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ–ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด I/O, File, I/O Stream ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž! File java.io ํŒจํ‚ค์ง€์— ์†ํ•˜๋Š” ํด๋ž˜์Šค๋กœ ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ํฌ๊ด„์ ์ธ ํด๋ž˜์Šค์ด๋‹ค. ๋•Œ๋ฌธ์— ๋ชฉ์ ์˜ ๋ชจํ˜ธ์„ฑ ๋•Œ๋ฌธ์— Java 7 ๋ถ€ํ„ฐ NIO2 ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ Files ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๋Š”๋ฐ, ์ด๋Š” File ํด๋ž˜์Šค ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์†Œ..

Programming/Java 2021.06.14

F015 - Set (์ž‘์„ฑ ์ค‘)

โœ๏ธ ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Set๊ณผ Queue ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , ๊ฐ ํด๋ž˜์Šค ๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€, ํŠน์ง•์€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋ ค ํ•œ๋‹ค. Set ์ˆ˜ํ•™์—์„œ์˜ ์ง‘ํ•ฉ์˜ ๊ฐœ๋…๊ณผ ๋™์ผํ•˜๊ฒŒ ์ค‘๋ณต ์ง‘ํ•ฉ์„ ์ œ์™ธํ•˜๊ณ  ์ง‘ํ•ฉ ๋‚ด ์กด์žฌํ•˜๋Š” ์›์†Œ๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ™์€ ์›์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌ ํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Set ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ์ฒด ๋‚ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ, Set ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š”๋‹ค. ๋•Œ๋ฌธ์— ํŠน์ • ์ˆœ์„œ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์–ด ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ๊ฐ์ฒด ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Ÿฌํ•œ Set ์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection ์ธํ„ฐํŽ˜์ด..

Programming/Java 2021.05.31

F014 - List (ArrayList, LinkedList, Vector, Stack)

โœ๏ธ ์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅธ ์ฑ„ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ์ƒํ™ฉ๋“ค ์†์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚จ๋“ค์ด ์“ฐ๋‹ˆ๊นŒ ๋”ฐ๋ผ ์“ฐ๊ณ , ๋‚ด๊ฐ€ ์ต์ˆ™ํ•˜๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์“ฐ๋Š” ๊ฒƒ์ด ๋ฒ„๋ฆ‡์ด ๋๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” List ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ArrayList์™€ LinkedList์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•ด๋ณด์ž. List List(์ดํ•˜ ๋ฆฌ์ŠคํŠธ)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณตํ•˜์—ฌ ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธฐ๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•๋ถ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ํ™•์žฅํ•œ ํด๋ž˜์Šค๋กœ๋Š” Vector, ArrayList, LinkedList๊ฐ€ ์กด์žฌํ•œ๋‹ค. Method ๋ฉ”์†Œ๋“œ ์„ค๋ช… add(..

Programming/Java 2021.05.30

F013 - Generic

โœ๏ธ ๊ตญ๋น„ ํ•™์›์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ Map ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ญ”์ง€๋„ ๋ชฐ๋ž๋˜ ์‹œ์ ˆ, ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ Object ๋ฐฐ์—ด์— ๋‹ด์•„ ์ง์ ‘ ํ˜•๋ณ€ํ™˜์„ ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋Š”๋ฐ, ์ด ๋•Œ ํ˜•๋ณ€ํ™˜์„ ์ž๊พธ ์ž˜๋ชปํ•ด์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๊ณ„์† ๋‚ฌ๋˜ ๊ฒฝํ—˜์ด ์ƒ๊ฐ๋‚ฌ๋‹ค. ๊ณผ๊ฑฐ์— ๋งˆ์ฃผํ–ˆ๋˜ ๋ฌธ์ œ๋“ค์„ ์ƒ๊ธฐํ•˜๊ณ , ์™œ ํ•ด๋‹น ๊ฐœ๋…์ด ํ•„์š”ํ•œ์ง€ ์ด๋ฒˆ ํ•™์Šต์„ ํ†ตํ•ด ์•Œ์•„๊ฐ€๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์ž. Generic Generic์ด๋ž€ ๋‹จ์–ด์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” 'ํฌ๊ด„์ ์ธ' ์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๋‹จ์–ด ๋œป ๊ทธ๋Œ€๋กœ ํด๋ž˜์Šค์— ๋‹ด๊ธธ ๊ฐ์ฒด๋‚˜ ๋ฉ”์†Œ๋“œ, ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜๋ฅผ ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํฌ๊ด„์ ์ธ ์˜๋ฏธ์˜ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ด๊ธธ ๊ฐ์ฒด์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด์„œ ์—ด์–ด๋‘”๋‹ค๋Š” ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, Generic์€ ์ปดํŒŒ์ผ ํƒ€์ž„์—์„œ ํด๋ž˜์Šค์— ๋‹ด๊ธธ ๊ฐ์ฒด์˜ ํ˜•ํƒœ์— ํ•ด๋‹น ํด๋ž˜..

Programming/Java 2021.05.26

F012 - Annotation

โœ๏ธ ์ž๋ฐ”์˜ ์‹  ํ›„๋ฐ˜๋ถ€์— Annotation์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค. 3์ฃผ์ฐจ ๋ฉ˜ํ† ๋ง ์ค‘, ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ Lombok์ด ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ์— ์–ด๋–ป๊ฒŒ ๊ฐœ์ž…ํ•˜๋Š”์ง€ ์—ฌ์ญค๋ณด์…จ๋Š”๋ฐ ์‘์šฉ์ด ๋˜์ง€ ์•Š์•„์„œ ๋Œ€๋‹ต๋„ ๋ชปํ•˜๋Š” ๊ฟ€๋จน์€ ๋ฒ™์–ด๋ฆฌ๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Annotation์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด์ž! Annotation ์–ผ๋งˆ ์ „ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ ์ค‘, @Override Annotation(์ดํ•˜ ์–ด๋…ธํ…Œ์ด์…˜)์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค. @Override ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ์ƒ์„ฑ์ž ํ˜น์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ž์‹ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ ํ•  ๋•Œ, ํ•ด๋‹น ์ƒ์„ฑ์ž ํ˜น์€ ๋ฉ”์†Œ๋“œ๋Š” ์žฌ์ •์˜๋œ ์ƒํƒœํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, @Override ์–ด๋…ธํ…Œ์ด์…˜์€ 1. ๋ฉ”์†Œ๋“œ ์˜์—ญ์—์„œ ์‚ฌ์šฉ ํ• ..

Programming/Java 2021.05.24

F011 - java.lang.ref

โœ๏ธ ์ด์ „ ์‹œ๊ฐ„์— Garbage Collector์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ Strong, Weak, Soft, Phantom Reference ์— ๋Œ€ํ•ด ์ž ๊น ์Šค์ณ ์ง€๋‚˜๊ฐ”๋‹ค. ์ด๋•Œ, ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๊ณต๋ถ€ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ static์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋“ค์€ ์–ด๋–ป๊ฒŒ GC ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์งˆ๋ฌธํ•ด์ฃผ์…จ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” GC๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์œ„์˜ 4 ๊ฐ€์ง€๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์ž! java.lang.ref Java์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ์— ๋Œ€ํ•œ ์œ ํ˜•์„ 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ GC๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ •๋ฆฌํ•ด์•ผ ํ• ์ง€ ์•ˆํ• ์ง€๋ฅผ ํŒ๋‹จํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๋‹น ํŒจํ‚ค์ง€์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด GC ์ˆ˜ํ–‰์— ์–ด๋Š์ •๋„ ๊ด€์—ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ „์— Garbag..

Programming/Java 2021.05.19