item 20 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ์ถ์ ํด๋์ค๊ฐ ์ ์ํ ํ์ ์ ๊ตฌํํ๋ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ํด๋์ค์ ํ์ ํด๋์ค๊ฐ ๋์ด์ผ ํ๋ค.
- ์ธํฐํ์ด์ค๊ฐ ์ ์ธํ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ ์ํ๊ณ ์ผ๋ฐ ๊ท์น์ ์ ์งํจ ํด๋์ค๋ผ๋ฉด ๋ค๋ฅธ ์ด๋ค ํด๋์ค๋ฅผ ์์ํ๋ ๊ฐ์ ํ์ ์ผ๋ก ์ทจ๊ธ๋๋ค.
- ๊ธฐ์กด ํด๋์ค์๋ ์์ฝ๊ฒ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ๋ฃ์ ์ ์๋ค.
๋ ํด๋์ค๊ฐ ๊ฐ์ ์ถ์ ํด๋์ค๋ฅผ ํ์ฅํ๊ธธ ์ํ๋ค๋ฉด ๊ทธ ์ถ์ ํด๋์ค๋ ๊ณ์ธต๊ตฌ์กฐ์ ๋ ํด๋์ค์ ๊ณตํต ์กฐ์์ด์ด์ผ ํ๋ค. ์ด ๋ฐฉ์์ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ์ ์ปค๋ค๋ ํผ๋์ ์ผ์ผํจ๋ค.
๋ฏน์ค์ธ์ด๋ ํด๋์ค๊ฐ ๊ตฌํํ ์ ์๋ ํ์ ์ผ๋ก ๋ฏน์ค์ธ์ ๊ตฌํํ ํด๋์ค์ ์๋์ ์ฃผ๋ ํ์ ์ธ์๋ ํน์ ์ ํ์ ํ์๋ฅผ ์ ๊ณตํ๋ค๊ณ ์ ์ธํ๋ ํจ๊ณผ๋ฅผ ์ค๋ค.
Comparable์ ์์ ์ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ค ๋ผ๋ฆฌ๋ ์์๋ฅผ ์ ํ ์ ์๋ค๊ณ ์ ์ธํ๋ ๋ฏน์ค์ธ ์ธํฐํ์ด์ค ์ด๋ค.
๋์ ํ์ ์ ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ํ์ ๊ธฐ๋ฅ์ ํผํฉํ๋ค๊ณ ํด์ ๋ฏน์ค์ธ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ธํฐํ์ด์ค๋ก๋ ๊ณ์ธต๊ตฌ์กฐ๊ฐ ์๋ ํ์ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค ์ ์๋ค.
-
๋ชจ๋ ์กฐํฉ
-
์กฐํฉ ํญ๋ฐ
// ๊ณจ๊ฒฉ ๊ตฌํ์ ํด๋์ค
public abstract class AbstractMapEntry<K,V>
implements Map.Entry<K,V> {
// ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํธ๋ฆฌ๋ ์ด ๋ฉ์๋๋ฅผ ๋ฐ๋์ ์ฌ์ ์ํด์ผ ํ๋ค.
@Override public V setValue(V value) {
throw new UnsupportedOperationException();
}
// Map.Entry.equals์ ์ผ๋ฐ ๊ท์ฝ์ ๊ตฌํํ๋ค.
@Override public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Map.Entry))
return false;
Map.Entry<?,?> e = (Map.Entry) o;
return Objects.equals(e.getKey(), getKey())
&& Objects.equals(e.getValue(), getValue());
}
// Map.Entry.hashCode์ ์ผ๋ฐ ๊ท์ฝ์ ๊ตฌํํ๋ค.
@Override public int hashCode() {
return Objects.hashCode(getKey())
^ Objects.hashCode(getValue());
}
@Override public String toString() {
return getKey() + "=" + getValue();
}
}
// ๋จ์ ๊ตฌํ์ ๊ณจ๊ฒฉ ๊ตฌํ์ ์์ ๋ณ์ข
์ผ๋ก Abstract Map.SimpleEntry๊ฐ ์ข์ ์๋ค.
// ๋จ์ ๊ตฌํ๋ ๊ณจ๊ฒฉ ๊ตฌํ๊ณผ ๊ฐ์ด ์์์ ์ํด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฒ์ด์ง๋ง ์ถ์ ํด๋์ค๊ฐ ์๋๋ ์ ์ด ๋ค๋ฅด๋ค.
ํต์ฌ ์ ๋ฆฌ
๊ณจ๊ฒฉ ๊ตฌํ์ ํจ๊ป ์ ๊ณตํ์.
๊ฐ๋ฅํ ํ ์ธํฐํ์ด์ค์ ๋ํดํธ ๋ฉ์๋๋ก ์ ๊ณตํ์ฌ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ชจ๋ ๊ณณ์์ ํ์ฉํ๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.