๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์Šคํ„ฐ๋””/์˜ค๋ธŒ์ ํŠธ

[์˜ค๋ธŒ์ ํŠธ] 10์žฅ '์ƒ์†๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ'

by moon101 2022. 12. 16.

10์žฅ์—์„œ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋Œ€ํ‘œ์ ์ธ ์žฌ์‚ฌ์šฉ ๊ธฐ๋ฒ•์ธ ์ƒ์†์— ๊ด€ํ•ด ์„ค๋ช…ํ•˜๋ฉฐ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ƒ์†์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ์กฐ์–ธํ•œ๋‹ค. ๋Œ€์‹  11์žฅ์— ์„ค๋ช…ํ•  ํ•ฉ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

๊ฐœ๋ฐœ์ž๋Š” DRY(Don't Repeat Yourself) ์›์น™์— ๋”ฐ๋ผ ์ฝ”๋“œ ์•ˆ์— ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.  

 

๋‘ ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€? 

1. ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ณ  ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋’ค ๋กœ์ง์„ ํƒ€์ž…์ฝ”๋“œ์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

-> ๋‹จ, ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋‚ฎ์€ ์‘์ง‘๋„์™€ ๋†’์€ ๊ฒฐํ•ฉ๋„ ๋ฌธ์ œ์— ์‹œ๋‹ฌ๋ฆฌ๊ฒŒ ๋จ

2. ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์†์ด๋‹ค. 

 

 

์ƒ์†์ด๋ž€?

- ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•

- ํด๋ž˜์Šค ์•ˆ์— ์ •์˜๋œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ตฌํ˜„ ๊ธฐ๋ฒ•

 

 

์žฌ์‚ฌ์šฉ์˜ ๊ด€์ ์—์„œ ์ƒ์†์˜ ๋‹จ์ ์€?

- ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ๋„ (์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ)

- ์ทจ์•ฝํ•œ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค ๋ฌธ์ œ(Fragile Base Class Problem, Brittle Base Class Problem), ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์— ์˜ํ•ด ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ˜„์ƒ

 

 

์ƒ์†์„ ์œ„ํ•œ ๊ฒฝ๊ณ 

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

 

๊ทธ๋Ÿผ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

ํ•ฉ์„ฑ์ด ์žˆ์ง€๋งŒ.... ์ƒ์†์„ ์จ์•ผํ•œ๋‹ค๋ฉด, ์ƒ์†์œผ๋กœ ์ธํ•œ ํ”ผํ•ด๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 

๋ฐ”๋กœ ์ถ”์ƒํ™”๋‹ค. ์ถ”์ƒํ™”๋ฅผ ์ฐพ์•„๋‚ด๊ณ  ์ƒ์† ๊ณ„์ธต ์•ˆ์˜ ํด๋ž˜์Šค๋“ค์ด ๊ทธ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. 

 

 

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ์ถ”์ƒํ™”๋ฅผ ํ•ด์•ผ ํ• ๊นŒ?

1. ์ฐจ์ด๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•˜๋ผ

- ์ค‘๋ณต ์ฝ”๋“œ ์•ˆ์—์„œ ์ฐจ์ด์ ์„ ๋ณ„๋„์˜ ๋ฉ”์„œ๋“œ๋กœ ์ถ”์ถœํ•œ๋‹ค. 

2. ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ์˜ฌ๋ ค๋ผ

- ๋ถ€๋ชจํด๋ž˜์Šค๋Š” ์ถ”์ƒํด๋ž˜์Šค๋กœ ๋งŒ๋“ ๋‹ค. ๊ณตํ†ต ๋ฉ”์„œ๋“œ ๋ถ€๋ถ„์„ ๋จผ์ € ๋ถ€๋ชจํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚ค๊ณ  ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋„ ๊ฐ™์ด ์ด๋™์‹œํ‚จ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํด๋ž˜์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์˜ ์ด์œ ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ์ฆ‰ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‘์ง‘๋„๊ฐ€ ๋†’๋‹ค. 

 

 

// TODO 

์ž๋ฐ” generic ๊ณต๋ถ€ํ•˜๊ธฐ

์ž๋ฐ” Duration

java.time.Duration

java.time.LocalDateTime

.between ๋ฉ”์†Œ๋“œ

๋Œ“๊ธ€