[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