[Rust] assert

assert๋Š” Rust์˜ ์œ ์šฉํ•œ ํ‘œ์ค€ ๋งคํฌ๋กœ ์ค‘ ํ•˜๋‚˜๋‹ค.
๋‹ค๋ฅธ ์–ธ์–ด๋“ค์˜ assertion ๊ธฐ๋Šฅ๋“ค๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€๋Š” ์•Š๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์งœ๊ฑฐ๋‚˜, ๋ฌด๊ฒฐ์„ฑ์„ ์ง€์†์ ์œผ๋กœ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ๊ฑฐ์˜ ํ•„์—ฐ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๊ทธ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.




๊ธฐ๋ณธ assert

๊ธฐ๋ณธ assert๋Š” true/false ๊ฐ’๋งŒ์„ ๋ฐ›๋Š”๋‹ค.

true๋ฉด ํ†ต๊ณผํ•˜๊ณ 


false๋ฉด ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•œ๋‹ค.


๊ทธ๋ฆฌ๊ณ , ์ถ”๊ฐ€ ์ธ์ž๋กœ ํŒจ๋‹‰ ๋ฉ”์„ธ์ง€๋ฅผ ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฑฐ๋„ format ๊ธฐ๋ฐ˜์ด๋ผ์„œ ๋ฉ”์„ธ์ง€์— ๊ฐ’์„ ์ด๋ž˜์ €๋ž˜ ๊ตฌ๊ฒจ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.




assert_eq

assert_eq๋Š” ๋น„๊ต ์ „์šฉ ์ˆ์ปท์ด๋‹ค.

์ธ์ž 2๊ฐœ ๋ฐ›๊ณ , ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด ํŒจ๋‹‰์„ ๋˜์ง„๋‹ค.


์ด๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒจ๋‹‰ ๋ฉ”์„ธ์ง€ ์ปค์Šคํ…€์ด ๋˜๊ณ 


๋‹จ์œ„ํ…Œ์ŠคํŠธ ์งค๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋…€์„์ด๋‹ค.
์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.


๋ฐ˜๋Œ€ ๋ถ€์ •๋ฒ„์ „์œผ๋กœ assert_ne๊ฐ€ ์žˆ๊ธด ํ•œ๋ฐ, ๋”ฑํžˆ ์“ด์ ์€ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์“ธ์ผ์ด ๋ณ„๋กœ ์—†๋‹ค.




debug_assert

๊ทผ๋ฐ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์™€ ๋ณ„๊ฐœ๋กœ, ์ฝ”๋“œ ์‚ฌ์ด์‚ฌ์ด์—๋„ ๋ฌด๊ฒฐ์„ฑ์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ๋ผ์›Œ๋„ฃ๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๊ณ  ๋˜ assert๋ฅผ ๋–ก์น ํ•˜๋ฉด, ์ด๊ฒƒ๋„ ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค๋ณด๋‹ˆ ์„ฑ๋Šฅ ์†์‹ค์ด ๋ฐœ์ƒํ•˜๋Š”๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ธ๋‹ค.

๊ทธ๋Ÿด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด debug_assert๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์ „์กฐ๊ฑด์ด๋‚˜ ์‚ฌํ›„์กฐ๊ฑด, ํ˜น์€ ์ค‘๊ฐ„์ค‘๊ฐ„์— ํ•ด๋‹น ์กฐ๊ฑด์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•จ์„ ์ฝ”๋“œ๋กœ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์‹ค ์ € ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์กฐ๊ฑด์ด ๊นจ์ง€๊ธด ํ•ด์„œ ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ๋Š” ์•„๋‹ˆ๋‹ค.

์•„๋ฌดํŠผ ์ด๊ฑด assert์™€ ๋™์ž‘์€ ๊ฑฐ์˜ ๊ฐ™์ง€๋งŒ, release ๋นŒ๋“œ์—์„œ๋Š” ์ฝ”๋“œ์—์„œ ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†์‹ค์ด ๋ณ„๋กœ ์—†๋‹ค.
๊ฐœ๋ฐœ ์ค‘์—๋งŒ ์ฒดํฌ๊ฐ€ ๋œ๋‹ค.


๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋”๋ผ๋„, ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋งŒ ๋ป‘๋‚˜๊ณ , release ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ž˜ ๋ˆ๋‹ค.



์ฐธ์กฐ
https://doc.rust-lang.org/std/macro.debug_assert.html