Loading...
2023. 12. 25. 12:19

[Java] ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ (Virtual Thread) ํ›‘์–ด๋ณด๊ธฐ

Java์˜ Thread๋ฅผ ๋ณด๋ฉด ๋Š˜์ƒ ๊ณ ๋ฏผ์ด์—ˆ๋˜ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Java์˜ Thread API๋Š” ์šด์˜์ฒด์ œ์˜ ์Šค๋ ˆ๋“œ์™€ 1:1๋กœ ๋งคํ•‘๋˜์–ด ์žˆ์–ด ์“ธ ๋•Œ๋งˆ๋‹ค ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์œผ๋กœ ์ธํ•œ ๋น„์šฉ ๋ฌธ์ œ๊ฐ€ ๊ฑธ๋ฆผ๋Œ์ด๊ณ , ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์˜ ๋ฐœ์ƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์Šค์ผ€์ผ ์•„์›ƒ์„ ํ•ด์•ผํ• ์ง€ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Reactive Programming)์„ ํ•ด์•ผํ• ์ง€ ์„ ํƒ์˜ ๊ณ ๋ฏผ์— ํœฉ์‹ธ์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์Šค์ผ€์ผ ์•„์›ƒ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์ƒˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(k8s)์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ ๋‚ด์ง€ ํด๋ผ์šฐ๋“œ์—์„œ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ์„ ์ž˜ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด ํŠธ๋ž˜ํ”ฝ์ด ๋Œ€๋Ÿ‰์œผ๋กœ ๋ฐœ์ƒํ•ด๋„ ์ž๋™์œผ๋กœ ์Šค์ผ€์ผ ์•„์›ƒํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ์„ ์กฐ์ ˆํ•ด์ฃผ๋‹ˆ ๊ฐ€์žฅ ํŽธํ•œ ๋ฐฉ๋ฒ•์ด์ง€์š”. ํ•˜์ง€๋งŒ ์ด๋Š” ์—ฌ์ „ํžˆ ๋‚ด๊ฐ€ ์šด์˜ํ•˜๋Š” ์„œ..

2022. 3. 8. 16:20

[Java] String, StringBuffer, StringBuilder ์ด์ •๋ฆฌ

