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

์˜ค๋ธŒ์ ํŠธ17

[์˜ค๋ธŒ์ ํŠธ] 11์žฅ 'ํ•ฉ์„ฑ๊ณผ ์œ ์—ฐํ•œ ์„ค๊ณ„' 11์žฅ์—์„œ๋Š” ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ฉ์„ฑ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•œ๋‹ค. ์ƒ์†์ด ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋†’์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๋ฐ ๋ฐ˜ํ•ด ํ•ฉ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๋Š์Šจํ•œ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์„ค๋ช…ํ•œ๋‹ค. ๊ตฌ๋ถ„ ์ƒ์† (class inheritance) ํ•ฉ์„ฑ (object composition) ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค ์—ฐ๊ฒฐ ์ „์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ถ€๋ถ„์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด ํฌํ•จ -> ๋ถ€๋ถ„ ๊ฐ์ฒด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ์˜์กด์„ฑ ์ปดํŒŒ์ผํƒ€์ž„์— ํ•ด๊ฒฐ๋จ -> ์ปดํŒŒ์ผํƒ€์ž„์— ๊ฒฐ์ •๋œ ์ž์‹ ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋Š” ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์—†์Œ -> ์ž์‹ ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋‹ค์–‘ํ•œ ์กฐํ•ฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์กฐํ•ฉ์˜ ์ˆ˜๋งŒํผ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ -> ํด๋ž˜์Šค ํญ๋ฐœ/์กฐํ•ฉ์˜ ํญ๋ฐœ ๋ฌธ์ œ ์•ผ.. 2022. 12. 23.
[์˜ค๋ธŒ์ ํŠธ] 10์žฅ '์ƒ์†๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ' 10์žฅ์—์„œ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋Œ€ํ‘œ์ ์ธ ์žฌ์‚ฌ์šฉ ๊ธฐ๋ฒ•์ธ ์ƒ์†์— ๊ด€ํ•ด ์„ค๋ช…ํ•˜๋ฉฐ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ƒ์†์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ์กฐ์–ธํ•œ๋‹ค. ๋Œ€์‹  11์žฅ์— ์„ค๋ช…ํ•  ํ•ฉ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” DRY(Don't Repeat Yourself) ์›์น™์— ๋”ฐ๋ผ ์ฝ”๋“œ ์•ˆ์— ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ๋‘ ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€? 1. ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ณ  ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋’ค ๋กœ์ง์„ ํƒ€์ž…์ฝ”๋“œ์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. -> ๋‹จ, ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋‚ฎ์€ ์‘์ง‘๋„์™€ ๋†’์€ ๊ฒฐํ•ฉ๋„ ๋ฌธ์ œ์— ์‹œ๋‹ฌ๋ฆฌ๊ฒŒ ๋จ 2. ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์†์ด๋‹ค. ์ƒ์†์ด๋ž€? - ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ• - ํด๋ž˜.. 2022. 12. 16.
[์˜ค๋ธŒ์ ํŠธ] 9์žฅ '์œ ์—ฐํ•œ ์„ค๊ณ„' 9์žฅ์—์„œ๋Š” ์ด์ „์— ์„ค๋ช…ํ•œ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜๋œ ์„ค๊ณ„ ์›์น™์— ๊ทผ๊ฑฐํ•ด ๋‹ค์‹œ ์„ค๋ช…ํ•œ๋‹ค. ์ €๋ฒˆ์ฃผ์— ๋””์ž์ธ ํŒจํ„ด์—์„œ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ์˜ค๋ธŒ์ ํŠธ 9์žฅ์„ ์ฝ์œผ๋ฉด์„œ ์™œ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ด์œ ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๊ฒƒ๋„ ์—ญ์‹œ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„, ์ฆ‰ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ์ธ๋ฐ ์˜์กด์„ฑ ๋ณ€๊ฒฝ์˜ ์˜ํ–ฅ์„ ์ตœ์†Œํ™” ํ•˜๊ธฐ์œ„ํ•ด ์ถ”์ƒํ™”์—๋งŒ ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ๊ฐ์ฒด๊ฐ€ ๊ตฌ์ฒด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋„๋ฉ”์ธ ๊ฐœ๋…์— ํ• ๋‹น๋ผ ์žˆ๋˜ ๊ฐ์ฒด ์ƒ์„ฑ ์ฑ…์ž„์„ ๋„๋ฉ”์ธ ๊ฐœ๋…๊ณผ ์•„๋ฌด ์ƒ๊ด€์ด ์—†๋Š” ๊ฐ€๊ณต์˜ ๊ฐ์ฒด, factory๋กœ ์˜ฎ๊ธด ๊ฒƒ์ด๋‹ค. ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ (Open-Closed Principle, OCP) - ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ์ˆ˜์ •์—๋Š” ๋‹ซ.. 2022. 12. 9.
[์˜ค๋ธŒ์ ํŠธ] 8์žฅ '์˜์กด์„ฑ ๊ด€๋ฆฌํ•˜๊ธฐ' 8์žฅ์—์„œ๋Š” ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ๋‹ค. ์˜์กด์„ฑ์€ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ๊ณผ ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ(run-time dependency) - ๊ฐ์ฒด ์‚ฌ์ด์˜ ์˜์กด์„ฑ ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ(compile-time dependency) - ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์˜์กด์„ฑ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ๊ณผ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์ด ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค(p.260) ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผํƒ€์ž„ ์˜์กด์„ฑ๊ณผ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์„ ๋‹ค๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 1. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ํ•ด๊ฒฐ 2. ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ setter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ํ•ด๊ฒฐ 3. ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ ์ธ์ž๋ฅผ ์ด์šฉํ•ด ์˜์กด์„ฑ ํ•ด๊ฒฐ ์—ฌ๊ธฐ์„œ 2๋ฒˆ setter ๋ฉ”์„œ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๋Š”.. 2022. 12. 2.
[์˜ค๋ธŒ์ ํŠธ] 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.