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

[์˜ค๋ธŒ์ ํŠธ] 13์žฅ '์„œ๋ธŒํด๋ž˜์‹ฑ๊ณผ ์„œ๋ธŒํƒ€์ดํ•‘'

by moon101 2023. 1. 6.
13์žฅ์—์„œ๋Š” ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž…์˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ณ  ํƒ€์ž… ๊ณ„์ธต์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„ ์›์น™์„ ์„ค๋ช…ํ•œ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž… ๊ณ„์ธต์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๊ด€์ ์—์„œ ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž… ์‚ฌ์ด์— ํ–‰๋™์ด ํ˜ธํ™˜๋˜๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. 

 

์ƒ์†์˜ ์šฉ๋„๋Š” ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. 

์ฒซ ๋ฒˆ์งธ๋Š” ํƒ€์ž… ๊ณ„์ธต ๊ตฌํ˜„์ด๊ณ  ๋‘๋ฒˆ์งธ๋Š” ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด๋‹ค. 

 

๋™์ผํ•œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ํ–‰๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹คํ˜•์ ์ธ ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์˜ ํ–‰๋™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํƒ€์ž… ๊ณ„์ธต์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์†์€ ์ด ํƒ€์ž… ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. 

 

๊ทธ๋Ÿผ ํƒ€์ž… ๊ณ„์ธต์—์„œ ํƒ€์ž…์€ ๋ฌด์—‡์„ ๋งํ•˜๋Š” ๊ฑธ๊นŒ?

๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๊ด€์ ์—์„œ์˜ ํƒ€์ž…์€ ๋™์ผํ•œ ์˜คํผ๋ ˆ์ด์…˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์ฆ‰, ๋™์ผํ•œ ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋Š” ๋™์ผํ•œ ํƒ€์ž…์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํƒ€์ž… ๊ณ„์ธต์„ ์œ„ํ•œ ์ƒ์†์€ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

์ƒ์† ๊ด€๊ณ„๊ฐ€ is-a ๊ด€๊ณ„๋ฅผ ๋ชจ๋ธ๋ง ํ• ๋•Œ,

ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์„ ๋•Œ

์ด ๋‘ ์กฐ๊ฑด ๋ชจ๋‘๋ฅผ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ ์ƒ์†์„ ์‚ฌ์šฉํ•œ๋‹ค. 

๊ทธ๋ž˜์„œ is-a ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•˜๋”๋ผ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ํ–‰๋™์ด ๋‹ค๋ฅด๋‹ค๋ฉด(ํ–‰๋™์— ์—ฐ๊ด€์„ฑ์ด ์—†๋‹ค๋ฉด) ์ƒ์†๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. 

 

์„œ๋ธŒํด๋ž˜์‹ฑ๊ณผ ์„œ๋ธŒํƒ€์ดํ•‘์˜ ๋œป์€?

์„œ๋ธŒํด๋ž˜์‹ฑ(๊ตฌํ˜„ ์ƒ์†/ํด๋ž˜์Šค ์ƒ์†)์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ธŒํด๋ž˜์‹ฑ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

์„œ๋ธŒํƒ€์ดํ•‘(์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†)์€ ํƒ€์ž… ๊ณ„์ธต์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ์„œ๋ธŒํƒ€์ดํ•‘์ด ๋˜๋ ค๋ฉด ํ–‰๋™ ํ˜ธํ™˜์„ฑ(behavioral substitution)์„ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋ฉฐ, ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์ž๋ฆฌ์— ์ž์‹ ํด๋ž˜์Šค๋กœ ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅ(substitutability) ํ•ด์•ผ ํ•œ๋‹ค. 

 

SOLID ์›์น™ ์ค‘ ํ•˜๋‚˜์ธ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์€ ์˜ฌ๋ฐ”๋ฅธ ์ƒ์† ๊ด€๊ณ„์˜ ํŠน์ง•์„ ์ •์˜ํ•œ๋‹ค. 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฐจ์ด์ ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๋‹ค. 

 

๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„(Design By Contract, DBC)๋ž€?

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ํ˜‘๋ ฅ์„ ์˜๋ฌด(obligation)์™€ ์ด์ต(benefit)์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ณ„์•ฝ์˜ ๊ด€์ ์—์„œ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

  • ์‚ฌ์ „์กฐ๊ฑด(precondition): ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ์กฑ์‹œ์ผœ์•ผ ํ•˜๋Š” ์กฐ๊ฑด
  • ์‚ฌํ›„์กฐ๊ฑด(postcondition): ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ ํ›„์— ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด์žฅํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด
  • ํด๋ž˜์Šค ๋ถˆ๋ณ€์‹(class invariant): ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „๊ณผ ์‹คํ–‰ ํ›„์— ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ์กฑ์‹œ์ผœ์•ผ ํ•˜๋Š” ํด๋ž˜์Šค ๋ถˆ๋ณ€์‹

๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„๋Š” ์—…์บ์ŠคํŒ… ์‹œ ํ˜‘๋ ฅ์ด ์„ฑ๊ณตํ•˜๋ ค๋ฉด ์„œ๋ธŒํƒ€์ž…์ด ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œ์ผœ์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. 

  • ์„œ๋ธŒํƒ€์ž…์— ๋” ๊ฐ•๋ ฅํ•œ ์‚ฌ์ „์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„œ๋ธŒํƒ€์ž…์— ์Šˆํผํƒ€์ž…๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ๋” ์•ฝํ•œ ์‚ฌ์ „์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ์„œ๋ธŒํƒ€์ž…์— ์Šˆํผํƒ€์ž…๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ๋” ๊ฐ•ํ•œ ์‚ฌํ›„์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ์„œ๋ธŒํƒ€์ž…์— ๋” ์•ฝํ•œ ์‚ฌํ›„์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค. 

 

 

๋Œ“๊ธ€