μŠ€ν„°λ””/였브젝트

[였브젝트] 뢀둝 A '계약에 μ˜ν•œ 섀계'

moon101 2023. 2. 3. 17:03
뢀둝 Aμ—μ„œλŠ” 사전쑰건, 사후쑰건, λΆˆλ³€μ‹μ„ μ•Œμ•„λ³΄κ³  λ‹€ν˜•μ„±μ˜ μΈ‘λ©΄μ—μ„œ μŠˆνΌνƒ€μž…κ³Ό μ„œλΈŒνƒ€μž…μ΄ μ€€μˆ˜ν•΄μ•Ό ν•˜λŠ” μ œμ•½μ‘°κ±΄μ„ κ³„μ•½μ˜ κ΄€μ μ—μ„œ μ„€λͺ…ν•œλ‹€.  

 

계약에 μ˜ν•œ 섀계(Design by Contract, DBC)λ₯Ό μ‚¬μš©ν•˜λ©΄ ν˜‘λ ₯에 ν•„μš”ν•œ λ‹€μ–‘ν•œ μ œμ•½κ³Ό λΆ€μˆ˜νš¨κ³Όλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜κ³  λ¬Έμ„œν™”ν•  수 μžˆλ‹€(p.535).

 

계약에 μ˜ν•œ 섀계 κ΅¬μ„±μš”μ†Œ

  1. 사전쑰건 (precondition): λ©”μ„œλ“œκ°€ 호좜되기 μœ„ν•΄ λ§Œμ‘±λΌμ•Ό ν•˜λŠ” 쑰건. μš”κ΅¬μ‚¬ν•­(requires)을 λͺ…μ‹œν•˜λ©°, 사전쑰건을 λ§Œμ‘±μ‹œν‚€λŠ” 것은 λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μ˜λ¬΄λ‹€. 
  2. 사후쑰건 (postcondition): λ©”μ„œλ“œκ°€ μ‹€ν–‰λœ 후에 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보μž₯ν•΄μ•Ό ν•˜λŠ” 쑰건. 사후쑰건(effects)을 μ„œλ²„κ°€ λ§Œμ‘±μ‹œν‚€μ§€ λͺ»ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ˜ˆμ™Έλ₯Ό λ˜μ Έμ€˜μ•Ό ν•˜λ©°, 이것은 μ„œλ²„μ˜ μ˜λ¬΄μ΄λ‹€. 
  3. λΆˆλ³€μ‹ (invariant): 항상 참이라고 보μž₯λ˜λŠ” μ„œλ²„μ˜ 쑰건. λ©”μ„œλ“œ μ‹€ν–‰ μ€‘μ—λŠ” λΆˆλ³€μ‹μ„ λ§Œμ‘±μ‹œν‚€μ§€ λͺ»ν•  μˆ˜λ„ μžˆμ§€λ§Œ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ „μ΄λ‚˜ ν›„μ—λŠ” λΆˆλ³€μ‹μ΄ 항상 참이어야 ν•œλ‹€. λΆˆλ³€μ‹μ€ μΈμŠ€ν„΄μŠ€ 생λͺ…μ£ΌκΈ° μ „λ°˜μ— 걸쳐 μ§€μΌœμ Έμ•Ό ν•˜λŠ” κ·œμΉ™μ„ λͺ…μ„Έν•œλ‹€. 클래슀의 λͺ¨λ“  λ©”μ„œλ“œμ˜ 사전쑰건과 사후쑰건에 μΆ”κ°€λ˜λŠ” κ³΅ν†΅μ˜ 쑰건으둜 생각할 수 μžˆλ‹€. 

 

μ§„μ •ν•œ μ„œλΈŒνƒ€μ΄ν•‘ 관계λ₯Ό λ§Œλ“€κ³ μž ν•œλ‹€λ©΄, μ„œλΈŒνƒ€μž…μ—
1. 더 κ°•λ ₯ν•œ μ‚¬μ „μ‘°κ±΄μ΄λ‚˜
2. 더 μ™„ν™”λœ 사후쑰건
을 μ •μ˜ν•΄μ„œλŠ” μ•ˆ λœλ‹€. μŠˆνΌνƒ€μž…μ˜ λΆˆλ³€μ‹μ„ μœ μ§€ν•΄μ•Ό ν•˜κ³  μ„œλΈŒνƒ€μž…μ—μ„œ μŠˆνΌνƒ€μž…μ—μ„œ μ •μ˜ν•˜μ§€ μ•Šμ€ μ˜ˆμ™Έλ₯Ό λ˜μ Έμ„œλŠ” μ•ˆ λœλ‹€(p.572).