[Rust] trait: PartialEq๊ณผ Eq
PartialEq๊ณผ Eq๋ ๋น๊ต๋ฅผ ์ ์ํ๋ ๊ธฐ๋ณธ trait์ด๋ค. ์ฐ์ฐ์ ==, !=์ ๋์ํ๋ ๋์์ ํํํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
Rust์ ๊ฐ๋ฐ์ ์ผ ์ ๋์ ์ค๊ณ ์์น์ ๋๋ฌ๋ด๋ ๋ถ๋ถ์ด๋ค.
PartialEq
PartialEq์ ๋น๊ต์ ๋ํ ์ ๋ฐ์ ์ธ ๋์์ ์ง์ ๊ตฌํํ๋ trait์ด๋ค.
derive๋ก ์๋ ๊ตฌํ์ ์ํฌ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ํ๋๊ฐ ์ผ์นํ ๋๋ง true๋ฅผ ๋ฐํํ๋ฉฐ, ์ง์ ๊ตฌํ์ ํ ๋๋ eq ๋ฉ์๋๋ฅผ ํตํด ๋ถ๋ถ์ ์ธ ๋น๊ต๋ฅผ ์ ์ฉ์ํฌ ์๋ ์๋ค.
ne ๋ฉ์๋๋ ๊ธฐ๋ณธ ๊ตฌํ์ด ๋์ด์์ด์ ๊ตฌํํ์ง ์์ผ๋ฉด !eq(...)๋ฅผ ๋ด๋ณด๋ธ๋ค.
์ผ๋ฐ์ ์ธ ๋น๊ต๋ฅผ ์ ์ํ๊ธฐ ์ํด์๋ PartialEq๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค.
Eq
์์ ์ผ์น ๋น๊ต๊ฐ ๊ฐ๋ฅํจ์ ๋ํ๋ด๋ PartialEq ์ข
์ ํธ๋ ์์ด๋ค.
์ด ํธ๋ ์์ ์ ์ฉ์ํค๋ ค๋ฉด PartialEq๊ฐ ๊ตฌํ๋ ์ํ์์ ๋น impl๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ๋ง์ด๋ค.
์ด๊ฑด ์ด ์์ฒด๋ก๋ ๋๋จํ ํน์ํ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๊ฑฐ๋ ํ์ง๋ ์๋ค.
"์๋ฏธ"๋ฅผ ๋ถ์ฌํ๊ธฐ ์ํ ๊ฒ์ด๋ค.
Eq ํธ๋ ์์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ์ฌ์ฉ๋ก๋ HashMap์ Key ํ์ ์ด๋ค.
ํค์ ๋ํด์ ํด์๊ฐ์ ๋ฝ์๋ผ ์ ์๋ Hash ํธ๋ ์๊ณผ ๋๋ฑ ๋น๊ต๋ฅผ ๋ณด์ฅํ๋ Eq๋ฅผ ์ ์ฝํ๋ค.
์ผ๋ฐ์ ์ธ ํ์
๋ค์ ๋๋ฑ ๋น๊ต๋ฅผ ๊ตฌํํ๋๋ฐ ๋ฌธ์ ๊ฐ ์๊ณ , ๋๋ถ๋ถ์ ๊ธฐ๋ณธ ํ์
๋ค์ ์ ๋ถ Eq๋ฅผ ๊ตฌํํ๋ค.
์ฌ๊ธฐ์ ์์ธ๋ ๋ถ๋์์์ ํ์
๋ค ๋ฟ์ด๋ค. ์ฌ์ค ๋ถ๋์์์ ์ ๊ฒฉ์ฉ์ด๋ผ๊ณ ๋ด๋ ๋๋ค.
์๋ฅผ ๋ค์ด f64, f32 ๊ฐ์ ๋ถ๋์์์ ํ์
์ PartialEq์ ๊ตฌํํ์ง๋ง Eq๋ ๊ตฌํํ์ง ์๋๋ค.
์ ๊ทธ๋ด๊น?
๊ด๊ณ ์ด๋ก ์ ๋ฐ๋ฅด๋ฉด ๋๋ฑ ๋น๊ต๋ผ๊ณ ํ๋ค๋ฉด ๊ฐ์ ๊ฐ์ ๋ํด์๋ ๋๋ฑ ๋น๊ต๊ฐ true๊ฐ ๋์ด์ผ ํ๋ค.
ํ์ง๋ง ๋ถ๋์์์ ๊ท๊ฒฉ์์๋ ์๋ค์ํผ ๊ฐ์ ๊ฐ์ธ๋ฐ๋ NaN != NaN๊ฐ true์ธ ์ด์ํ ๋น๊ต ๊ฒฐ๊ณผ๋ค์ด ์ ๋์จ๋ค...
์ด๋ฐ๊ฒ ์ผ๊ด์ฑ์ ํ๊ดดํ๊ณ ์ฝ๋๋ฅผ ์ด์ง๋ฝํ๋ค๊ณ trait์ 2๋จ๊ณ๋ก ๋ถ๋ฆฌํด๋ ๊ฒ์ด๋ค.
PartialOrd์ Ord ํธ๋ ์์ ๊ด๊ณ๋ ์ด์ ๊ฐ๋ค.
์ฐธ์กฐ
https://en.wikipedia.org/wiki/Partial_equivalence_relation
https://rinthel.github.io/rust-lang-book-ko/appendix-03-derivable-traits.html