์˜ค๋Š˜์€ Java์˜ String์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Java์—๋Š” ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ 3๊ฐ€์ง€ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. String StringBuffer StringBuilder 3๊ฐœ ๋ชจ๋‘ String์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์งš์–ด์•ผํ•  ๊ฒƒ์ด ์žˆ๋Š”๋ฐ์š”. ์ด 3๊ฐ€์ง€๋Š” ๋ชจ๋‘ ๋ฌธ์ž์—ด์„ ํ‘œ๊ธฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์ง€๋งŒ ๊ฐ์ž ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์ „ํ˜€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์ž…๋‹ˆ๋‹ค. See Java Reference ์ž๋ฐ” ๋ ˆํผ๋Ÿฐ์Šค ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ๋Š” ์„ธ ๊ฐ€์ง€์˜ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค String Strings are constant; their values cannot be changed after they are created. String์€ ์ƒ์ˆ˜์ด๋ฉฐ, ๊ฐ’์„ ๋งŒ๋“  ๋’ค์—๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค (Immutable..

2021. 3. 6. 19:22

[RxJava] 5. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 3ํŽธ (์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž)

2021/02/21 - [Programming/Java] - [RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž) [RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž) 2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) 2021/01/23 - [Programming/Java] - [RxJ.. blog.neonkid.xyz ์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ RxJava์˜ ๊ธฐ๋ณธ์„ ๋‹ค๋ฃจ๋Š” ์—ฐ์‚ฐ์ž ๋งˆ์ง€๋ง‰ ํŽธ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ํ•™ ์—ฐ์‚ฐ..

2021. 2. 21. 18:20

[RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž)

2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) 2021/01/23 - [Programming/Java] - [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce Reactive Programming์—์„œ ๊ฝƒ์ด๋ผ๊ณ .. blog.neonkid.xyz ์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด ๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฒฐํ•ฉ ์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ ์—ฐ์‚ฐ์ž๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Obser..

2021. 2. 7. 17:17

[RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž)

2021/01/23 - [Programming/Java] - [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce [RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce Reactive Programming์—์„œ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” Reactive Operator์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด Java 8์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ Reactive ์—ฐ์‚ฐ์ž๊ฐ€ ๋งค์šฐ ์ต์ˆ™ํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. RxJava์—. blog.neonkid.xyz ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Reactive์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž๋ฅผ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ RxJava์—์„œ ์ œ๊ณตํ•˜๋Š” ์ˆ˜๋งŽ์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๊ณ  ๊ทธ ์ค‘์— ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ์ž..

2021. 1. 23. 11:13

[RxJava] 2. Reactive ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž(Operator) - map, filter, reduce

Reactive Programming์—์„œ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” Reactive Operator์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด Java 8์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ Reactive ์—ฐ์‚ฐ์ž๊ฐ€ ๋งค์šฐ ์ต์ˆ™ํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. RxJava์—์„œ๋Š” Reactive Programming์— ๋งž์ถฐ, ์ด๋Ÿฌํ•œ Reactive Operator๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์•„์…”์•ผํ•  ๊ฒƒ์€ ์ด๋Ÿฐ Reactive ์—ฐ์‚ฐ์ž๊ฐ€ ๋‹จ์—ฐ RxJava, Java 8์—์„œ์™€ ๊ฐ™์ด "Java"์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Python์—์„œ๋„ Javascript์—์„œ๋„ Reactive Programming๋งŒ ์ง€์›ํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๋Š” ์–ด๋””์„œ๋“  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” RxJava์—์„œ Reative Operator๊ฐ€ ์–ด๋–ค์‹์œผ..

2021. 1. 10. 17:13

[RxJava] 1. RxJava์˜ ๊ธฐ๋ณธ - Observable

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Observable์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ๋‹ค๋ค„๋ดค๊ณ , ์ด์— ๋”ฐ๋ฅธ ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉฐ ๊ฐ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Observable์„ ์ข€ ๋” ์‹ฌ์˜คํ•˜๊ฒŒ ๋‹ค๋ค„๋ณด๊ณ , ์ด์— ์‘ํ•˜๋Š” Single, Maybe ๋“ฑ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค ๋“ฑ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ RxJava์™€ ์ข€ ๋” ์นœ์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Observer Design Pattern RxJava์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” Observable ํด๋ž˜์Šค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ธ Observer Pattern์„ ๊ทผ๊ฐ„์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์„œ๋ฒ„ ํŒจํ„ด - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „ ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ์˜ต์„œ๋ฒ„ ํŒจํ„ด(observer pattern)์€ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ด€์ฐฐ์ž๋“ค, ์ฆ‰ ์˜ต์ €๋ฒ„๋“ค์˜ ๋ชฉ๋ก์„ ๊ฐ์ฒด์— ๋“ฑ๋กํ•˜์—ฌ ..

2021. 1. 9. 16:38

[RxJava] RxJava๋กœ ์‹œ์ž‘ํ•˜๋Š” Java Reactive ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Java์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ์ผ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ๋„ C++์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ select ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ , Thread ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ด์šฉํ•ด์„œ ๋™์‹œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ํฐ ๊ณ ๋ฏผ์ด ๋  ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Java๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ Python์ด๋‚˜ Go์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋น„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋ฌด์ฒ™ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋‹จ์ˆœํ•˜๊ฒŒ Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๊ทธ๋ฆฌ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ž์›์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ์ด์Šˆ ๋“ฑ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•  ์ผ๋“ค์ด ๊ต‰์žฅํžˆ ๋งŽ์„ ๋ฟ๋”๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์ง ๋‹คํ•˜๋”๋ผ๋„ ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์Šค๋ ˆ๋“œ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ทธ๋ ‡..

[Java] - Java Stream API

Java ์–ธ์–ด๊ฐ€ ๋ฒŒ์จ 11 ๋ฒ„์ „์ด ๋‚˜์˜ค๊ณ  ์žˆ๋„ค์š”. Java๋Š” ์—ญ์‚ฌ๊ฐ€ ๊นŠ๊ณ , ์˜ค๋ž˜๋œ ์–ธ์–ด์ด์ž ๋น„๋‚œ๋„ ๋งŽ์ด ๋ฐ›์€ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์•„์ง๋„ ๋งŽ์€ ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ณ , ๋Œ€์ฒดํ•˜๋Š” ๊ณณ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Java 8์—์„œ ๋“ฑ์žฅํ•œ Stream์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. Stream API Stream ? ํ˜น์‹œ ๊ทธ๊ฑฐ, Buffer ๋ณด๋‹ค ์†๋„๊ฐ€ ๊ฒ๋‚˜ ๋น ๋ฅธ ๊ทธ Stream ? ๋„ค, ๊ทธ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. Java์—์„œ Stream์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋กœ, Java 8์—์„œ ์ƒˆ๋กœ์ด ๋“ฑ์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. Java 8 ์ด์ „์—๋Š” ๋ฐฐ์—ด์ด๋‚˜ Collections์˜ ์ž๋ฃŒ ๊ตฌ์กฐ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด for ๋ฌธ์ด๋‚˜ foreach ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์—ˆ์ง€์š”. ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๋Š” ๊ฒƒ์ด๋ผ๋ฉด, ํฐ ์ƒ๊ด€์ด ์—†..

2019. 9. 29. 10:09

[GP] Junit5๋ฅผ ์‚ฌ์šฉํ•œ Java ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

์ด ๊ธ€์€ N.K Dev Lab์—์„œ ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ ์œ ๋‹› ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋‹ค๋ณด๋ฉด ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ์•ˆ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ฒ˜์Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ–ˆ๋‹ค๋ณด๋‹ˆ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณดํ†ต ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ CLI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค๋ณด๋ฉด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ์•ˆ๋‚˜์˜ค๋Š”์ง€ ์ผ์ผ์ด ์†์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณธ๋‹ค๋Š” ๊ฒƒ์ด ์‰ฝ์ง€๋งŒ์€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”. What is Unit Test ?๊ทธ๋ ‡๋‹ค๋ฉด ์œ ๋‹› ํ…Œ์ŠคํŠธ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”? ์œ ๋‹› ํ…Œ์ŠคํŠธ๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์†Œ์Šค ์ฝ”๋“œ์˜ ํŠน์ • ๋ชจ๋“ˆ์ด ์˜๋„๋Œ€๋กœ ์ •ํ™•ํžˆ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ์ผ๋ จ์˜ ์ ˆ์ฐจ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์ž์„ธํ•œ ์„ค๋ช…์„ ..

2013. 8. 7. 15:55

Java Puzzlers - Scraping the Bottom of the Barrel (Google I/O 2011)

ํฌํ„ธ์„ ๋Œ์•„๋‹ค๋‹ˆ๋˜ ์ค‘์— ์žฌ๋ฐŒ๋Š” Java ์š”์†Œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ Google I/O 2011์— ์žˆ์—ˆ๋˜ Java Puzzler๋ผ๋Š” ๊ฒƒ์ธ๋ฐ์š”. ์ด ์˜์ƒ์—์„œ๋Š” ๋ฐœํ‘œ์ž JOSH BLOCH, JEREMY MANSON ๋‘ ์‚ฌ๋žŒ์ด 6๊ฐ€์ง€์˜ Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํผ์ฆ์„ ๋ฐœํ‘œํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๊ทธ ์ฒซ ๋ฒˆ์งธ, Time for a Change, ์˜์ƒ์— ๋‚˜์˜จ ์†Œ์Šค๋Œ€๋กœ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ๊ฑฐ์Šค๋ฆ„ ๋ˆ์€ ์–ผ๋งˆ์ž…๋‹ˆ๊นŒ? ๋ผ๋Š” ๋ฌธ์ œ์ง€์š”. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€, ์ž๋ฃŒํ˜•์ด double์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์Šค๋ฆ„๋ˆ์€ 0.8999999999999999๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ์š”?Java์—์„œ double ์—ฐ์‚ฐ์€ ์ •ํ™•ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉฐ, big decimal์„ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Big Decimal์„ ์‚ฌ์šฉํ•ด ๋‹ค์‹œ ํ•œ ๋ฒˆ ์—ฐ์‚ฐ์„ ํ•ด..