๐จ๐ปโ๐ป ์ดํํฐ๋ธ ์๋ฐ - ๋ชจ๋ ๊ฐ์ฒด์ ๊ณตํต ๋ฉ์๋
3์ฅ - ๋ชจ๋ ๊ฐ์ฒด์ ๊ณตํต ๋ฉ์๋
๐ก equals๋ ์ผ๋ฐ ๊ท์ฝ์ ์ง์ผ ์ฌ์ ์ํ๋ผ
โ๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด equals
๋ฅผ ์ฌ์ ์ํ์ง ๋ง์โ
1. ์ฌ์ ์๋ฅผ ์ต๋ํ ํผํ์
equals
๋ฉ์๋๋ ์ฌ์ ์ํ๊ธฐ ์ฌ์ ๋ณด์ด์ง๋ง ๊ณณ๊ณณ์ ํจ์ ์ด ๋์ฌ๋ฆฌ๊ณ ์์
- ๋ฌธ์ ๋ฅผ ํํผํ๋ ๊ฐ์ฅ ์ฌ์ด ๊ธธ์ ์์ ์ฌ์ ์ํ์ง ์๋ ๊ฒ
- ๋ง์ ๊ฒฝ์ฐ์
Object
์ equals
๊ฐ ๋น๊ต์ ์ ํํ ์ํํด ์ค
2. equals ์ฌ์ ์๊ฐ ํ์ํ ์ํฉ
- ๊ฐ์ฒด ์๋ณ์ฑ์ด ์๋๋ผ ๋
ผ๋ฆฌ์ ๋์น์ฑ์ ํ์ธํด์ผ ํ๋๋ฐ, ์์ ํด๋์ค์
equals
๊ฐ ๋
ผ๋ฆฌ์ ๋์น์ฑ์ ๋น๊ตํ๋๋ก ์ฌ์ ์๋์ง ์์์ ๋.
- ๊ฐ์ฒด ์๋ณ์ฑ : ๋ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์๊ฐ(์ฃผ์),
==
์ฐ์ฐ์๋ก ํ์ธ
- ๋
ผ๋ฆฌ์ ๋์น์ฑ : ๊ฐ์ด ๊ฐ์๊ฐ?,
equals
๋ฉ์๋๋ก ํ์ธ
- ์ฃผ๋ก
Integer
, String
์ฒ๋ผ ๊ฐ์ ํํํ๋ ํด๋์ค๊ฐ ์ด์ ํด๋น ํจ.
3. equals ์ผ๋ฐ ๊ท์ฝ
โ๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด equals
๋ฅผ ์ฌ์ ์ํ์ง ๋ง์โ
equals
๋ฉ์๋๋ ์ฌ์ ์ํ๊ธฐ ์ฌ์ ๋ณด์ด์ง๋ง ๊ณณ๊ณณ์ ํจ์ ์ด ๋์ฌ๋ฆฌ๊ณ ์์Object
์ equals
๊ฐ ๋น๊ต์ ์ ํํ ์ํํด ์คequals
๊ฐ ๋
ผ๋ฆฌ์ ๋์น์ฑ์ ๋น๊ตํ๋๋ก ์ฌ์ ์๋์ง ์์์ ๋.- ๊ฐ์ฒด ์๋ณ์ฑ : ๋ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์๊ฐ(์ฃผ์),
==
์ฐ์ฐ์๋ก ํ์ธ - ๋
ผ๋ฆฌ์ ๋์น์ฑ : ๊ฐ์ด ๊ฐ์๊ฐ?,
equals
๋ฉ์๋๋ก ํ์ธ
Integer
, String
์ฒ๋ผ ๊ฐ์ ํํํ๋ ํด๋์ค๊ฐ ์ด์ ํด๋น ํจ.โ equals
๋ฉ์๋ ์ฌ์ ์ ์, ๋ฐ๋์ ์๋ ์ผ๋ฐ๊ท์ฝ์ ๋ฐ๋ผ์ผ ํจ.
์๊ฑด | ์ค๋ช |
---|---|
๋ฐ์ฌ์ฑ(reflexivity) | null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x์ ๋ํด, x.equals(x)๋ true๋ค. |
๋์นญ์ฑ(symmetry) | null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x, y์ ๋ํด, x.equals(y)๊ฐ true๋ฉด y.equals(x)๋ true๋ค. |
์ถ์ด์ฑ(transitivity) | null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x, y, z์ ๋ํด x.equals(y)๊ฐ true์ด๊ณ , y.equals(z)๊ฐ true๋ฉด x.equals(z)๋ true๋ค. |
์ผ๊ด์ฑ(consistency) | null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x, y์ ๋ํด x.equals(y)๋ฅผ ๋ฐ๋ณตํด์ ํธ์ถํ๋ฉด ํญ์ true๋ฅผ ๋ฐํํ๊ฑฐ๋ ํญ์ false๋ฅผ ๋ฐํํ๋ค. |
null-์๋ | null์ด ์๋ ๋ชจ๋ ์ฐธ์กฐ ๊ฐ x์ ๋ํด, x.equals(null)์ false๋ค. |
4. AutoValue ํ๋ ์์ํฌ
- equals ์ผ๋ฐ ๊ท์ฝ์ ์ฒ ์ ํ ์งํค๋ฉฐ
equals
๋ฅผ ์ฌ์ ์ํ๋ ์ผ์ ์ง๋ฃจํ๊ณ ์ฝ์ง ์๋ค. - ๊ตฌ๊ธ์ AutoValue ํ๋ ์์ํฌ๋ ์ด ์์ ์ ๋์ ํด ์ค.
- ํด๋์ค์ ์ด๋
ธํ
์ด์
ํ๋๋ง ์ถ๊ฐํ๋ฉด
equals
๋ฉ์๋๋ฅผ ์์์ ์์ฑํด์ฃผ๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ๊ฒ๊ณผ ๊ทผ๋ณธ์ ์ผ๋ก ๋๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด ์ค.
โ ๋ถ์ฃผ์ํ ์ค์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด AutoValue ํ๋ ์์ํฌ๋ฅผ ์ ๊ทน ํ์ฉํ์.
๐ก equals๋ฅผ ์ฌ์ ์ํ๋ ค๊ฑฐ๋ hashCode๋ ์ฌ์ ์ํ๋ผ
โ
equals
๋ฅผ ์ฌ์ ์ํ ํด๋์ค ๋ชจ๋์์hashCode
๋ ์ฌ์ ์ํด์ผ ํ๋คโ
1. hashCode ์ฌ์ ์ ํ์์ฑ
equals
๋ฅผ ์ฌ์ ์ํ ํด๋์ค์์hashCode
๋ฅผ ์ฌ์ ์ํ์ง ์์ผ๋ฉด,hashCode
์ผ๋ฐ ๊ท์ฝ์ ์ด๊ธฐ๊ฒ ๋์ด ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผHashMap
์ด๋HashSet
๊ฐ์ ์ปฌ๋ ์ ์ ์์๋ก ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋จhashCode
๋ฅผ ์ฌ์ ์ ํ ์, ๋ฐ๋์ ์๋ ์ผ๋ฐ ๊ท์ฝ์ ๋ฐ๋ผ์ผ ํจ
์ค๋ช | |
---|---|
1 | equals ๋น๊ต์ ์ฌ์ฉ๋๋ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๋ ๋์ ๊ทธ ๊ฐ์ฒด์ hashCode ๋ฉ์๋๋ ๋ช ๋ฒ์ ํธ์ถํด๋ ์ผ๊ด๋๊ฒ ํญ์ ๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. ๋จ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์คํํ๋ค๋ฉด ์ด ๊ฐ์ด ๋ฌ๋ผ์ ธ๋ ์๊ด์๋ค. |
2 | equals(Object)๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ํ๋จํ๋ค๋ฉด, ๋ ๊ฐ์ฒด์ hashCode๋ ๋๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. |
3 | equals(Object)๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅด๋ค๊ณ ํ๋จํ๋๋ผ๋, ๋ ๊ฐ์ฒด์ hashCode๊ฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ ํ์๋ ์๋ค. ๋จ, ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํด์๋ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํด์ผ ํด์ํ ์ด๋ธ์ ์ฑ๋ฅ์ด ์ข์์ง๋ค. |
2. AutoValue ํ๋ ์์ํฌ
hashCode
์ผ๋ฐ ๊ท์ฝ์ ์งํค๋ฉฐ ์ฌ์ ์ํ๋ ์ผ์ ์ด๋ ต์ง๋ ์์ง๋ง ์กฐ๊ธ ๋ฐ๋ถํ ์ผ
โ AutoValue ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์ง equals
์ hashCode
๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ค! ์ ๊ทนํ์ฉํ์
๐ก toString์ ํญ์ ์ฌ์ ์ํ๋ผ
โ๋ชจ๋ ๊ตฌ์ฒด ํด๋์ค์์
Object
์toString
์ ์ฌ์ ์ํ์โ
1. Object์ ๊ธฐ๋ณธ toString ๋ฉ์๋
- ๋จ์ํ ํด๋์ค์ด๋ฆ@16์ง์๋กํ์ํ_ํด์์ฝ๋ ๋ฐํ(์ ์ตํ์ง ์์ ์ ๋ณด)
toString
์ ๊ท์ฝ : ๋ชจ๋ ํ์ ํด๋์ค์์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ผ- ์ฐ๋ฆฌ๊ฐ ์ง์ ํธ์ถํ์ง ์์๋, ๋ค๋ฅธ ์ด๋๊ฐ์์ ์ฐ์ผ ์ ์๊ธฐ ๋๋ฌธ
- ex)
println
,printf
, ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์(+
), ๋๋ฒ๊ฑฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๋
- ex)
โ ๊ฐ๊ฒฐํ๋ฉด์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํํ์ ์ ์ตํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ ์ํ์
2. ์ฌ์ ์ ๋ฐฉ๋ฒ
- ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ฃผ์ ์ ๋ณด ๋ชจ๋๋ฅผ ๋ฐํํ๋ ๊ฒ ์ข์
- ํฌ๋งท์ ๋ช ์ํ๋ ์๋๋ ์๋๋ฅผ ๋ช ํํ ํด์ผํจ.
- ํฌ๋งท์ ๋ช
์ํ ๊ฒฝ์ฐ
- ์ฅ์ : ํ์ค์ , ๋ช ํ, ์ฌ๋์ด ์ฝ์ ์ ์์
- ๋จ์ : ํ์ ๊ทธ ํฌ๋งท์ ์ฝ๋งค์
- ํฌ๋งท์ ๋ช ์ํ๊ธฐ๋ก ํ๋ค๋ฉด ๋ช ์ํ ํฌ๋งท์ ๋ง๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ฒด๋ฅผ ์ํธ ์ ํํ ์ ์๋ ์ ์ ํฉํฐ๋ฆฌ๋ ์์ฑ์๋ฅผ ํจ๊ป ์ ๊ณตํด์ฃผ๋ฉด ์ข์
/**
* ์ด ์ ํ๋ฒํธ์ ๋ฌธ์์ด ํํ์ ๋ฐํํ๋ค.
* ์ด ๋ฌธ์์ด์ "XXX-YYY-ZZZZ" ํํ์ 12๊ธ์๋ก ๊ตฌ์ฑ๋๋ค.
* XXX๋ ์ง์ญ ์ฝ๋, YYY๋ ํ๋ฆฌํฝ์ค, ZZZZ๋ ๊ฐ์
์ ๋ฒํธ๋ค.
* ๊ฐ๊ฐ์ ๋๋ฌธ์๋ 10์ง์ ์ซ์ ํ๋๋ฅผ ๋ํ๋ธ๋ค.
*
* ์ ํ๋ฒํธ์ ๊ฐ ๋ถ๋ถ์ ๊ฐ์ด ๋๋ฌด ์์์ ์๋ฆฟ์๋ฅผ ์ฑ์ธ ์ ์๋ค๋ฉด,
* ์์์๋ถํฐ 0์ผ๋ก ์ฑ์๋๊ฐ๋ค. ์์ปจ๋ ๊ฐ์
์ ๋ฒํธ๊ฐ 123์ด๋ผ๋ฉด
* ์ ํ๋ฒํธ์ ๋ง์ง๋ง ๋ค ๋ฌธ์๋ "0123"์ด ๋๋ค.
*/
@Override public String toString() {
return String.format("%03d-%03d-%04d",
areaCode, prefix, lineNum);
}
- ํฌ๋งท์ ๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ
/**
* ์ด ์ฝ๋ฌผ์ ๊ดํ ๋๋ต์ ์ธ ์ค๋ช
์ ๋ฐํํ๋ค.
* ๋ค์์ ์ด ์ค๋ช
์ ์ผ๋ฐ์ ์ธ ํํ์ด๋,
* ์์ธํ์์ ์ ํด์ง์ง ์์์ผ๋ฉฐ ํฅํ ๋ณ๊ฒฝ๋ ์ ์๋ค.
*
* "[์ฝ๋ฌผ #9: ์ ํ=์ฌ๋, ๋์=ํ
๋ ๋น์ , ๊ฒ๋ชจ์ต=๋จน๋ฌผ]"
*/
@Override public String toString() { ... }
- ํฌ๋งท ๋ช
์์ฌ๋ถ์ ๊ด๊ณ์์ด
toString
์ด ๋ฐํํ ๊ฐ์ ํฌํจ๋ ์ ๋ณด๋ฅผ ์ป์ด์ฌ ์ ์๋ API๋ฅผ ์ ๊ณตํ์. (getter)
3. AutoValue ํ๋ ์์ํฌ
- AutoValue ํ๋ ์์ํฌ๋
toString
๋ ์์ฑํด ์ค. - AutoValue ํ๋ ์์ํฌ๋ ๊ฐ ํ๋์ ๋ด์ฉ์ ๋ฉ์ง๊ฒ ๋ํ๋ด ์ฃผ๊ธฐ๋ ํ์ง๋ง ํด๋์ค์ โ์๋ฏธโ๊น์ง ํ์ ํ์ง๋ ๋ชป ํจ
- ์๋ฅผ ๋ค์ด ์ ํ๋ฒํธ ๊ฐ์ ํฌ๋งท(XXX-YYY-ZZZZ)์ ๋ฐ๋ผ ๋ฐํํด์ผํ๋
toString
์๋ ์ ํฉํ์ง ์๊ณ , ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ค๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ ํฉํจ.
โ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ์ฌ์ฉํ์
๐ก clone ์ฌ์ ์๋ ์ฃผ์ํด์ ์งํํ๋ผ
โ๋ณต์ ๊ธฐ๋ฅ์ ์์ฑ์์ ํฉํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ต๊ณ โ
1. Cloneable ์ธํฐํ์ด์ค์ clone ๋ฉ์๋
Cloneable
์ธํฐํ์ด์ค- ๋ณต์ ํด๋ ๋๋ ํด๋์ค์์ ๋ช ์ํ๋ ์ฉ๋์ ๋ฏน์ค์ธ ์ธํฐํ์ด์ค(mixin interface)
Object
์protected
๋ฉ์๋์ธclone
์ ๋์ ๋ฐฉ์์ ๊ฒฐ์
Object
์clone
๋ฉ์๋Cloneable
์ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค์์clone
์ ํธ์ถํ๋ฉด ๊ทธ ๊ฐ์ฒด์ ํ๋๋ค์ ํ๋ํ๋ ๋ณต์ฌํ ๊ฐ์ฒด๋ฅผ ๋ฐํ
2. Cloneable & clone์ ๋ฌธ์ ์
- ์ธํฐํ์ด์ค ๊ตฌํ๋ฅผ ๊ตฌํํ๋ค๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ํด๋์ค๊ฐ ๊ทธ ์ธํฐํ์ด์ค์์ ์ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๊ณ ์ ์ธํ๋ ํ์
- but,
Cloneable
์ ๊ฒฝ์ฐ์๋ ์์ ํด๋์ค์ ์ ์๋protected
๋ฉ์๋์ ๋์ ๋ฐฉ์์ ๋ณ๊ฒฝํ๋ ๊ฒ
- but,
Cloneable
์ํคํ ์ฒ๋ โ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ํ๋๋final
๋ก ์ ์ธํ๋ผโ๋ ์ผ๋ฐ ์ฉ๋ฒ๊ณผ ์ถฉ๋ํ๋ค.- ๋ณต์ ํ ์ ์๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ผ๋ถ ํ๋์์
final
ํ์ ์๋ฅผ ์ ๊ฑฐํด์ผ ํ ์๋ ์์
- ๋ณต์ ํ ์ ์๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ผ๋ถ ํ๋์์
Cloneable
์ ๊ตฌํํ ํด๋์ค๋clone
๋ฉ์๋๋ฅผpublic
์ผ๋ก ์ ๊ณตํ๋ฉฐ, ์์ฑ์๋ฅผ ํธ์ถํ์ง ์๊ณ ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ๋จObject
์clone
๋ฉ์๋๋ ๋๊ธฐํ๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์๋ค. ๊ทธ๋ฌ๋super.clone
ํธ์ถ ์ธ์ ๋ค๋ฅธ ํ ์ผ์ด ์๋๋ผ๋clone
์ ์ฌ์ ์ ํ ๋๊ธฐํํด์ค์ผ ํจ
3. clone ์ฌ์ ์ ๋ฐฉ๋ฒ
Cloneable
๊ตฌํ- ์ ๊ทผ์ ํ์๋
public
, ๋ฐํ ํ์ ์ ํด๋์ค ์์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ ์ - ๋ฉ์๋ ๋ด๋ถ์์๋ ๊ฐ์ฅ ๋จผ์
super.clone
์ ํธ์ถํ ํ ํ์ํ ํ๋๋ฅผ ์ ๋ถ ์ ์ ํ ์์
4. ๋ณต์ฌ ์์ฑ์์ ๋ณต์ฌ ํฉํฐ๋ฆฌ
- ๋ณต์ฌ ์์ฑ์์ ๋ณต์ฌ ํฉํฐ๋ฆฌ๋ ์ธ์ด ๋ชจ์์ ์ด๊ณ ์ํ์ฒ๋งํ ๊ฐ์ฒด ์์ฑ ๋ฉ์ปค๋์ฆ(์์ฑ์๋ฅผ ์ฐ์ง ์๋ ๋ฐฉ์)์ ์ฌ์ฉํ์ง ์์
- ์์ฑํ๊ฒ ๋ฌธ์ํ๋ ๊ท์ฝ(
clone
๋ฉ์๋์ ์ผ๋ฐ ๊ท์ฝ)์ ๊ธฐ๋์ง ์๊ณ , ์ ์์ ์ธfinal
ํ๋ ์ฉ๋ฒ๊ณผ๋ ์ถฉ๋ํ์ง ์์ผ๋ฉฐ, ๋ถํ์ํ ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง์ง ์๊ณ , ํ๋ณํ๋ ํ์ํ์ง ์์. - ๋ณต์ฌ ์์ฑ์ ์์
// ์์ ๊ณผ ๊ฐ์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ธ์๋ก ๋ฐ๋ ์์ฑ์
public Yum(Yum yum) { ... };
- ๋ณต์ฌ ํฉํฐ๋ฆฌ ์์
// ๋ณต์ฌ ์์ฑ์๋ฅผ ๋ชจ๋ฐฉํ ์ ์ ํฉํฐ๋ฆฌ
public static Yum newInstance(Yum yum) { ... };
โ ์๋ก์ด ์ธํฐํ์ด์ค๋ ํด๋์ค๋ฅผ ๋ง๋ค ๋, Cloneable
์ฌ์ฉ์ ์ ๋ ์ง์ํ์. ๋์ ๋ณต์ฌ ์์ฑ์์ ๋ณต์ฌ ํฉํฐ๋ฆฌ๋ฅผ ์ ๊ณตํ์
๐ก Comparable์ ๊ตฌํํ ์ง ๊ณ ๋ คํ๋ผ
โ์์๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ๊ฐ ํด๋์ค๋ฅผ ์์ฑํ๋ค๋ฉด
Comparable
์ ๊ตฌํํ์โ
1. Comparable ์ธํฐํ์ด์ค
public interface Comparable<T> {
int compareTo(T t);
}
Comparable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค๋ ๊ฒ์ ๊ทธ ํด๋์ค์ ์ธ์คํด์ค๋ค์๋ ์์ฐ์ ์ธ ์์(natural order)๊ฐ ์์์ ๋ป ํจComparable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ๋ค์ ๋ฐฐ์ด์ ์๋ ์์์ฒ๋ผ ์์ฝ๊ฒ ์ ๋ ฌํ ์ ์์.
Arrays.sort(a);
- ๊ฒ์, ๊ทน๋จ๊ฐ ๊ณ์ฐ, ์๋ ์ ๋ ฌ๋๋ ์ปฌ๋ ์ ๊ด๋ฆฌ๋ ์ญ์ ์ฝ๊ฒ ํ ์ ์์.
2. compareTo ๋ฉ์๋ ์ผ๋ฐ ๊ท์ฝ
์๊ฑด | ์ค๋ช |
---|---|
๋์นญ์ฑ | Comparable์ ๊ตฌํํ ํด๋์ค๋ ๋ชจ๋ x, y์ ๋ํด sgn(x.compartTo(y)) == -sgn.(y.compareTo(x))์ฌ์ผ ํ๋ค(๋ฐ๋ผ์ x.compareTo(y)๋ y.compareTo(x)๊ฐ ์์ธ๋ฅผ ๋์ง๋์ ํํด ์์ธ๋ฅผ ๋์ ธ์ผ ํ๋ค). |
์ถ์ด์ฑ | Comparable์ ๊ตฌํํ ํด๋์ค๋ ์ถ์ด์ฑ์ ๋ณด์ฅํด์ผ ํ๋ค. ์ฆ, (x.compareTo(y) > 0 && y.compareTo(z) > 0)์ด๋ฉด x.compareTo(z) > 0์ด๋ค. |
๋ฐ์ฌ์ฑ | Comparable์ ๊ตฌํํ ํด๋์ค๋ ๋ชจ๋ z์ ๋ํด x.compareTo(y) == 0์ด๋ฉด sgn(x.compareTo(z)) == sgn(y.compareTo(z))๋ค. |
๋์น์ฑ ํ ์คํธ์ ๊ฒฐ๊ณผ๊ฐ equals์ ๋์ผํ๊ฐ | ์ด๋ฒ ๊ถ๊ณ ๊ฐ ํ์๋ ์๋์ง๋ง ๊ผญ ์งํค๋ ๊ฒ ์ข๋ค. (x.compareTo(y) == 0) == (x.equals(y))์ฌ์ผ ํ๋ค. Comparable์ ๊ตฌํํ๊ณ ์ด ๊ถ๊ณ ๋ฅผ ์งํค์ง ์๋ ๋ชจ๋ ํด๋์ค๋ ๊ทธ ์ฌ์ค์ ๋ช
์ํด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ช
์ํ๋ฉด ์ ๋นํ ๊ฒ์ด๋ค. โ์ฃผ์: ์ด ํด๋์ค์ ์์๋ equals ๋ฉ์๋์ ์ผ๊ด๋์ง ์๋ค.โ |
3. ๋น๊ต์
- compareTo ๋ฉ์๋์์ ๊ด๊ณ ์ฐ์ฐ์
<
์ฐ์ฐ์๋>
๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฐฉ์์ ๊ฑฐ์ถ์ฅ์ค๋ฝ๊ณ ์ค๋ฅ๋ฅผ ์ ๋ฐํ๋, ๋น์ถ์ฒ - ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๋น๊ตํ ๋
- ์๋ฐ๊ฐ ์ ๊ณตํ๋ ๋น๊ต์ ์ฌ์ฉ, ex.
String.CASE_INSENSITIVE_ORDER
public final class CaseInsensitiveString implements Comparable<CaseInsensitiveString> {
// ์๋ฐ๊ฐ ์ ๊ณตํ๋ ๋น๊ต์๋ฅผ ์ฌ์ฉํด ํด๋์ค๋ฅผ ๋น๊ตํ๋ค.
public int compareTo(CaseInsensitiveString cis) {
return String.CASE_INSENSITIVE_ORDER.compare(s, cis.s);
}
... // ๋๋จธ์ง ์ฝ๋ ์๋ต
}
- ๋น๊ต์ ์์ฑ ๋ฉ์๋ ์ฌ์ฉ
public final class PhoneNumber implements Cloneable, Comparable<PhoneNumber> {
//๋น๊ต์ ์์ฑ ๋ฉ์๋๋ฅผ ํ์ฉํ ๋น๊ต์
private static final Comparator<PhoneNumber> COMPARATOR =
comparingInt((PhoneNumber pn) -> pn.areaCode)
.thenComparingInt(pn -> pn.prefix)
.thenComparingInt(pn -> pn.lineNum);
public int compareTo(PhoneNumber pn) {
return COMPARATOR.compare(this, pn);
}
... // ๋๋จธ์ง ์ฝ๋ ์๋ต
}
- ๊ธฐ๋ณธ ํ์
์ ๋น๊ตํ ๋ : ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์
๋ค์
compare
๋ฉ์๋ ์ฌ์ฉ
// ๊ธฐ๋ณธ ํ์
ํ๋๊ฐ ์ฌ๋ฟ์ผ ๋์ ๋น๊ต์
public int compareTo(PhoneNumber pn) {
int result = Short.compare(areaCode, pn.areaCode);
if (result == 0) {
result = Short.compare(prefix, pn.prefix);
if (result == 0)
result = Short.compare(lineNum, pn.lineNum);
}
return result;
}
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐จ๐ปโ๐ป ์ดํํฐ๋ธ ์๋ฐ - ๋ชจ๋ ๊ฐ์ฒด์ ๊ณตํต ๋ฉ์๋), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@cekim/์ดํํฐ๋ธ-์๋ฐ-๋ชจ๋ -๊ฐ์ฒด์-๊ณตํต-๋ฉ์๋-bfp6kv34์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค