Semantic Assertion์ ์ฃผ๋ก ์๋ฏธ๋ก ์ ๊ด์ ์์ ์ฐธ์ด๋ผ๊ณ ๋จ์ธํ๋ ์ง์ ์ ๋ปํฉ๋๋ค. ์ด๋ ํน์ ๋ฌธ๋งฅ(context)์ด๋ ์ํ์์ ์ด๋ค ์กฐ๊ฑด์ด๋ ๊ด๊ณ๊ฐ ๋ฐ๋์ ์ฑ๋ฆฝํด์ผ ํ๋ค๊ณ ๋ช ์ํ๋ ํํ์ ๋๋ค. ์ด ๊ฐ๋ ์ ์ปดํจํฐ ๊ณผํ, ํนํ ํ๋ก๊ทธ๋๋ฐ, ๋ ผ๋ฆฌํ, ํ์ ๊ฒ์ฆ(formal verification) ๋ถ์ผ์์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ๋ผ์ 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
assert
๋ ๋จ์ํ ๋ฌธ๋ฒ์ ์กฐ๊ฑด์ด ์๋๋ผ, **"์๋ฏธ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด๋ ค๋ฉด b๊ฐ 0์ด ์๋์ด์ผ ํ๋ค"**๋ ์กฐ๊ฑด์ ๋ํ๋
๋๋ค.(2) ์ํ์ ์ ์
์ด๋ค ๋ ผ๋ฆฌ์์ด๋ ๋ช ์ ๊ฐ ํน์ ์ํ์์ ์ฐธ์์ ๋จ์ธ.