10 ~ 14
ยท Object๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ ๊ตฌ์ฒด ํด๋์ค์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์์ํด์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์๋ค.
ยท Object์์ final์ด ์๋ ๋ฉ์๋(equals, hashCode, toString, clone, finalize)๋ ๋ชจ๋ ์ฌ์ ์(overriding)๋ฅผ ์ผ๋์ ๋๊ณ ์ค๊ณ๋ ๊ฒ์ด๋ผ ์ฌ์ ์ ์ ์ง์ผ์ผ ํ๋ ์ผ๋ฐ ๊ท์ฝ์ด ๋ช ํํ ์ ์๋์ด ์๋ค.
- ๋ฉ์๋๋ฅผ ์๋ชป ๊ตฌํํ๋ฉด ๋์ ํด๋์ค๊ฐ ์ด ๊ท์ฝ์ ์ค์ํ๋ค๊ณ ๊ฐ์ ํ๋ ํด๋์ค(HashMap๊ณผ HashSet ๋ฑ)์ด ์ค์๋ํ๊ฒ ๋ง๋ค ์ ์๋ค.
ยท ์ด ์ฅ์์๋ Object ๋ฉ์๋๋ค์ด ์ธ์ ์ด๋ป๊ฒ ์ฌ์ ์ํด์ผ ํ๋์ง๋ฅผ ๋ค๋ฃฌ๋ค. Comparable.compareTo ๋ํ ์ฑ๊ฒฉ์ด ๋น์ทํ์ฌ ์ด๋ฒ ์ฅ์์ ํจ๊ป ๋ค๋ฃฌ๋ค.
์์ดํ
10. equals๋ ์ผ๋ฐ ๊ท์ฝ์ ์ง์ผ ์ฌ์ ์ํ๋ผ
ยท equals ๋ฉ์๋๋ ์๋ชป ์ฌ์ ์ํ๋ฉด ๋์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ค. ๋ฌธ์ ๋ฅผ ํํผํ๋ ๊ฐ๋ฅ ์ฌ์ด ๊ธธ์ ์์ ์ฌ์ ์ ํ์ง ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฅ ๋๋ฉด ๊ทธ ํด๋์ค์ ์ธ์คํด์ค๋ ์ค์ง ์๊ธฐ ์์ ๊ณผ๋ง ๊ฐ๊ฒ ๋๋ค.
equals๋ฅผ ์ฌ์ ์ํ์ง ์์์ผ ํ๋ ์ํฉ
1. ๊ฐ ์ธ์คํด์ค๊ฐ ๋ณธ์ง์ ์ผ๋ก ๊ณ ์ ํ๋ค.
- ๊ฐ์ ํํํ๋ ๊ฒ ์๋๋ผ ๋์ํ๋ ๊ฐ์ฒด๋ฅผ ํํํ๋ ํด๋์ค๊ฐ ์ฌ๊ธฐ์ ํด๋นํ๋ค. ex) Thread
2. ์ธ์คํด์ค์ ๋ ผ๋ฆฌ์ ๋์น(logical equality)๋ฅผ ๊ฒ์ฌํ ์ผ์ด ์๋ค.
3. ์์ ํด๋์ค์์ ์ฌ์ ์ํ equals๊ฐ ํ์ ํด๋์ค์๋ ๋ฑ ๋ค์ด๋ง๋๋ค.
ex) ๋๋ถ๋ถ์ Set ๊ตฌํ์ฒด๋ AbstractSet์ด ๊ตฌํํ equals๋ฅผ ์์ ๋ฐ์ ์ด๋ค. List์ AbstractList, Map๊ณผ AbstracMap๋ ๊ทธ๋ ๋ค.
4. ํด๋์ค๊ฐ private์ด๊ฑฐ๋ package-private์ด๊ณ equals ๋ฉ์๋๋ฅผ ํธ์ถํ ์ผ์ด ์๋ค.
ยท equals๋ฅผ ์ค์๋ก๋ผ๋ ํธ์ถ๋๋ ๊ฑธ ๋ง๊ณ ์ถ๋ค๋ฉด ๋ค์์ฒ๋ผ ๊ตฌํํด๋์.
equals๋ฅผ ์ฌ์ ์ํด์ผ ํ๋ ์ํฉ
ยท ๊ฐ์ฒด ์๋ณ์ฑ ์๋๋ผ ๋ ผ๋ฆฌ์ ๋์น์ฑ์ ํ์ธํด์ผํ๋ ์ํฉ์ด๊ณ , ์์ ํด๋์ค์ equals๊ฐ ๋ ผ๋ฆฌ์ ๋์น์ฑ์ ๋น๊ตํ๋๋ก ์ฌ์ ์๋์ง ์๋๋ค๋ฉด equals๋ฅผ ์ฌ์ ์ํด์ผ ํ๋ค.
- ์ฃผ๋ก ๊ฐ ํด๋์ค(Integer, String)๋ค์ด ์ฌ๊ธฐ ํด๋นํ๋ค.
- ๊ฐ ํด๋์ค๋ผ๋ ๊ฐ์ด ๊ฐ์ ์ธ์คํด์ค๊ฐ ๋ ์ด์ ๋ง๋ค์ด์ง์ง ์์์ ๋ณด์ฅํ๋ ์ธ์คํด์ค ํต์ ํด๋์ค(์์ดํ 1)๋ผ๋ฉด equals๋ฅผ ์ฌ์ ์ํ์ง ์์๋ ๋๋ค. ex) Enum
- ๊ฐ์ ์ธ์คํด์ค๊ฐ 2๊ฐ ์ด์ ๋ง๋ค์ด์ง์ง ์์ผ๋ฉด, ๋ ผ๋ฆฌ์ ๋์น์ฑ๊ณผ ๊ฐ์ฒด ์๋ณ์ฑ์ด ์ฌ์ค์ ๋๊ฐ์ ์๋ฏธ๊ฐ ๋๋ค.
- ๊ฐ์ฒด ์๋ณ์ฑ: Object identity, ๋ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์๊ฐ
ยท equals๊ฐ ๋ ผ๋ฆฌ์ ๋์น์ฑ์ ํ์ธํ๋๋ก ์ฌ์ ์ํ๋ฉด, Map์ ํค์ Set์ ์์๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
ยท equals ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ๋๋ ๋ฐ๋์ ์ผ๋ฐ ๊ท์ฝ์ ๋ฐ๋ผ์ผ ํ๋ค.
- ์ด ๊ท์ฝ์ ์ด๊ธฐ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ด์ํ๊ฒ ๋์ํ๊ฑฐ๋ ์ข ๋ฃ๋ ๊ฒ์ด๊ณ , ์์ธ์ด ๋๋ ์ฝ๋๋ ์ฐพ๊ธฐ ๊ต์ฅํ ์ด๋ ค์ธ ๊ฒ์ด๋ค.
Object ๋ช ์ธ์ ์ ํ ๊ท์ฝ
ยท equals ๋ฉ์๋๋ ๋์น๊ด๊ณ(equivalence relation)๋ฅผ ๊ตฌํํ๋ฉฐ, ๋ค์์ ๋ง์กฑํ๋ค.
1. ๋ฐ์ฌ์ฑ(reflexivity): null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x์ ๋ํด, x.equals(x)๋ true๋ค.
- ๊ฐ์ฒด๋ ์๊ธฐ ์์ ๊ณผ ๊ฐ์์ผ ํ๋ค.
2. ๋์นญ์ฑ(symmetry): null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x, y์ ๋ํด, x.equals(y)๊ฐ true๋ฉด y.equals(x)๋ true๋ค.
- ๋ ๊ฐ์ฒด๋ ์๋ก์ ๋ํ ๋์น ์ฌ๋ถ์ ๋๊ฐ์ด ๋ตํด์ผ ํ๋ค.
3. ์ถ์ด์ฑ(transitivity): null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x, y, z์ ๋ํด, x.equals(y)๊ฐ true์ด๊ณ y.equals(z)๋ true๋ฉด x.equals(z)๋ true๋ค.
- ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด์ ๋ ๋ฒ์งธ ๊ฐ์ฒด๊ฐ ๊ฐ๊ณ , ๋ ๋ฒ์งธ ๊ฐ์ฒด์ ์ธ๋ฒ์งธ ๊ฐ์ฒด๊ฐ ๊ฐ๋ค๋ฉด, ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด์ ์ธ ๋ฒ์งธ ๊ฐ์ฒด๋ ๊ฐ์์ผ ํ๋ค.
4. ์ผ๊ด์ฑ(consistency): null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x, y์ ๋ํด, x.equals(y)๋ฅผ ๋ฐ๋ณตํด์ ํธ์ถํ๋ฉด ํญ์ true๋ฅผ ๋ฐํํ๊ฑฐ๋ ํญ์ false๋ฅผ ๋ฐํํ๋ค.
-
5. null-์๋: null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x์ ๋ํด, x.equals(null)์ false๋ค.
ยท ๋์น๊ด๊ณ๋ ์งํฉ์ ์๋ก ๊ฐ์ ์์๋ค๋ก ์ด๋ค์ง ๋ถ๋ถ์งํฉ์ผ๋ก ๋๋๋ ์ฐ์ฐ์ด๋ค.
- ์ด ๋ถ๋ถ์งํฉ์ ๋์น๋ฅ(equivalence class; ๋์น ํด๋์ค)๋ผ ํ๋ค.
- equals ๋ฉ์๋๊ฐ ์ธ๋ชจ ์์ผ๋ ค๋ฉด ๋ชจ๋ ์์๊ฐ ๊ฐ์ ๋์น๋ฅ์ ์ํ ์ด๋ค ์์์๋ ์๋ก ๊ตํํ ์ ์์ด์ผ ํ๋ค.
ยท ๊ตฌ์ฒด ํด๋์ค๋ฅผ ํ์ฅํด ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๋ฉด equals ๊ท์ฝ์ ๋ง์กฑ์ํฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ์ง ์๋๋ค.
(๊ฐ์ฒด ์งํฅ์ ์ถ์ํ์ ์ด์ ์ ํฌ๊ธฐํ์ง ์๋ ํ)
- ์ด๋ ์ถ์ด์ฑ์ ๊นจ๋ ํ์๋ค.
- ๋ชจ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋์น๊ด๊ณ์์ ๋ํ๋๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ค.
- ์ฐํ ๋ฐฉ๋ฒ: ์์์ด ์๋ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ค.
์์ง์ equals ๋ฉ์๋ ๊ตฌํ ๋ฐฉ๋ฒ
1. == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ ๋ ฅ์ด ์๊ธฐ ์์ ์ ์ฐธ์กฐ์ธ์ง ํ์ธํ๋ค. ์๊ธฐ ์์ ์ด๋ฉด true๋ฅผ ๋ฐํํ๋ค.
- ์ด๋ ๋จ์ํ ์ฑ๋ฅ ์ต์ ํ์ฉ์ด๋ค.
2. instanceof ์ฐ์ฐ์๋ก ์ ๋ ฅ์ด ์ฌ๋ฐ๋ฅธ ํ์ ์ธ์ง ํ์ธํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
- ์ฌ๋ฐ๋ฅธ ํ์ ์ equals๊ฐ ์ ์๋ ํด๋์ค์ธ ๊ฒ์ด ๋ณดํต์ด์ง๋ง, ๊ฐ๋์ ๊ทธ ํด๋์ค๊ฐ ๊ตฌํํ ํน์ ์ธํฐํ์ด์ค๊ฐ ๋ ์๋ ์๋ค.
- ์ด๋ค ์ธํฐํ์ด์ค๋ ์์ ์ ๊ตฌํํ ์๋ก ๋ค๋ฅธ ํด๋์ค๋ผ๋ฆฌ๋ ๋น๊ตํ ์ ์๋๋ก equals ๊ท์ฝ์ ์์ ํ๊ธฐ๋ ํ๋ค. ์ด๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ผ๋ฉด equals์ ํด๋์ค๊ฐ ์๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ex) Set, List, Map, Map.Entry
3. ์ ๋ ฅ์ ์ฌ๋ฐ๋ฅธ ํ์ ์ผ๋ก ํ๋ณํํ๋ค.
- ์์ instanceof ๊ฒ์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋จ๊ณ๋ 100% ์ฑ๊ณต ํ๋ค.
4. ์ ๋ ฅ ๊ฐ์ฒด์ ์๊ธฐ ์์ ์ ๋์๋๋ ํต์ฌ ํ๋๋ค์ด ๋ชจ๋ ์ผ์นํ๋์ง ํ๋์ฉ ๊ฒ์ฌํ๋ค. ๋ชจ๋ ํ๋๊ฐ ์ผ์นํ๋ฉด true๋ฅผ ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด false๋ฅผ ๋ฐํํ๋ค.
- 2๋จ๊ณ์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ํ๋ค๋ฉด ์ ๋ ฅ ํ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ ๊ทธ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
TODO: p63 ์ดํ
์์ดํ
11. equals๋ฅผ ์ฌ์ ์ํ๋ ค๊ฑฐ๋ hashCode๋ ์ฌ์ ์ํ๋ผ
ยท equals๋ฅผ ์ฌ์ ์ํ ํด๋์ค ๋ชจ๋์์ hashCode๋ ์ฌ์ ์ ์ฌ์ ์ํด์ผ ํ๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด hashCode ์ผ๋ฐ ๊ท์ฝ์ ์ด๊ธฐ๊ฒ ๋์ด ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ HashMap, HashSet ๋ฑ ์ปฌ๋ ์ ์ ์์๋ก ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ยท ์๋๋ Object ๋ช ์ธ์ hashCode ๊ด๋ จ ๊ท์ฝ์ ๋ฐ์ทํ ๊ฒ์ด๋ค. hashCode ์ฌ์ ์๋ฅผ ์๋ชปํ์ ๋, ๋ ๋ฒ์งธ ์กฐํญ์ด ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋๋ค.
- ์ฆ, ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ ๊ฐ์ฒด๋ ๊ฐ์ ํด์์ฝ๋๋ฅผ ๋ฐํํด์ผ ํ๋ค.
- equals๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ค๋ฅธ ๋ ๊ฐ์ฒด๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
ํ์ง๋ง Object์ ๊ธฐ๋ณธ haCode ๋ฉ์๋๋ ์ด ๋์ด ์ ํ ๋ค๋ฅด๋ค๊ณ ํ๋จํ์ฌ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ๋ค.
ยท equals ๋น๊ต์ ์ฌ์ฉ๋๋ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ๊ทธ ๊ฐ์ฒด์ hashCode ๋ฉ์๋๋ ๋ช ๋ฒ์ ํธ์ถํด๋ ์ผ๊ด๋๊ฒ ํญ์ ๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. ๋จ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์คํํ๋ค๋ฉด ์ด ๊ฐ์ด ๋ฌ๋ผ์ ธ๋ ์๊ด์๋ค. ยท equals(Object)๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ํ๋จํ๋ค๋ฉด, ๋ ๊ฐ์ฒด์ hashCode๋ ๋๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. ยท equals(Object)๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅด๋ค๊ณ ํ๋จํ๋๋ผ๋, ๋ ๊ฐ์ฒด์ hashCode๊ฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ ํ์๋ ์๋ค. ๋จ, ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํด์๋ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํด์ผ ํด์ํ ์ด๋ธ์ ์ฑ๋ฅ์ด ์ข์์ง๋ค. |
ยท ์ข์ ํด์ ํจ์๋ผ๋ฉด ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค์ ๋ค๋ฅธ ํด์์ฝ๋๋ฅผ ๋ฐํํด์ผํ๋ค.
- ์ ๊ท์ฝ์ ์ธ ๋ฒ์งธ ๊ท์ฝ์ด ์๊ตฌํ๋ ์์ฑ์ด๋ค.
- ๋ค์์ ๋์น์ธ ๋ชจ๋ ๊ฐ์ฒด์์ ๋๊ฐ์ ํด์์ฝ๋๋ฅผ ๋ฐํํ๋ ์ต์ ์ด์ง๋ง ์ ๋ฒํ ์ฝ๋๋ค. ๋ชจ๋ ๊ฐ์ฒด๊ฐ ํด์ํ ์ด๋ธ ๋ฒํท ํ๋์ ๋ด๊ฒจ ๋ง์น ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ฒ๋ผ ๋์ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ํ๊ท ์ํ ์๊ฐ์ด O(1)์ธ ํด์ํ ์ด๋ธ์ด O(n)์ผ๋ก ๋๋ ค์ง๋ค.
์ข์ hashCode๋ฅผ ์์ฑํ๋ ์๋ น
|
ยท 2.b์์ ๊ณฑํ ์ซ์๋ฅผ 31๋ก ์ ํ ์ด์ ๋ 31์ด ํ์์ด๋ฉด์ ์์(prime)์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ด ์ซ์๊ฐ ์ง์์ด๊ณ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ ๋ณด๋ฅผ ์๊ฒ ๋๋ค. 2๋ฅผ ๊ณฑํ๋ ๊ฒ์ ์ํํธ ์ฐ์ฐ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์๋ฅผ ๊ณฑํ๋ ์ด์ ๋ ๋ช ํํ์ง ์๊ณ , ์ ํต์ ์ผ๋ก ๊ทธ๋ฆฌ ํด์๋ค.
- 31์ ์ด์ฉํ๋ฉด ์ด ๊ณฑ์ ์ ์ํํธ ์ฐ์ฐ๊ณผ ๋บ์ ์ผ๋ก ๋์ฒดํด ์ต์ ํํ ์ ์๋ค. (31 * 1 == (1 << 5) - i) ์์ฆ VM๋ค์ ์ด๋ฐ ์ต์ ํ๋ฅผ ์๋์ผ๋ก ํด์ค๋ค.
์ถ๊ฐ์ ์ธ ํ
ยท hashCode๋ฅผ ๊ตฌํํ๋ค๋ฉด, ๋์น์ธ ์ธ์คํด์ค์ ๋ํด ๋๊ฐ์ ํด์์ฝ๋๋ฅผ ๋ฐํํ ์ง ์๋ฌธํ๊ณ , ๊ฒ์ฆํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์.
- equals์ hashCode ๋ฉ์๋๋ฅผ AutoValue๋ก ์์ฑํ๋ค๋ฉด ๊ฑด๋๋ธ ์ ์๋ค.
ยท ํ์ ํ๋๋ ํด์ ์ฝ๋ ๊ณ์ฐ์์ ์ ์ธํด๋ ๋๋ค.
- ํ์ ํ๋: ๋ค๋ฅธ ํ๋๋ก๋ถํฐ ๊ณ์ฐํด ๋ผ ์ ์๋ ํ๋
ยท equals ๋น๊ต์ ์ฌ์ฉ๋์ง ์์ ํ๋๋ ๋ฐ๋์ ์ ์ธํ๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด hashCode ๊ท์ฝ ๋ ๋ฒ์งธ๋ฅผ ์ด๊ธฐ๊ฒ ๋ ์ ์๋ค.
ยท ํด์ ์ถฉ๋์ด ๋ ์ ์ ๋ฐฉ๋ฒ์ ์ฐ๊ณ ์ถ๋ค๋ฉด ๊ตฌ์๋ฐ์ com.google.common.hash.Hashing์ ์ฐธ๊ณ ํ์.
ยท Objects ํด๋์ค๋ ์์์ ๊ฐ์๋งํผ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ํด์์ฝ๋๋ฅผ ๊ณ์ฐํด์ฃผ๋ ์ ์ ๋ฉ์๋ hash๋ฅผ ์ ๊ณตํ์ฌ hashCode ํจ์๋ฅผ ๋จ ํ ์ค๋ก ์์ฑํ ์ ์๋ค.
- ์๋๊ฐ ๋๋ฆฌ๋ฏ๋ก ์ฑ๋ฅ์ ๋ฏผ๊ฐํ์ง ์์ ๊ฒฝ์ฐ๋ง ์ฌ์ฉํ์.
(์ ๋ ฅ ์ธ์๋ฅผ ๋ด๊ธฐ ์ํ ๋ฐฐ์ด์ ๋ง๋ค๊ณ , ๊ธฐ๋ณธ ํ์ ์ ๋ฐ์ฑ ์ธ๋ฐ์ฑ์ ๊ฑฐ์ณ์ผ ํด์ ๋๋ฆฌ๋ค)
ยท ํด๋์ค๊ฐ ๋ถ๋ณ์ด๊ณ ํด์์ฝ๋ ๊ณ์ฐ ๋น์ฉ์ด ํฌ๋ค๋ฉด, ๋งค๋ฒ ์๋ก ๊ณ์ฐํ์ง ๋ง๊ณ ์บ์ฑ์ ๊ณ ๋ คํ์.
- ํด๋น ํ์ ์ ๊ฐ์ฒด๊ฐ ์ฃผ๋ก ํด์ ํค๋ก ์ฌ์ฉ๋ ๊ฒ ๊ฐ๋ค๋ฉด, ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง ๋ ๋ฏธ๋ฆฌ ํด์์ฝ๋๋ก ๊ณ์ฐํด๋๋ค.
- ํด์์ ํค๋ก ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด hashCode๊ฐ ์ฒ์ ๋ถ๋ฆด ๋ ์ง์ฐ ์ด๊ธฐํ ์ ๋ต์ ์ฌ์ฉํ ์ ์๋ค.
- ์ด ๊ฒฝ์ฐ ํด๋์ค๋ฅผ ์ค๋ ๋ ์์ ํ๊ฒ ๋ง๋ค์ด์ผํ๋ค.
ยท ์ฑ๋ฅ์ ๋์ธ๋ต์๊ณ ํด์์ฝ๋๋ฅผ ๊ณ์ฐํ ๋ ํต์ฌ ํ๋๋ฅผ ์๋ตํ๋ฉด ์ ๋๋ค.
- ํด์ ํ์ง์ด ๋๋น ์ ธ ํด์ํ ์ด๋ธ์ ์ฑ๋ฅ์ด ์ฌ๊ฐํ๊ฒ ๋จ์ด์ง ์ ์๋ค.
- ํน์ ์์ญ์ ๋ชฐ๋ฆฐ ์ธ์คํด์ค๋ค์ ํด์์ฝ๋๋ฅผ ๋์ ๋ฒ์๋ก ๊ณ ๋ฅด๊ฒ ํผ๋จ๋ฆฌ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ ํ๋์ผ ์๋ ์๋ค.
ยท hashCode๊ฐ ๋ฐํํ๋ ๊ฐ์ ์์ฑ ๊ท์น์ API ์ฌ์ฉ์์๊ฒ ์์ธํ ๊ณตํํ์ง ๋ง์.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด ๊ฐ์ ์์งํ์ง ์๊ฒ ๋๊ณ , (ํด์ ๊ธฐ๋ฅ์ ๊ฒฐํจ ๋ฐ๊ฒฌ ๋ฑ์ ์ด์ ๋ก )์ถํ ๊ณ์ฐ ๋ฐฉ์์ ๋ฐ๊ฟ ์ ์๋ค.
- String, Integer ๋ฑ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ hashCode ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ์ ์ ํํ๊ฒ ์๋ ค์ฃผ๋ ๋ถ์์ฉ์ด ์๋ค.
์์ดํ
12. toString์ ํญ์ ์ฌ์ ์ํ๋ผ
ยท Object์ ๊ธฐ๋ณธ toString ๋ฉ์๋๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํด๋์ค์ ์ ํฉํ ๋ฌธ์์ด์ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์๋ค.
- 'ํด๋์ค์ด๋ฆ@16์ง์๋กํ์๋ํด์์ฝ๋'๋ฅผ ๋ฐํํ ๋ฟ์ด๋ค.
ยท toString ์ผ๋ฐ ๊ท์ฝ์ ๋ฐ๋ฅด๋ฉด '๊ฐ๊ฒฐํ๋ฉด์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํํ์ ์ ์ตํ ์ ๋ณด'๋ฅผ ๋ฐํํด์ผ ํ๊ณ , '๋ชจ๋ ํ์ ํด๋์ค์์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ 'ํด์ผ ํ๋ค.
ยท toString์ ์ ๊ตฌํํ๋ฉด, ๊ทธ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์์คํ ์ ๋๋ฒ๊น ํ๊ธฐ ์ฝ๋ค.
- toString ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ println, printf, ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์(+), assert ๊ตฌ๋ฌธ์ ๋๊ธธ ๋, ๋๋ฒ๊ฑฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๋ ์๋์ผ๋ก ๋ถ๋ฆฐ๋ค.
- toString์ ์ ๋๋ก ์ฌ์ ์ํ์ง ์๋๋ค๋ฉด ์ธ๋ชจ์๋ ๋ฉ์์ง๋ง ๋ก๊ทธ์ ๋จ๋๋ค.
ยท ์ข์ toString์ ์ปฌ๋ ์ ์ฒ๋ผ ์ด ์ธ์คํด์ค๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด์์ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค.
ex) {Jenny=PhoneNumber@abbd}๋ณด๋ค๋ {Jenney=707-867-5309}๋ผ๋ ๋ฉ์์ง๊ฐ ํจ์ฌ ๋ฐ๊ฐ์ธ ๊ฒ์ด๋ค.
ยท ์ค์ ์์ toString์ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ฃผ์ ์ ๋ณด ๋ชจ๋๋ฅผ ๋ฐํํ๋ ๊ฒ ์ข๋ค.
- ๋จ, ๊ฐ์ฒด๊ฐ ๊ฑฐ๋ํ๊ฑฐ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ฌธ์์ด๋ก ํํํ๊ธฐ์ ์ ํฉํ์ง ์๋ค๋ฉด ์์ธ๋ค. ์ด๋ฐ ์ํฉ์์๋ ์์ฝ ์ ๋ณด๋ฅผ ๋ด๋๋ก ํ์.
- ์ด์์ ์ผ๋ก๋ ์ค์ค๋ก๋ฅผ ์๋ฒฝํ๊ฒ ์ค๋ช ํ๋ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค.
- toString์ ์ฃผ์ํ ์ ๋ณด๊ฐ ๋ด๊ธฐ์ง ์์์ ๋ ๋ฌธ์ ๊ฐ ๋๋ ๋ํ์ ์ธ ์์:
ยท toString์ ๊ตฌํํ ๋๋ฉด ๋ฐํ๊ฐ์ ํฌ๋งท์ ๋ฌธ์ํํ ์ง ์ ํด์ผ ํ๋ค.
- ์ฅ์ : ํฌ๋งท์ ๋ช ์ํ๋ฉด ๊ทธ ๊ฐ์ฒด๋ ํ์ค์ ์ด๊ณ ๋ช ํํ๊ณ , ์ฌ๋์ด ์ฝ์ ์ ์๊ฒ ๋๋ค.
- ๊ทธ ๊ฐ ๊ทธ๋๋ก ์ ์ถ๋ ฅ์ ์ฌ์ฉํ๊ฑฐ๋ CSV ํ์ผ์ฒ๋ผ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ก ์ ์ฅํ ์๋ ์๋ค.
- ๋ช ์ํ ํฌ๋งท์ ๋ง๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ฒด๋ฅผ ์ํธ ์ ํํ ์ ์๋ ์ ์ ํฉํฐ๋ฆฌ๋ ์์ฑ์๋ฅผ ํจ๊ป ์ ๊ณตํด์ฃผ๋ฉด ์ข๋ค.
์๋ฐ ํ๋ซํผ์ ๋ง์ ๊ฐ ํด๋์ค๊ฐ ๋ฐ๋ฅด๋ ๋ฐฉ์์ด๋ค. ex) BigInteger, BigDecimal
- ๋จ์ : ํฌ๋งท์ ํ ๋ฒ ๋ช ์ํ๋ฉด ํ์ ๊ทธ ํฌ๋งท์ ์ฝ๋งค์ด๊ฒ ๋๋ค.
ํฌ๋งท์ ๋ช ์ํ์ง ์์ผ๋ฉด, ํฅํ ๋ฆด๋ฆฌ์ค์์ ์ ๋ณด๋ฅผ ๋ ๋ฃ๊ฑฐ๋ ํฌ๋งท์ ๊ฐ์ ํ ์ ์๋ ์ ์ฐ์ฑ์ ์ป๊ฒ ๋๋ค.
ยท ์ ์ ์ ํธ๋ฆฌํฐ ํด๋์ค(์์ดํ 4)๋ toString์ ์ ๊ณตํ ์ด์ ๊ฐ ์๋ค. ๋๋ถ๋ถ์ ์ด๊ฑฐ ํ์ ๋ ๊ทธ๋ ๋ค.
- ๋๋ถ๋ถ์ ์ด๊ฑฐ ํ์ ์ ์๋ฐ์์ ์ด๋ฏธ ์๋ฒฝํ toString์ ์ ๊ณตํ๋ค.
ยท ํ์ ํด๋์ค๋ค์ด ๊ณต์ ํด์ผ ํ ๋ฌธ์์ด ํํ์ด ์๋ ์ถ์ ํด๋์ค๋ผ๋ฉด toString์ ์ฌ์ ์ํด์ค์ผ ํ๋ค.
ex) ๋ค์์ ์ปฌ๋ ์ ๊ตฌํ์ฒด๋ ์ถ์ ์ปฌ๋ ์ ํด๋์ค๋ค์ toString ๋ฉ์๋๋ฅผ ์์ํด ์ด๋ค.
TODO: ์์ดํ
13. clone ์ฌ์ ์๋ ์ฃผ์ํด์ ์งํํ๋ผ
ยท Cloneable์ ๋ณต์ ํด๋ ๋๋ ํด๋์ค์์ ๋ช ์ํ๋ ์ฉ๋์ ๋ฏน์ค์ธ ์ธํฐํ์ด์ค(์์ดํ 20)์ง๋ง, ์๋ํ ๋ชฉ์ ์ ์ ๋๋ก ์ด๋ฃจ์ง ๋ชปํ๋ค.
- clone ๋ฉ์๋๊ฐ ์ ์ธ๋ ๊ณณ์ด Cloneable์ด ์๋ Object์ด๊ณ , ๊ทธ๋ง์ ๋ protected๋ค. ๊ทธ๋์ Cloneable์ ๊ตฌํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ธ๋ถ ๊ฐ์ฒด์์ clone ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
- ๋ฆฌํ๋ ์ (์์ดํ 65)์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ์ง๋ง, ํด๋น ๊ฐ์ฒด๊ฐ ์ ๊ทผ์ด ํ์ฉ๋ clone ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค๋ ๋ณด์ฅ์ด ์๋ค.
ยท ์ฌ๋ฌ ๋ฌธ์ ์ ์๋ ๋ถ๊ตฌํ๊ณ Cloneable ๋ฐฉ์์ ๋๋ฆฌ ์ฐ์ด๊ณ ์๋ค. ๋ฐ๋ผ์ 1. clone ๋ฉ์๋๋ฅผ ์ ๋์ํ๊ฒ๋ ํด์ฃผ๋ ๊ตฌํ ๋ฐฉ๋ฒ๊ณผ 2. ์ธ์ ๊ทธ๋ ๊ฒ ํด์ผํ๋์ง ์์์์ผํ๋ค.
ยท Cloneable ์ธํฐํ์ด์ค๋ Object์ protected ๋ฉ์๋์ธ clone์ ๋์ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ค.
- Cloneable์ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค์์ clone์ ํธ์ถํ๋ฉด ๊ทธ ๊ฐ์ฒด์ ํ๋๋ค์ ํ๋ํ๋ ๋ณต์ฌํ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ํด๋์ค์ ์ธ์คํด์ค์์ ํธ์ถํ๋ฉด CloneNotSupportedException์ ๋์ง๋ค.
TODO: ์์ดํ
14. Comparable์ ๊ตฌํํ ์ง ๊ณ ๋ คํ๋ผ
ยท Comparacle ์ธํฐํ์ด์ค๋ compareTo ๋ฉ์๋๋ฅผ ๊ฐ๋๋ค.
ยท compareTo๋ ๋ ๊ฐ์ง๋ง ๋นผ๋ฉด, Object์ equals์ ๊ฐ๋ค.
- compareTo๋ ๋จ์ ๋์น์ฑ ๋น๊ต์ ๋ํด 1. ์์๊น์ง ๋น๊ตํ ์ ์์ผ๋ฉฐ, 2. ์ ๋ค๋ฆญํ๋ค.
- Comparable์ ๊ตฌํํ๋ค๋ ๊ฒ์ ๊ทธ ํด๋์ค์ ์ธ์คํด์ค๋ค์๋ ์์ฐ์ ์ธ ์์(natural order)๊ฐ ์์์ ๋ปํ๋ค.
ยท Comparable์ ๊ตฌํํ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด์ ์์ฝ๊ฒ ์ ๋ ฌํ ์ ์๋ค. Ex) Arrays.sort(a);
- ๊ฒ์, ๊ทน๋จ๊ฐ ๊ณ์ฐ, ์๋ ์ ๋ ฌ๋๋ ์ปฌ๋ ์ ๊ด๋ฆฌ๋ ์ฝ๊ฒ ํ ์ ์๋ค.
ยท Comparable์ ๊ตฌํํ๋ฉด, ์ด ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๋ ์๋ง์ ์ ๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ปฌ๋ ์ ์ ํ์ ๋๋ฆด ์ ์๋ค.
- ์๋ฐ ํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฑฐ์ ๋ชจ๋ ๊ฐ ํด๋์ค์ ์ด๊ฒจ ํ์ ์ Comparable์ ๊ตฌํํ๋ค.
- ์ํ๋ฒณ, ์ซ์, ์ฐ๋ ๊ฐ์ด ์์๊ฐ ๋ช ํํ ๊ฐ ํด๋์ค๋ฅผ ์์ฑํ๋ค๋ฉด ๋ฐ๋์ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์.
ยท compareTo ๋ฉ์๋์ ์ผ๋ฐ ๊ท์ฝ์ equals์ ๊ท์ฝ๊ณผ ๋น์ทํ๋ค.
์ด ๊ฐ์ฒด์ ์ฃผ์ด์ง ๊ฐ์ฒด์ ์์๋ฅผ ๋น๊ตํ๋ค. ์ด ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ์์ผ๋ฉด ์์ ์ ์๋ฅผ, ๊ฐ์ผ๋ฉด 0์, ํฌ๋ฉด ์์ ์ ์๋ก ๋ฐํํ๋ค. ์ด ๊ฐ์ฒด์ ๋น๊ตํ ์ ์๋ ํ์ ์ ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง๋ฉด ClassCastException์ ๋์ง๋ค. ๋ค์ ์ค๋ช ์์ sgn(ํํ์) ํ๊ธฐ๋ ์ํ์์ ๋งํ๋ ๋ถํธ ํจ์(signum function)๋ฅผ ๋ปํ๋ฉฐ, ํํ์์ ๊ฐ์ด ์์, 0, ์์์ผ ๋ -1, 0, 1์ ๋ฐํํ๋๋ก ์ ์ํ๋ค.
"์ฃผ์ : ์ด ํด๋์ค์ ์์๋ equals ๋ฉ์๋์ ์ผ๊ด๋์ง ์๋ค." |
ยท compareTo ๋ฉ์๋์์ ํ๋์ ๊ฐ์ ๋น๊ตํ ๋ <, > ์ฐ์ฐ์๋ ์ฐ์ง ๋ง์์ผ ํ๋ค.
- ๊ด๊ณ ์ฐ์ฐ์ <, >๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ค๋ฅ๋ฅผ ์ ๋ฐํ๋ค. (๋ถ๋ ์์์ ๋น๊ต๋ฅผ ์๊ฐํด๋ณด์)
- ๋์ ๊ธฐ๋ณธ ํ์ ํด๋์ค๊ฐ ์ ๊ณตํ๋ ์ ์ compare ๋ฉ์๋๋ Comparator ์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํ๋ ๋น๊ต์ ์์ฑ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์.
Last updated