Semantic Assertion์€ ์ฃผ๋กœ ์˜๋ฏธ๋ก ์  ๊ด€์ ์—์„œ ์ฐธ์ด๋ผ๊ณ  ๋‹จ์–ธํ•˜๋Š” ์ง„์ˆ ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ • ๋ฌธ๋งฅ(context)์ด๋‚˜ ์ƒํƒœ์—์„œ ์–ด๋–ค ์กฐ๊ฑด์ด๋‚˜ ๊ด€๊ณ„๊ฐ€ ๋ฐ˜๋“œ์‹œ ์„ฑ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•˜๋Š” ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์€ ์ปดํ“จํ„ฐ ๊ณผํ•™, ํŠนํžˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋…ผ๋ฆฌํ•™, ํ˜•์‹ ๊ฒ€์ฆ(formal verification) ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


1. Semantic Assertion์˜ ์ •์˜

๋”ฐ๋ผ์„œ Semantic Assertion์€ ์–ด๋–ค ์˜๋ฏธ๋ก ์  ์กฐ๊ฑด์ด๋‚˜ ์ƒํƒœ๊ฐ€ ํ•ญ์ƒ ์ฐธ์ด์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง„์ˆ ์ž…๋‹ˆ๋‹ค.


2. Semantic Assertion์˜ ํŠน์ง•


3. Semantic Assertion์˜ ์˜ˆ

(1) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ์‚ฌ์šฉ

Semantic Assertion์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ(state) ๋˜๋Š” ๋™์ž‘์ด ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

def divide(a: int, b: int) -> float:
    # Semantic Assertion: ๋‚˜๋ˆ„๋Š” ๊ฐ’ b๋Š” 0์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋จ
    assert b != 0, "Denominator must not be zero"
    return a / b


(2) ์ˆ˜ํ•™์  ์ •์˜

์–ด๋–ค ๋…ผ๋ฆฌ์‹์ด๋‚˜ ๋ช…์ œ๊ฐ€ ํŠน์ • ์ƒํƒœ์—์„œ ์ฐธ์ž„์„ ๋‹จ์–ธ.