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

์Šคํ„ฐ๋””45

[์˜ค๋ธŒ์ ํŠธ] 7์žฅ '๊ฐ์ฒด ๋ถ„ํ•ด' 7์žฅ์—์„œ๋Š” ์ถ”์ƒํ™”์˜ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ธ ๋ถ„ํ•ด์˜ ์—ญ์‚ฌ์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. ์ถ”์ƒํ™”๋Š” ํ”„๋กœ์‹œ์ € ์ถ”์ƒํ™”(procedure abstraction)์™€ ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”(data abstraction)๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ์ฒด์ง€ํ–ฅ์€ ํ”„๋กœ์‹œ์ € ์ถ”์ƒํ™”์ด๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ๋Š” ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด๋ฌธ์„ ๋‹คํ˜•์„ฑ์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. -> replace type code with class ์„ค๊ณ„์˜ ๋ณ€๊ฒฝ์€ ํƒ€์ž… ์ถ”๊ฐ€์™€ ์˜คํผ๋ ˆ์ด์…˜ ์ถ”๊ฐ€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ณ  ํƒ€์ž… ์ถ”๊ฐ€์˜ ๊ฒฝ์šฐ, ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๊ณ„์ธต์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜คํผ๋ ˆ์ด์…˜ ์ถ”๊ฐ€์˜ ๊ฒฝ์šฐ, ์ƒ์† ๊ณ„์ธต์— ์†ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ํ•œ๋ฒˆ์— ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„๋ณด๋‹ค๋Š” ์ถ”์ƒ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ณ€๊ฒฝ์— ์šฉ์ดํ•˜๋‹ค. ์ถ”์ƒ ๋ฐ์ดํ„ฐ๋Š” ์ „์ฒด ํƒ€์ž…์— ๋Œ€ํ•œ ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜์˜.. 2022. 11. 25.
[์˜ค๋ธŒ์ ํŠธ] 6์žฅ '๋ฉ”์‹œ์ง€์™€ ์ธํ„ฐํŽ˜์ด์Šค' 6์žฅ์—์„œ๋Š” ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค(๊ฐ์ฒด๊ฐ€ ์ˆ˜์‹ ํ•˜๋Š” ๋ฉ”์‹œ์ง€)๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ์›์น™์„ ์•Œ๋ ค์ค€๋‹ค. - ๋””๋ฏธํ„ฐ ๋ฒ•์น™ - ๋ฌป์ง€ ๋ง๊ณ  ์‹œ์ผœ๋ผ - ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค - ๋ช…๋ น-์ฟผ๋ฆฌ ๋ถ„๋ฆฌ ์›์น™ ์„ค๊ณ„ ์›์น™์„ ์กฐํ•ฉํ•˜๋ฉด ์ง๊ด€์ ์ด๊ณ , ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ์—ฐํ•œ ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์‹œ์ง€ = ์˜คํผ๋ ˆ์ด์…˜๋ช… + ์ธ์ž ๋ฉ”์‹œ์ง€ ์ „์†ก = ์˜คํผ๋ ˆ์ด์…˜๋ช… + ์ธ์ž + ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ž ์‹œ๊ทธ๋‹ˆ์ฒ˜ = ์˜คํผ๋ ˆ์ด์…˜(๋ฉ”์†Œ๋“œ)๋ช… + ํŒŒ๋ผ๋ฏธํ„ฐ๋ชฉ๋ก ๋””๋ฏธํ„ฐ ๋ฒ•์น™ ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ๋œ ์›์น™ -> ์ (.)์„ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜์ž use only one dot // ์•ˆ์ข‹์€ ์˜ˆ (train wreck) screening.getMovie().getDiscountConditions(); .. 2022. 11. 18.
[์˜ค๋ธŒ์ ํŠธ] 5์žฅ '์ฑ…์ž„ ํ• ๋‹นํ•˜๊ธฐ' 5์žฅ์€ GRASP ์ฑ…์ž„ํ• ๋‹นํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ณ , ์ฑ…์ž„์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์บก์Šํ™”, ์‘์ง‘๋„, ๊ฒฐํ•ฉ๋„ ๊ด€์ ์—์„œ ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ๊ฐ์ฒด ๋””์ž์ธ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๊ฒƒ ์ค‘์˜ ํ•˜๋‚˜๋Š” ์ฑ…์ž„์„ ์–ด๋””์— ๋‘˜ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ์‹ญ๋…„ ์ด์ƒ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์ผํ–ˆ์ง€๋งŒ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ๋Š” ์—ฌ์ „ํžˆ ์ ๋‹นํ•œ ์œ„์น˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค. ๋Š˜ ์ด๋Ÿฐ ์ ์ด ๋‚˜๋ฅผ ๊ดด๋กญํ˜”์ง€๋งŒ, ์ด์ œ๋Š” ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋ฆฌํŒฉํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค [Fowler 1999a](p.166). GRASP "General Responsibility Assignment Software Pattern (์ผ๋ฐ˜์ ์ธ ์ฑ…์ž„ ํ• ๋‹น์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ„ด)" INFORMATION EXPERT(์ •๋ณด ์ „๋ฌธ๊ฐ€) ํŒจํ„ด - ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•  ์ •๋ณด๋ฅผ .. 2022. 11. 11.
ํ—ค๋“œ ํผ์ŠคํŠธ ๋””์ž์ธ ํŒจํ„ด ๋””์ž์ธ ํŒจํ„ด์„ ์ƒ์„ฑ ํŒจํ„ด, ํ–‰๋™ ํŒจํ„ด, ๊ตฌ์กฐ ํŒจํ„ด์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ƒ๊ฐํ•ด ๋ณด์•„์•ผ ํ•œ๋‹ค. 2022.11.05(ํ† ) ์ฑ•ํ„ฐ 1 - Strategy Pattern (์ „๋žต ํŒจํ„ด) ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„๋ถ€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค. (Java interfaces have no implementation code, so no code reuse) -> ์ฆ‰, ํ–‰๋™์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ํ–‰๋™์ด ์ •์˜๋œ ์ž์‹ํด๋ž˜์Šค ๋˜ํ•œ ๋‹ค ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋””์ž์ธ ์›์น™์˜ ๊ธฐ๋ณธ์€ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ ๋‹ค๋ฅธ ์›์น™์€ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ”„๋กœ๊ทธ๋žจํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (program to an interface, in other words, program to a supertype) Composition์ด inheri.. 2022. 11. 5.
[์˜ค๋ธŒ์ ํŠธ] 4์žฅ '์„ค๊ณ„ ํ’ˆ์งˆ๊ณผ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„' 4์žฅ์—์„œ๋Š” ์˜ํ™” ์˜ˆ๋งค ์‹œ์Šคํ…œ์„ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๋ฐ์ดํ„ฐ ์ค‘์‹ฌ)์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์บก์Šํ™”, ์‘์ง‘๋„, ๊ฒฐํ•ฉ๋„๋กœ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•ด ๋ณธ๋‹ค. 2์žฅ ์ฝ”๋“œ๊ฐ€ ์–ด๋ ค์›Œ์„œ 4์žฅ๋„ ๋ฏธ๋ฆฌ ๊ฒ๋จน์—ˆ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋‹ค. ํ™•์‹คํžˆ ๋น„๊ตํ•ด์„œ ๋ณด๋‹ˆ๊นŒ ์™œ ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ง„์ •ํ•œ ์บก์Šํ™”๋ž€? ๋‹จ์ˆœํžˆ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ private๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก public ๊ฒŒํ„ฐ/์„ธํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋†“๋Š”๊ฑด ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ์บก์Šํ™”๋Š” ์•„๋‹ˆ๋‹ค. ์บก์Šํ™”๋Š” ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ๊ฒƒ์ด๋ผ๋„ ๊ฐ์ถ”๋Š” ๊ฒƒ์ด๊ณ , ๋‚ด๋ถ€ ์†์„ฑ์„ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฐ์ถ”๋Š” ๊ฒƒ์€ '๋ฐ์ดํ„ฐ ์บก์Šํ™”'์ด๋‹ค. ํ•˜์ง€๋งŒ ์ฑ…์—์„œ ์„ค๋ช…ํ•˜๋“ฏ์ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‚ด๋ถ€ ์†์„ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ, ์ด ๋ฉ”์†Œ๋“œ๋ฅผ.. 2022. 11. 4.
Garbage Collection in Java ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์ด๋ž€? ํž™์— ์žˆ๋Š” ์•ˆ ์“ฐ๋Š” ๊ฐ์ฒด๋“ค์„ ์ž๋ฐ”๊ฐ€ ์•Œ์•„์„œ ์ฒญ์†Œํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋‹ˆ...... ์ด๋ ‡๊ฒŒ ์‰ฝ๊ฒŒ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š” GC๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค..๐Ÿ˜ฅ Garbage Collection์ด๋ž€? ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ฐธ์กฐ(reference)๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ์ •๋ฆฌํ•ด ์ค˜์„œ RAM์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•œ๋‹ค. ์ •ํ™•ํžˆ๋Š” Heap ์˜์—ญ์ธ๋ฐ, ๋ชจ๋“  ๊ฐ์ฒด๋Š” Heap์— ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠœ๋‹ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์œผ๋กœ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ๋กœ๋Š” Responsiveness, ๋‘ ๋ฒˆ์งธ๋Š” Throughput์ด๋‹ค. ์„ค๋ช…์„ ํ•˜์ž๋ฉด, Responsiveness๋Š” ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‘๋‹ตํ•˜๋Š”๊ฐ€์ด๊ณ  Throughput์€ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์— ์ดˆ์ .. 2022. 10. 28.