๋ชฉ๋กโœ๏ธ/Java (6)

DevLog ๐Ÿ˜ถ

๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์„๊นŒ? - Value Object vs Reference Object

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ด๋ฒˆ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ ˆ๋ฒจ 1 ๋•Œ ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ํŽ˜์–ด์™€ '๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์–ด๋– ๋ƒ๋Š” ์˜๊ฒฌ์„ ๋ฐ›์•˜๋‹ค. ๋‹น์‹œ ๋ ˆ๋ฒจ 1 ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ์ •์˜์— ๋Œ€ํ•ด์„œ ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ์—ˆ๊ณ , ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ๋‹ค๋Š” ๊ฑธ ๊ณต๋ถ€ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„ ์ƒ๊ฐ ์—†์ด ๊ทธ๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ–ˆ๋‹ค. public class Car { private static final int CAR_FORWARD_NUMBER = 4; private final CarName name; private final CarPosition position; ... public Car move(final int power) { if (power >= CAR_FORWARD_N..

โœ๏ธ/Java 2023. 4. 21. 10:44
[Java] Classic TDD vs Mockist TDD

์–ผ๋งˆ ์ „์— ์šฐํ…Œ์ฝ”์—์„œ ์ฒด์Šค ํ”ผ๋“œ๋ฐฑ 2 ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ, ๋””ํŠธ๋กœ์ดํŠธ ํ•™ํŒŒ (classicist) vs ๋Ÿฐ๋˜ ํ•™ํŒŒ (Mockist)์— ๋Œ€ํ•ด์„œ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‘˜ ๋‹ค ์ฒ˜์Œ ๋“ค์–ด๋ณธ ์šฉ์–ด์—ฌ์„œ ๊ถ๊ธˆํ•œ ๋งˆ์Œ์— ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋ฉฐ ์ž‘์„ฑํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. (์ „๋ฐ˜์ ์ธ ๋‚ด์šฉ์€ ํ…Œ์ฝ”ํ†ก ๋ฐœํ‘œ ๋‚ด์šฉ์„ ๋งŽ์ด ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค ๐Ÿ™‡‍โ™€๏ธ) โœ”๏ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. 1. Low-level ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•œ๋‹ค. 2. ์ผ๋ฐ˜์ ์ธ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 3. ๋นจ๋ผ์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹จ์œ„๋ž€ ๋ฌด์—‡์ผ๊นŒ? ๋งŒ์•ฝ, ๊ธฐ๋Šฅ ๋‹จ์œ„๋ผ๊ณ  ๊ตฌ์„ฑ๋œ๋‹ค๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ด€์ ์—์„œ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์ด ๋‹จ์œ„๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์–ด๋– ํ•œ ๋‹จ์œ„๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š”..

โœ๏ธ/Java 2023. 3. 28. 08:59
[Java] ๋ฌธ์ž์—ด - String pool๊ณผ String concatenation

์šฐํ…Œ์ฝ”์—์„œ ๋ฌธ์ž์—ด ๊ด€๋ จ ์ˆ˜์—…์„ ๋“ฃ๋‹ค๊ฐ€, ์ด๊ฒƒ์ €๊ฒƒ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ดค๋Š”๋ฐ ๋ธ”๋กœ๊ทธ ๊ธ€๋กœ ์ž‘์„ฑํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค ๐Ÿค— ์˜์‹์˜ ํ๋ฆ„๋Œ€๋กœ ๊ถ๊ธˆํ•œ ์ ๋“ค์„ ์ฐพ์•„๋ณธ ๊ฑฐ์—ฌ์„œ ์ƒ๋‹นํžˆ ๋‘์„œ๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿฅฒ โœ”๏ธ String๊ณผ String pool String์€ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. ๋ถˆ๋ณ€ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ, final ํด๋ž˜์Šค๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. UTF-16 ์ธ์ฝ”๋”ฉ์„ ํ™œ์šฉํ•˜์—ฌ, ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ฌธ์ž๋ฅผ 2๋ฐ”์ดํŠธ (=16๋น„ํŠธ) ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋กœ ํ‘œํ˜„ํ•œ๋‹ค. public String(int[] codePoints, int offset, int count) { checkBoundsOffCount(offset, count,..

โœ๏ธ/Java 2023. 3. 5. 02:07
[TDD] ์ž๋ฐ” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„ (feat. ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„)

์šฐํ…Œ์ฝ” ์ˆ˜์—… ๋“ค์—ˆ๋˜ ๋‚ด์šฉ ์ค‘์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚ด ์ƒ๊ฐ์„ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์„œ ์ž‘์„ฑํ•˜๋Š” ๊ธ€! โœจ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋ฒ”์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์–ด๋Š ์ •๋„๋กœ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ๋ ๊นŒ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค. ์‚ฌ์‹ค ์ด์ „์—๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ์ž‘์„ฑํ•œ ๊ฒฝํ—˜๋„ ์—†๊ณ , given-when-then๋งŒ ๊ตฌ๊ตฌ์ ˆ์ ˆ ์•Œ๊ณ  ์žˆ์—ˆ์–ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋ฒ”์œ„๊นŒ์ง€๋„ ์ œ๋Œ€๋กœ ์ƒ๊ฐํ•ด ๋ณธ ์  ์—†์—ˆ๋‹ค. (์™€ ์ง„์งœ ์ž๋ž‘์ด๋‹ค!) ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ public ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ์ „๋ถ€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋ฌผ๋ก , private ๋ฉ”์„œ๋“œ๋Š” public์—์„œ ํ˜ธ์ถœํ•ด์„œ ๊ฐ„์ ‘์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ดˆ๋ฐ˜์— ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„ํ–‰ํ•  ๋•Œ, private ๋ฉ”์„œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ๋ฆฌํ”Œ๋ž™์…˜๊นŒ์ง€ ์จ๊ฐ€๋ฉด์„œ ์ง„ํ–‰ํ–ˆ๋‹ค. ์šฐ์„ , Car..

โœ๏ธ/Java 2023. 2. 14. 00:13