pk
์ ๊ฐ์ Long ์์ฑ์ ์ฌ์ฉํ๋ @EqualsAndHashCode
์ฃผ์์ ํด์ ๊ธฐ๋ฐ ๊ตฌ์กฐ(์: HashSet)์ ํจ๊ป ์ฌ์ฉํ ๋ ์ผ๋ถ ์์์น ๋ชปํ ๋์์ ์ ๋ฐํ ์ ์์ต๋๋ค.
์:
<strong i="9">@Entity</strong>
@EqualsAndHashCode(of = "pk")
class Foo {
<strong i="10">@Id</strong>
private Long pk;
private LocalDate createdAt;
}
<strong i="13">@Entity</strong>
class Foo {
<strong i="14">@Id</strong>
private Long pk;
private LocalDate createdAt;
public int hashCode() {
int PRIME = true;
int result = 1;
Object $pk = this.getPk();
int result = result * 59 + ($pk == null ? 43 : $pk.hashCode());
return result;
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
}
๋ฐ๋ผ์ pk = null์ธ ์ธ์คํด์ค์ pk = 43์ธ ๋ค๋ฅธ ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ผํ ํด์ ์ฝ๋๋ฅผ ๋ฐํํ๊ณ ํด์ ๊ธฐ๋ฐ ๊ตฌ์กฐ์์ ๋์ผํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ toString
๋ฅผ ์ฌ์ฉํ๋ OmniFaces ListConverter๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํ๋์ฝ๋ฉ๋ ์์๊ฐ ์๋ ๊ฐ์ฒด ์ธ์คํด์ค์ ํด์์ฝ๋๋ฅผ ๋ฐํํ ์๋ ์์ต๋๋ค.
์ด๋ฏธ ์ด ์๋๋ฆฌ์ค๋ฅผ ์ํํ๊ฑฐ๋ ์ด ์ํฉ์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?!
๋ฒ์ ์ ๋ณด
๋ฐ๋ผ์ pk = null์ธ ์ธ์คํด์ค์ pk = 43์ธ ๋ค๋ฅธ ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ผํ ํด์ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ๋ฌด์์ ์ ํํ๋ ํญ์ ํด์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
Arrays.hashCode
, String.hashCode
๋ฐ ๊ธฐํ ๋ง์ ๊ฒ๋ค์ ๋ถํ์ํ๊ฒ ์๋ง์ ์ถฉ๋์ ๋ฐ์์ํต๋๋ค.
ํ๋์ฝ๋ฉ๋ ์์๊ฐ ์๋ ๊ฐ์ฒด ์ธ์คํด์ค์ ํด์์ฝ๋๋ฅผ ๋ฐํํ ์๋ ์์ต๋๋ค.
์๋์ผ๋ก ์์ฑํ ์ฝ๋์์ id
๊ฐ ํ ๋น๋๊ธฐ ์ ์ ํธ์ถ๋์ง ์๋๋ค๊ณ ์ฃผ์ฅํ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ์ ํ์คํ ์ด์ํ์ง๋ง ๋ชจ๋ ๋์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
์ด ๊ฒฝ์ฐ PK๊ฐ null์ผ ๋ ์ด๋ค ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋์ง ์๋ ค์ฃผ๋ ์ฃผ์ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐ๋ณธ 43์ ๊ฒฝ์ฐ.
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฐ์์๊ฒ ๋ ๋ง์ ์ ์ด ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค.
@EqualsAndHashCode(of = "pk", ifAnyNull = -1)
๋ฐ๋ผ์ null์ธ ๋ชจ๋ ํ๋์ ๋ํด 43 ๋์ -1์ ์ฌ์ฉํฉ๋๋ค.
43์ ์๋ง๋ ๋ค๋ฅธ ์ซ์๋งํผ ์ข๊ณ -1, 0 ๋ฐ 1๋ณด๋ค ๋ซ์ต๋๋ค. ์ค์ ์ ๊ตฌ์ฑํ ์ ์๊ฒ ํ๋ฉด ๋งค์ฐ ๋ฎ์ ๋ถ๊ฐ๊ฐ์น์ ๋ํ ์ ์ง ๊ด๋ฆฌ ๋ถํ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
null์ ๋ํด ID ํด์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด equals ๊ณ์ฝ์ด ๊นจ์ง๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
43์ ์๋ง๋ ๋ค๋ฅธ ์ซ์๋งํผ ์ข๊ณ -1, 0 ๋ฐ 1๋ณด๋ค ๋ซ์ต๋๋ค. ์ค์ ์ ๊ตฌ์ฑํ ์ ์๊ฒ ํ๋ฉด ๋งค์ฐ ๋ฎ์ ๋ถ๊ฐ๊ฐ์น์ ๋ํ ์ ์ง ๊ด๋ฆฌ ๋ถํ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
null์ ๋ํด ID ํด์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด equals ๊ณ์ฝ์ด ๊นจ์ง๋๋ค.