๐ฏ ์์ดํ 52. ๋ค์ค์ ์๋ ์ ์คํ ์ฌ์ฉํ๋ผ.
- ์ปฌ๋ ์
๋ถ๋ฅ๊ธฐ - ์ค๋ฅ! ์ด ํ๋ก๊ทธ๋จ์ ๋ฌด์์ ์ถ๋ ฅํ ๊น?
public class CollectionClassifier {
public static String classify(Set<?> s) {
return "์งํฉ";
}
public static String classify(List<?> lst) {
return "๋ฆฌ์คํธ";
}
public static String classify(Collection<?> c) {
return "๊ทธ ์ธ";
}
public static void main(String[] args) {
Collection<?>[] collections = {
new HashSet<String>(),
new ArrayList<BigInteger>(),
new HashMap<String, String>().values()
};
for (Collection<?> c : collections)
System.out.println(classify(c));
}
}
"์งํฉ","๋ฆฌ์คํธ","๊ทธ ์ธ"๋ฅผ ์ฐจ๋ก๋ก ์ถ๋ ฅํ ๊ฒ ๊ฐ์ง๋ง, ์ค์ ๋ก ์ํํด๋ณด๋ฉด "๊ทธ ์ธ"๋ง ์ธ ๋ฒ ์ฐ๋ฌ์ ์ถ๋ ฅํ๋ค. ๊ทธ ์ด์ ๋ ๋ค์ค์ ์(overloading, ์ค๋ฒ๋ก๋ฉ)๋ ์ธ classify ์ค ์ด๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง๊ฐ ์ปดํ์ผํ์
์ ์ ํด์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์, ์ปดํ์ผํ์
์ ๋งค๊ฐ๋ณ์ ํ์
์ ๊ธฐ์ค์ผ๋ก ํญ์ ์ธ ๋ฒ์งธ ๋ฉ์๋๋ง ํธ์ถํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ CollectionClassifier์ ๋ชจ๋ classify ๋ฉ์๋๋ฅผ ํ๋๋ก ํฉ์น ํ instanceof๋ก ๋ช
์์ ์ผ๋ก ๊ฒ์ฌํ๋ฉด ๋ง๋ํ ํด๊ฒฐ๋๋ค.
public class FixedCollectionClassifier {
public static String classify(Collection<?> c) {
return c instanceof Set ? "์งํฉ" :
c instanceof List ? "๋ฆฌ์คํธ" : "๊ทธ ์ธ";
}
public static void main(String[] args) {
Collection<?>[] collections = {
new HashSet<String>(),
new ArrayList<BigInteger>(),
new HashMap<String, String>().values()
};
for (Collection<?> c : collections)
System.out.println(classify(c));
}
}
ํ๋ก๊ทธ๋งค์ด ์ธ์ด๊ฐ ๋ค์ค์ ์๋ฅผ ํ์ฉํ๋ค๊ณ ํด์ ๋ค์ค์ ์๋ฅผ ๊ผญ ํ์ฉํ๋ ๋ป์ ์๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋งค๊ฐ๋ณ์ ์๊ฐ ๊ฐ์ ๋๋ ๋ค์ค์ ์๋ฅผ ํผํ๋ ๊ฒ ์ข๋ค. ์ํฉ์ ๋ฐ๋ผ, ํนํ ์์ฑ์๋ผ๋ฉด ์ด ์กฐ์ธ์ ๋ฐ๋ฅด๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ ์ ์๋ค. ๊ทธ๋ด ๋๋ ํท๊ฐ๋ฆด ๋งํ ๋งค๊ฐ๋ณ์๋ ํ๋ณํํ์ฌ ์ ํํ ๋ค์ค์ ์ ๋ฉ์๋๊ฐ ์ ํ๋๋๋ก ํด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=