๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ/Java9

Java NIO / ๋…ผ๋ธ”๋กœํ‚น / ๋น„๋™๊ธฐ ๋ฐฉ์‹ IO์™€ NIO ์ž๋ฐ”์—์„œ ์†Œ์ผ“ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” io ๋˜๋Š” nio ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์ž๋ฐ” 4๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์ž…์ถœ๋ ฅ์ด๋ผ๋Š” ๋œป์—์„œ java.nio ํŒจํ‚ค์ง€, ์ž๋ฐ” 7๋ถ€ํ„ฐ ๋„คํŠธ์›Œํฌ ์ง€์›์„ ๊ฐ•ํ™”ํ•˜์—ฌ java.nio ํŒจํ‚ค์ง€๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œ ํ–ˆ๋‹ค. IO๋Š” ์ŠคํŠธ๋ฆผ(Stream)์ด๋ผ๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต๋กœ๋กœ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์™€ ํ†ต์‹  NIO๋Š” ์ฑ„๋„(Channel)์ด๋ผ๋Š” ์–‘๋ฐฉํ–ฅ ํ†ต๋กœ๋กœ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์™€ ํ†ต์‹  โ–ถ NIO๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ํ•˜๋‚˜์˜ ํ†ต๋กœ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. IO๋Š” ์ž…์ถœ๋ ฅ ์‹œ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, ํ•„ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์Œ NIO๋Š” ์ž…์ถœ๋ ฅ ์‹œ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•จ โ–ถ NIO๋Š” ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…์ถœ๋ ฅ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. IO๋Š” ๋ธ”๋กœํ‚น ๋ฐฉ์‹๋งŒ ์ง€์›ํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—†์• ๋Š”๋ฐ ํฐ ๋น„์šฉ์ด ๋“ค์–ด๊ฐ NIO๋Š” ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹ ์ค‘ .. 2022. 3. 14.
TCP ์†Œ์ผ“ ํ†ต์‹  ์†Œ์ผ“(Socket) ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ฐ๊ฒฐ๋ถ€์ด๋‹ค. ์†Œ์ผ“์€ ํ”„๋กœํ† ์ฝœ, IP ์ฃผ์†Œ, ํฌํŠธ๋กœ ๊ตฌ์„ฑ๋œ ๋‘ ํ˜ธ์ŠคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. ์†Œ์ผ“ ์ข…๋ฅ˜ - TCP ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ์ „์†ก, ์—ฐ๊ฒฐ ์ง€ํ–ฅ, ํ๋ฆ„์ œ์–ด ๋ณด์žฅ - UDP ๋น„์—ฐ๊ฒฐํ˜•, ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ์ œํ•œ, ํ™•์‹คํ•œ ์ „๋‹ฌ ๋ณด์žฅ X TCP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ HTTP ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฐจ์ด ๐Ÿ”Ž ์—ฐ๊ฒฐ ๋ฐฉ์‹ - TCP: Server์™€ Client๊ฐ€ ํŠน์ • Port๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ , ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Œ - HTTP: Client์˜ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งŒ Server๊ฐ€ ์‘๋‹ตํ•˜์—ฌ ์š”์ฒญํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ , ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๋ฐ”๋กœ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•จ ๐Ÿ”Ž ๋ฐ์ดํ„ฐ ํ˜•ํƒœ - TCP: Byte Array - HTTP: String ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“๊ณผ .. 2022. 3. 11.
Java ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ํ(Queue) ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” FIFO(First In First Out) ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ•œ ํ˜•์‹์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ผ๋ฐ˜์ ์ธ ํ(์„ ํ˜• ๋˜๋Š” ์›ํ˜•)์™€ ๋‹ค๋ฅด๊ฒŒ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์š”์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์™€์•ผ ํ•˜๋ฏ€๋กœ ํ์— ๋“ค์–ด๊ฐ€๋Š” ์š”์†Œ๋Š” ๋น„๊ต ๊ฐ€๋Šฅํ•œ ๊ธฐ์ค€์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ฐฐ์—ด์ด๋‚˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํž™(heap)์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ์ด์ง„ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ํ•ญ์ƒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•ž์„ ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋ฉฐ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๐Ÿง ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ.. 2022. 1. 17.
[JAVA 8] ์ŠคํŠธ๋ฆผ(Stream) Stream java 8 ์ด์ „์—๋Š” ๋ฐฐ์—ด ๋˜๋Š” ์ปฌ๋ ‰์…˜์„ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด for ๋˜๋Š” foreach๋ฌธ์„ ๋Œ๋ฉฐ ์š”์†Œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋‹ค๋ฃจ์–ด์•ผ ํ–ˆ๋‹ค. stream์„ ํ™œ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ๋˜๋Š” ์ปฌ๋ ‰์…˜์— ํ•จ์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์กฐํ•ฉํ•ด์„œ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋žŒ๋‹ค๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค. Stream์€ ์›๋ณธ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. Stream์€ ์ผํšŒ์šฉ์œผ๋กœ ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. Stream์€ ๋ฐ˜๋ณต๋ฌธ์„ ๋‚ด๋ถ€์— ์ˆจ๊ธฐ๋Š” ๋‚ด๋ถ€ ๋ฐ˜๋ณต์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. Stream ๊ตฌ์กฐ ๊ฐ์ฒด.์ŠคํŠธ๋ฆผ์ƒ์„ฑ().๊ฐ€๊ณต().๊ฒฐ๊ณผ(); ์ค‘๊ฐœ ์—ฐ์‚ฐ์ด ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ stream์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ฑ : ์ŠคํŠธ๋ฆผ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์ค‘๊ฐœ ์—ฐ์‚ฐ(๊ฐ€๊ณตํ•˜๊ธฐ).. 2022. 1. 15.
[JAVA 8] ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค(Functional Interface) ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค(Functional Interface) ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋””ํดํŠธ ๋ฉ”์„œ๋“œ์™€๋Š” ์ƒ๊ด€์—†์ด ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ค์ง ํ•˜๋‚˜์ธ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๋žŒ๋‹ค์‹์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ๋งŒ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿง ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ƒ์†(extends) ๋ฐ›๊ฑฐ๋‚˜ ๊ตฌํ˜„(implements)ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค ๋‚ด ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค. - ์ธํ„ฐํŽ˜์ด์Šค (๋‹คํ˜•์„ฑ์˜ ํŠน์ง•) ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ด๋†“๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ๊ฐ ๊ธฐ๋Šฅ์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ˜•ํƒœ, ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ถ”์ƒ ํด๋ž˜์Šค (์ƒ์†์˜ ํŠน์ง•) ์ƒ์† ๊ด€๊ณ„์—์„œ ๊ฐ™์€ ๋ถ€๋ชจ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค ๊ฐ„์— ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜๊ณ  ํ™•์žฅ์‹œํ‚จ๋‹ค. ๊ทธ.. 2022. 1. 14.
[JAVA 8] ๋žŒ๋‹ค ํ‘œํ˜„์‹ ๋žŒ๋‹ค ํ‘œํ˜„์‹(Lambda Expression) ์ต๋ช… ํ•จ์ˆ˜(Anonymous Function)๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ค„์ธ ํ‘œํ˜„์‹์ด๋‹ค. ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ , ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง€์—ฐ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ต๋ช… ํ•จ์ˆ˜(Anonymous Function) ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•œ ์ด๋ฆ„ ์—†๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ณ€์ˆ˜์— ์ดˆ๊ธฐํ™”ํ•œ ์ต๋ช… ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ์‹œ ๋ณ€์ˆ˜๋ช…์„ ํ•จ์ˆ˜๋ช…์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ๋‹ค. ๐Ÿง ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์„ ์–ธ ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๋ฉด ๋ชจ๋‘ ์ „์—ญ์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„๋จน๋Š”๋‹ค. ์žฌ์‚ฌ์šฉ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์„ ์–ธ ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ํ˜ธ์ถœํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค. ์ต๋ช…ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด(First Class citizen)๋ผ๋Š” ํŠน.. 2022. 1. 13.
์ž๋ฐ” Map ์ž์ฃผ ์“ฐ๋Š” ๋ฉ”์„œ๋“œ ์ •๋ฆฌ ๊ฐ’ ๋„ฃ๊ธฐ & ๊ฐ€์ ธ์˜ค๊ธฐ put() / get(key) Map map = new HashMap(); map.put("์˜์ž", 10); map.put("์ฑ…์ƒ", 5); map.put("๋ฉ€ํ‹ฐํƒญ", 3); int val = 0; val = map.get("์˜์ž");// 10 val = map.get("์ฑ…์ƒ");// 5 val = map.get("๋ฉ€ํ‹ฐํƒญ");// 3 ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ’ ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด ๊ธฐ๋ณธ ๊ฐ’ ๋ฐ˜ํ™˜ getOrDefault(key, default) String[] alphabet = {"A", "B", "C" ,"A"}; Map map = new HashMap(); for (String key : alphabet) { map.put(key, map.getOrDefault(key, 0) + 1); } // .. 2021. 11. 2.
์ž๋ฐ” ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ (Array, List ์ •๋ ฌ) ๋ฐฐ์—ด(Array) ์ •๋ ฌ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ int[] arr = {1, 2, 4, 5, 3}; Arrays.sort(arr); ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ int[] arr = {1, 2, 4, 5, 3}; Arrays.sort(arr, Collections.reverseOrder()); ์ผ๋ถ€๋งŒ ์ •๋ ฌ int[] arr = {1, 2, 5, 4, 3};// 1 2 4 5 3 Arrays.sort(arr, 0, 4);// 1, 2, 4, 5 ์š”์†Œ๋งŒ ์ •๋ ฌ ๋ฆฌ์ŠคํŠธ(List) ์ •๋ ฌ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ArrayList list = new ArrayList(Arrays.asList("c", "a", "b")); Collections.sort(list);// a b c ArrayList list = new ArrayList(Arrays.as.. 2021. 11. 2.
์ž๋ฐ” ๋ฐฐ์—ด ↔ ๋ฆฌ์ŠคํŠธ ๋ณ€ํ™˜ (Array To List / List To Array) ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ (Array๋ฅผ List๋กœ) ex) String[] → List String[] arr = {"a", "b", "c"}; List list = new ArrayList(Arrays.asList(arr)); ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐฐ์—ด๋กœ (List๋ฅผ Array๋กœ) ex) List → String[] List list = Arrays.asList("a","b","c"); String[] arr = list.toArray(list); ์›์‹œ(Primitive) ํƒ€์ž… ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ex) int[] → List โ–ถ boxed(): Primitive stream ๊ฐ’๋“ค์„ Wrapper Class๋กœ ๋ฐ”๊ฟˆ โ–ถ collect(Collectors.toList()): stream์„ List๋กœ ๋ฐ”๊ฟˆ int[] arr = {1.. 2021. 11. 2.