๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (142)

Tech Log ๐Ÿ› ๏ธ

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ ํŒจํ„ด 7์žฅ - ํ–‰์œ„

๋ฉ”์‹œ์ง€ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด, ๋ฐœ์‹ ์ž์˜ ์ƒํƒœ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์ง€๋งŒ ์ˆ˜์‹ ์ž์˜ ์ƒํƒœ๋Š” ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์‹œ์ €๋Š” ๋‹น์žฅ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์„ธ๋ถ€ ๊ตฌํ˜„์ด ์กด์žฌํ•œ๋‹ค ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‚ดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. (์บก์Šํ™”) function() { input(); process(); output(); } ์„ ํƒ ๋ฉ”์‹œ์ง€ ์„ ํƒ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…์‹œ์  ์กฐ๊ฑด๋ฌธ์˜ ์‚ฌ์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณผ๋„ํ•œ ์„ ํƒ๋ฉ”์‹œ์ง€์˜ ์‚ฌ์šฉ์€ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. public void display(Subject subject, Brush brush) { brush.display(subject); } ๋”๋ธ” ๋””์ŠคํŒจ์น˜ 2๊ฐœ์˜ ์„ ํƒ ๋ฉ”์‹œ์ง€๋ฅผ ์ง๋ ฌ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. https://www.youtube.com/watch?v=s-tXAHub6v..

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ํŒจํ„ด 6์žฅ - ์ƒํƒœ

๊ฐ์ฒด๋Š” ์™ธ๋ถ€์— ๋“œ๋Ÿฌ๋‚˜๋Š” ํ–‰์œ„์™€ ํ–‰์œ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๋‹จ์œ„๋‹ค. ์ƒํƒœ - ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œ ์‚ฌํ•œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐ ์ƒํƒœ๋Š” ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๋‘ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ์œ ์‚ฌํ•œ ์ง€ ์•Œ๋ ค๋ฉด 1. ๋‘ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ๋™์ผํ•œ ์—ฐ์‚ฐ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š”๊ฐ€? 2. ๋™์ผํ•œ ์‹œ์ ์— ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š”๊ฐ€? ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. ์ง์ ‘ ์ ‘๊ทผ - ์ง์ ‘ ์ ‘๊ทผ์˜ ์žฅ์ ์€ ๋ช…ํ™•์„ฑ์ด๋‹ค. x=10 // ๋งค์šฐ๋งค์šฐ ๋ช…ํ™•ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด doorRegister = 1; // ์ง๊ด€์ ์ด์ง€ ์•Š์Œ door.open(); // ๋งค์šฐ ์ง๊ด€์ ์ž„ ๋”ฐ๋ผ์„œ ์ง์ ‘ ์ ‘๊ทผ์ด ๋งŽ๋‹ค๋ฉด ์›ํ™œํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„์ ‘ ์ ‘๊ทผ - ๋ช…ํ™•์„ฑ๊ณผ ์ง์ ‘์„ฑ์„ ํฌ์ƒํ•ด์„œ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ..

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ ํŒจํ„ด 5์žฅ - ํด๋ž˜์Šค(2)

ํด๋ž˜์Šค ๋‚ด๋ถ€ ํด๋ž˜์Šค ์ž‘์€ ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค์˜ ์žฅ์ ์„ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ๊ฐ์‹ผ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊ฐ์‹ผ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. public class Enclose { private String field; public class Inner { public String example() { return field; } } } ๋งŒ์•ฝ ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์ •์ ์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค. ์ธ์Šคํ„ด์Šค๋ณ„ ํ–‰์œ„ ๊ฐ์ฒด์˜ ๋กœ์ง์ด ํด๋ž˜์Šค์— ์˜ํ•ด ์™„์ „ํžˆ ์ •์˜๋  ๋•Œ, ์ฝ”๋“œ ๋…์ž๋Š” ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€ ์ดํ•ดํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด..

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ ํŒจํ„ด 5์žฅ - ํด๋ž˜์Šค(1)

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

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ ํŒจํ„ด 3์žฅ - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด๋ก 

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

Gradle ์ด๋ž€?

Gradle ์ด๋ž€? ์ž๋ฐ”๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๋ณด๋ฉด Gradle ์„ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝํ—˜์„ ๋งŽ์ด ํ•œ๋‹ค. ๊ทผ๋ฐ ์ด Gradle ์€ ์ •ํ™•ํžˆ ์–ด๋–ค ์—ญํ• ์„ ํ• ๊นŒ? ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ฐพ์•„๋ณด๋ฉด, Gradle is an open-source build automation tool flexible enough to build almost any type of software. Gradle ์€ ์Šค์Šค๋กœ ๋นŒ๋“œ ์ž๋™ํ™”(build automation) ํˆด์ด๋ผ๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ๐Ÿง ๋นŒ๋“œ๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ผ๋‹จ Gradle์ด ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•ด์คŒ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์„ ์ข€ ๋” ์œคํƒํ•˜๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ฑฐ๊ฐ™๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ Gradle์€ ๋‹ค..

JVM ๋‚ด๋ถ€๋กœ

JVM์ด๋ž€? ์ž๋ฐ”๋ฅผ ๊ฐ€์ง€๊ณ  ์ฝ”๋”ฉ์„ ํ•˜๋Š” ์‚ฌ๋žŒ์€ ํ•œ๋ฒˆ ์ฏค JVM ์ด๋ž€ ๋‹จ์–ด๋ฅผ ๋“ค์–ด์™”์„ ๊ฒƒ์ด๋‹ค. ์ด JVM์€ ์ปดํ“จํ„ฐ์™€์˜ ์†Œํ†ต์„ ๋„์™€์ฃผ๋Š”๋ฐ, ์–ด๋–ค ์‹์œผ๋กœ ์†Œํ†ต์„ ๋„์™€์ฃผ๋Š” ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ดํŽด๋ณด์ž ๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋”ฉ์„ ํ•˜๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์ปดํŒŒ์ผํ•˜๋ฉด .class ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ํ˜„์žฌ ์ด ํด๋ž˜์Šค ํŒŒ์ผ์€ ๊ธฐ๊ณ„์–ด๊ฐ€ ์•„๋‹Œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋˜์–ด์žˆ๋‹ค. ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ผ๊นŒ? JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ์ด๋‹ค. ์–ธ์ œ ์–ด๋””์„œ๋“  ์šด์˜์ฒด์ œ์— ๊ด€๊ณ„์—†์ด JVM ์œ„์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” System.out.println("Hello World"); ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. // class version 61.0 (61) // access flags 0x21 public clas..

equals & hash code ์™€ ์ด๋ฅผ ๊ฐ™์ด ์žฌ์ •์˜ ํ•˜๋Š” ์ด์œ 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐฑ์—”๋“œ ๋ฐ๋ธŒ์ฝ”์Šค์—์„œ ์ง„ํ–‰ํ•œ Tech Log ํ™œ๋™ ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 1. String ํด๋ž˜์Šค์˜ equals & hashcode ์†Œํ”„ํŠธ์›จ์–ด ์„ธ๊ณ„์—์„œ๋Š” ๋ฌธ์ž์—ด๋„ ์ด์ƒํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ๋ฐ”๋กœ ๋™๋“ฑ์„ฑ์„ ๋ณด์žฅํ•ด์ฃผ๊ธฐ ์œ„ํ•จ์ธ๋ฐ, ์ด๋•Œ ์•ž์—์„œ ๋งํ•œ equals ๋ฉ”์†Œ๋“œ์™€ HashCode ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ equals ์™€ HashCode ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž ๋ณธ๋ฌธ์—์„œ๋Š” String์„ ๋ชจ๋ฐฉํ•œ String_test ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฒƒ์ด๋ฉฐ , ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’๋“ค์„ ๋งž์ถฐ๋‚˜๊ฐˆ ๊ฒƒ์ด๋‹ค. equals ๋น„๊ต ๋จผ์ € ๊ฐ์ฒด์˜ ๋™๋“ฑ์„ฑ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด equals์˜ ๊ฐ’์„ ๋น„๊ตํ•ด๋ณด์ž String string1 = new String("hi"); String string..