์ธ๋„ค์ผ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ 5์›์น™ SOLID 1. ๋‹จ์ผ์ฑ…์ž„์›์น™ (SRP) ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™ ์„ค๊ณ„์˜ 5์›์น™์€ 1. SRP  : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™2. OCP : ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™3. LSP  : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™4. ISP : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™5. DIP  : ์˜์กด ์—ญ์ „ ์›์น™ ์ด ์žˆ๋‹ค.๊ทธ ์ค‘ ์ฒซ๋ฒˆ์งธ ์›์น™, SRP์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค.๋‹จ์ผ์ฑ…์ž„์›์น™ (SRP : SingleResponsibilityPrinciple)ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๊ฐ€ ๋‹จ ํ•œ๊ฐ€์ง€ ์—ฌ์•ผ ํ•œ๋‹ค. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์€ SRP, Single Responsibility Principle ์ฆ‰, ๋‹จ์ผ ์ฑ…์ž„์›์น™์ด๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์ง€์ผœ์•ผ ํ•  ์›์น™ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.  ํ•˜์ง€๋งŒ ์–ธ๋œป ๋ณด๋ฉด ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ์„ ํ•ด์•ผ ํ•œ๋‹ค ๋ผ๋Š” ๋œป์œผ๋กœ ์˜คํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ..
์ธ๋„ค์ผ [Java] ๋ณ‘๋ ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ "๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ" "๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ" ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์€ ์ŠคํŠธ๋ฆผ API์˜ ํ•œ ์ข…๋ฅ˜๋กœ,๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ฆ‰, ์ŠคํŠธ๋ฆผ์˜ ์š”์†Œ๋“ค์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๋‹ค์ค‘์ฝ”์–ด(CPU ์ฝ”์–ด) ์‹œ์Šคํ…œ์—์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•˜๋ฉฐ, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์€ ๋‚ด๋ถ€์ ์œผ๋กœ Fork/Join ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•œ๋‹ค. Fork/Join ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž‘์—…์„ ์ž‘์€ ์ž‘์—…๋“ค๋กœ ๋ถ„ํ• ํ•˜๊ณ , ์ด๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์€ ์ž‘์—…์„ ๋” ์ž‘์€ ์ž‘์—… ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ์—์„œ..
์ธ๋„ค์ผ [Java] hashCode()์™€ equals()๋ž€? Java๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ 'hashCode()' ์™€ 'equals()' ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ๋งŽ์ด ์ ‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋“ค์€ ๊ฐ์ฒด์˜ ๋™๋“ฑ์„ฑ ๋น„๊ต์™€ ํ•ด์‹œ ๋งต(HashMap) ๋“ฑ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” hashCode()์™€ equals() ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ์ž์„ธํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. hashCode() Method hashCode() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋จผ์ €, ํ•ด์‹œ์ฝ”๋“œ๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ž„์˜์˜ ๊ธธ์ด์˜ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๊ฐ’์ด๋‹ค. ์ด๋Š” hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ hashCode() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ฃผ์š”..
์ธ๋„ค์ผ [Java] '๊นŠ์€ ๋ณต์‚ฌ'์™€ '์–•์€ ๋ณต์‚ฌ'๋ž€? ์˜ค๋Š˜ ์ •๋ฆฌํ•  ๋‚ด์šฉ์€ ์ž๋ฐ”์—์„œ์˜ ๊นŠ์€ ๋ณต์‚ฌ ์™€ ์–•์€ ๋ณต์‚ฌ์ด๋‹ค. ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ JAVA์—์„œ ๊นŠ์€ ๋ณต์‚ฌ์™€ ์–•์€ ๋ณต์‚ฌ์— ๋Œ€ํ•ด ๋ฐฐ์› ์—ˆ๋‹ค. ์ด ์ฐจ์ด์ ์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ฆฌํ•ด๋‘๊ณ ์ž ํ•œ๋‹ค. Deep Copy vs Shallow Copy ๊นŠ์€๋ณต์‚ฌ (Deep Copy) : '์‹ค์ œ ๊ฐ’'์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•œ๋‹ค. (ํž™ ์˜์—ญ) ์–•์€๋ณต์‚ฌ (Shallow Copy) : '์ฃผ์†Œ ๊ฐ’'์„ ๋ณต์‚ฌํ•œ๋‹ค. (์Šคํƒ์˜์—ญ) ์‚ฌ์‹ค์ƒ, ์ด๋ ‡๊ฒŒ๋งŒ ์„ค๋ช…ํ•˜๊ฒŒ ๋˜๋ฉด.. ์ดํ•ด๋ฅผ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด๋ณด์ž ์–•์€๋ณต์‚ฌ(Shallow Copy) class Person { private String name; private int age; public Person(S..
์ธ๋„ค์ผ [Java] Java8, Java11, Java17์˜ ์ฐจ์ด ๋ฐ ๊ธฐ๋Šฅ Java8, Java11, Java17 ์ˆ˜๋งŽ์€ ๋ฒ„์ „๋“ค์ด ์žˆ๋‹ค๊ณ  ์ด์•ผ๊ธฐ ํ•˜์ง€๋งŒ, ์ด ๋ฒ„์ „๋“ค์— ๋Œ€ํ•ด์„œ ์ด๊ฒŒ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์ž˜ ๋ชฐ๋ผ์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. Java8, Java11, Java17 ์ด๊ฒƒ๋“ค์€ ์˜ค๋ผํด(Oracle)์ด๋‚˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฒ„์ „๋“ค์€ ์ž๋ฐ” ํ”Œ๋žซํผ์˜ ์ฃผ์š” ์—…๋ฐ์ดํŠธ์ด๋ฉฐ, ๊ฐ๊ฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ๊ฐœ์„ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. Java 8 1. ๋žŒ๋‹ค ํ‘œํ˜„์‹(Lambda Expressions) : ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋žŒ๋‹ค ํ‘œํ˜„์‹์ด ๋„์ž…๋˜์—ˆ๋‹ค. ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ์ŠคํŠธ๋ฆผ API(Stream API) : ์ปฌ๋ ‰์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด API๋กœ, ๋ณ‘๋ ฌ์ฒ˜..