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

[์˜ค๋ธŒ์ ํŠธ] ๋ถ€๋ก A '๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„'

by moon101 2023. 2. 3.
๋ถ€๋ก A์—์„œ๋Š” ์‚ฌ์ „์กฐ๊ฑด, ์‚ฌํ›„์กฐ๊ฑด, ๋ถˆ๋ณ€์‹์„ ์•Œ์•„๋ณด๊ณ  ๋‹คํ˜•์„ฑ์˜ ์ธก๋ฉด์—์„œ ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž…์ด ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์„ ๊ณ„์•ฝ์˜ ๊ด€์ ์—์„œ ์„ค๋ช…ํ•œ๋‹ค.  

 

๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„(Design by Contract, DBC)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜‘๋ ฅ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์ œ์•ฝ๊ณผ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค(p.535).

 

๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„ ๊ตฌ์„ฑ์š”์†Œ

  1. ์‚ฌ์ „์กฐ๊ฑด (precondition): ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด ๋งŒ์กฑ๋ผ์•ผ ํ•˜๋Š” ์กฐ๊ฑด. ์š”๊ตฌ์‚ฌํ•ญ(requires)์„ ๋ช…์‹œํ•˜๋ฉฐ, ์‚ฌ์ „์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์˜๋ฌด๋‹ค. 
  2. ์‚ฌํ›„์กฐ๊ฑด (postcondition): ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ ํ›„์— ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด์žฅํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด. ์‚ฌํ›„์กฐ๊ฑด(effects)์„ ์„œ๋ฒ„๊ฐ€ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์ค˜์•ผ ํ•˜๋ฉฐ, ์ด๊ฒƒ์€ ์„œ๋ฒ„์˜ ์˜๋ฌด์ด๋‹ค. 
  3. ๋ถˆ๋ณ€์‹ (invariant): ํ•ญ์ƒ ์ฐธ์ด๋ผ๊ณ  ๋ณด์žฅ๋˜๋Š” ์„œ๋ฒ„์˜ ์กฐ๊ฑด. ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ค‘์—๋Š” ๋ถˆ๋ณ€์‹์„ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์ด๋‚˜ ํ›„์—๋Š” ๋ถˆ๋ณ€์‹์ด ํ•ญ์ƒ ์ฐธ์ด์–ด์•ผ ํ•œ๋‹ค. ๋ถˆ๋ณ€์‹์€ ์ธ์Šคํ„ด์Šค ์ƒ๋ช…์ฃผ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ง€์ผœ์ ธ์•ผ ํ•˜๋Š” ๊ทœ์น™์„ ๋ช…์„ธํ•œ๋‹ค. ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์ „์กฐ๊ฑด๊ณผ ์‚ฌํ›„์กฐ๊ฑด์— ์ถ”๊ฐ€๋˜๋Š” ๊ณตํ†ต์˜ ์กฐ๊ฑด์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ง„์ •ํ•œ ์„œ๋ธŒํƒ€์ดํ•‘ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์„œ๋ธŒํƒ€์ž…์—
1. ๋” ๊ฐ•๋ ฅํ•œ ์‚ฌ์ „์กฐ๊ฑด์ด๋‚˜
2. ๋” ์™„ํ™”๋œ ์‚ฌํ›„์กฐ๊ฑด
์„ ์ •์˜ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ์Šˆํผํƒ€์ž…์˜ ๋ถˆ๋ณ€์‹์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ  ์„œ๋ธŒํƒ€์ž…์—์„œ ์Šˆํผํƒ€์ž…์—์„œ ์ •์˜ํ•˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์„œ๋Š” ์•ˆ ๋œ๋‹ค(p.572).

 

๋Œ“๊ธ€