3-4 Cloneable์ ์ฌ์ฉํ์ง ๋ง๋ผ & Comparable์ ์ฌ์ฉ
by JiwonDev# Cloneable์ ์ฌ์ฉํ์ง ๋ง๋ผ.
Cloneable์ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ณต์ (clone)์ ํ์ฉํ๋ค๋ ์ฌ์ค์ ์๋ฆฌ๋ ๋ฐ ์ฐ๋ ค๊ณ ๊ณ ์๋ ๋ฏน์ค์ธ(mixin) ์ธํฐํ์ด์ค๋ค.
์ด ์ธํฐํ์ด์ค์๋ clone ๋ฉ์๋๊ฐ ์์ผ๋ฉฐ, Object์ clone ๋ฉ์๋๋ protected๋ก ์ ์ธ๋์ด ์๋ค.
๋ค๋ง ๋ฐฐ์ด์ ์ ์ธํ๊ณ , ์ผ๋ฐ์ ์ธ ์๋ฐ ๊ฐ์ฒด์ ์ฌ์ฉํ๋๊ฑด ๋ถ๊ฐ๋ฅํ ์ผ์ด๋ค. ์ฌ์ฉํ์ง ๋ง์.
๋จ์ํ super.clone()์ด ๋ฐํํ๋ ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋๋ก ๊ตฌํํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
clone ๋ฉ์๋๋ ๋ ๋ค๋ฅธ ํํ์ ์์ฑ์์ด๋ค. ์๋ ๊ฐ์ฒด๋ฅผ ์์์ํค๋ ์ผ์ด ์๋๋ก ํด์ผ ํ๊ณ , ๋ณต์ฌ๋ณธ์ ๋ถ๋ณ์(invariant)๋ ์ ๋๋ก ๋ง์กฑ์์ผ์ผ ํ๋ค. Stack์ clone ๋ฉ์๋๊ฐ ์ ๋๋ก ๋์ํ๋๋ก ํ๋ ค๋ฉด ์คํ์ ๋ด๋ถ ๊ตฌ์กฐ๋ ๋ณต์ฌํด์ผ ํ๋ค.
clone ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ณต์กํ ๊ณผ์ ์ด๋ค. clone ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋์์ ์ ๊ณตํ๊ฑฐ๋, ์์ ๋ณต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋ ๊ฒ์ด ๋ซ๋ค. ์๋ฅผ ๋ค์ด, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ํด๋์ค๋ ๊ฐ์ฒด ๋ณต์ ๋ฅผ ํ์ฉํ์ง ์๋ ๊ฒ์ด ๋ง๋ค. ๋ณต์ฌ๋ณธ์ ์๋ ๊ฐ์ฒด์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ณ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ด๊ธฐ ๋๋ฌธ.
@Override public Stack clone() {
try {
Stack result = (Stack) super.clone();
result.elements = elements.clone();
return result;
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
# sort ๊ธฐ๋ฅ์ ๋ง๋ค๋ ค๊ณ ํ๋ค๋ฉด Comparable ๊ตฌํ๋ ๊ณ ๋ คํ๋ผ.
sort ๊ธฐ๋ฅ์ ๋ง๋ค๋ ค๊ณ ํ๋ค๋ฉด Comparable์ ๊ตฌํํ๊ณ ์ฌ์ฉํ์.
๋ฐ์ฑ๋ ๊ธฐ๋ณธํ์ ํด๋์ค (Integer)์ ๊ฒฝ์ฐ, static compare๋ Comparator ์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํ๋ ๋น๊ต์ (Comparator) ์์ฑ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ์ข๋ค.
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด Collection๊ณผ ์ฐ๋ํ ์ ์๋ค. ๋ํ Comparable์ ์ ๋ค๋ฆญ์ ์ธํฐํ์ด์ค์ด๋ฏ๋ก ์ปดํ์ผ ์๊ฐ์ ํ์ ๊ฒ์ฆ์ด ์๋ฃ๋๊ธฐ์, ๋น๊ตํ๋ ํจ์์์ ์ธ์๋ก ๋ฐ์ ๊ฐ์ฒด์ ์๋ฃํ์ ๊ฒ์ฌํ๊ฑฐ๋ (myClass) value ์ฒ๋ผ ๋ถํ์ํ ์บ์คํ ์ ํ ํ์๋ ์์ด์ง๋ค.
dogs.sort(Dog.getReversedComparator());
@ToString
@Builder
@Getter
public class Dog {
private final static Comparator<Dog> reversedComparator =
Comparator.comparingInt(Dog::getAge)
.thenComparingInt(Dog::getLegs)
.reversed();
public static Comparator<Dog> getReversedComparator() {
return reversedComparator;
}
private int age;
private int legs;
}
'๐ฑBackend > Effective-Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
5-1 ์ ๋ค๋ฆญ์ ๊ทธ๋ฅ Raw ๋ก ์ฌ์ฉํ์ง ๋ง๋ผ(+ ๋น๊ฒ์ฌ ๊ฒฝ๊ณ ์ ๊ฑฐ) (0) | 2021.09.15 |
---|---|
4-1 ์์, ์ธํฐํ์ด์ค, ํด๋์ค์ ๊ถํ ์ต์ํ(+Java9 ๋ชจ๋) (0) | 2021.09.15 |
3-1 Equals์ toString์ ์ฌ์ ์ (0) | 2021.09.15 |
2-2 ๋ค ์ด ๊ฐ์ฒด์ฐธ์กฐ๋ฅผ ํด์ ํ๋ผ. (0) | 2021.09.15 |
2-1 ์์ฑ์๋ฅผ ๋์ ํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ (0) | 2021.09.15 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev