import org.junit.Test;
import java.util.*;
public class OverloadingProblem {
static class CollectionClassifier {
public static String classify(Set<?> s) {
return "์งํฉ";
}
public static String classify(List<?> s) {
return "๋ฆฌ์คํธ";
}
public static String classify(Collection<?> s) {
return "๊ทธ ์ธ ์ปฌ๋ ์
";
}
}
@Test
public void collectionClassifierTest() {
Collection<?>[] collections = {
new HashSet<>(), // Set
new ArrayList<>(), // List
new HashMap<>().values() // Collection
};
for (Collection<?> collection : collections) {
System.out.println(CollectionClassifier.classify(collection));
}
}
}- ์์ ์ฝ๋์์๋
CollectionClassifierํด๋์ค๊ฐclassify๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ค์ค ์ ์๋ ๋ฉ์๋๋ฅผ 3๊ฐ ๊ฐ์ง๊ณ ์๋ค:classify(Set<?> s)- "์งํฉ"classify(List<?> s)- "๋ฆฌ์คํธ"classify(Collection<?> s)- "๊ทธ ์ธ ์ปฌ๋ ์ "
- ํ
์คํธ ๋ฉ์๋
collectionClassifierTest()์์HashSet,ArrayList, ๊ทธ๋ฆฌ๊ณHashMap์ values()๋ฅผ ํฌํจํ๋ ์ปฌ๋ ์ ๋ฐฐ์ด์ ์ ์ํ๋ค. ์ดํfor๋ฌธ์์ ๊ฐ ์ปฌ๋ ์ ์classify๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ฅํ๋ค.
์คํ ๊ฒฐ๊ณผ๋
"๊ทธ ์ธ ์ปฌ๋ ์ "์ด 3๋ฒ ์ถ๋ ฅ๋๋ค.
- ์ด๋ ๋ค์ค ์ ์๋ ๋ฉ์๋๋ค ์ค์์ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ์ปดํ์ผํ์์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Collection<?>[]๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ ๊ฐ์ฒด๋ ๋ชจ๋ ์ปดํ์ผํ์์๋Collection<?>ํ์ ์ผ๋ก ๊ฐ์ฃผ๋๋ฏ๋ก, ํญ์classify(Collection<?> s)๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
์ฆ, ๋ฐํ์์ ์ค์ ๊ฐ์ฒด ํ์ (e.g.,
Set,List)์ ๊ณ ๋ คํ์ง ์๋๋ค.
- ์ฌ์ ์(Overriding)๋ ๋ฉ์๋๋ ๋์ ๋ฐ์ธ๋ฉ(Dynamic Binding)์ผ๋ก ์ ํ๋๋ค. ์ฆ, ๋ฐํ์์ ๊ฐ์ฒด์ ์ค์ ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
- ๋ฐ๋ฉด์ ๋ค์ค ์ ์(Overloading)๋ ๋ฉ์๋๋ ์ ์ ๋ฐ์ธ๋ฉ(Static Binding)์ผ๋ก ์ ํ๋๋ค. ์ปดํ์ผํ์์ ๋งค๊ฐ๋ณ์์ ์ ์ ํ์ ์ ๊ธฐ์ค์ผ๋ก ํธ์ถํ ๋ฉ์๋๊ฐ ๊ฒฐ์ ๋๋ค.
- ๋ค์ค ์ ์๋ ์ปดํ์ผํ์์ ๋ฉ์๋ ์ ํ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์, ๋งค๊ฐ๋ณ์์ ์ค์ ํ์ (๋ฐํ์ ํ์ )์ด ์๋ ์ ์ ํ์ (์ปดํ์ผํ์ ํ์ )๋ง ๊ณ ๋ ค๋๋ค.
- ์ ์์ ์์๋ ๋ชจ๋ ์ปฌ๋ ์
์ด
Collection<?>ํ์ ์ผ๋ก ์ ์ฅ๋์๊ธฐ ๋๋ฌธ์, ํญ์classify(Collection<?> s)๊ฐ ํธ์ถ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ
static class Wine {
String name() { return "ํฌ๋์ฃผ"; }
}
static class SparklingWine extends Wine {
@Override String name() { return "๋ฐํฌ์ฑ ํฌ๋์ฃผ"; }
}
static class Champagne extends SparklingWine {
@Override String name() { return "์ดํ์ธ"; }
}
@Test
public void wineTest() {
List<Wine> wineList = List.of(new Wine(), new SparklingWine(), new Champagne());
for (Wine wine : wineList) {
System.out.println("wine.name() = " + wine.name());
}
}Wineํด๋์ค๋name()๋ฉ์๋๋ฅผ ์ ์ํ๋ฉฐ, ๊ทธ ํ์ ํด๋์ค์ธSparklingWine๊ณผChampagne์name()๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ณ ์๋ค.- ํ
์คํธ ๋ฉ์๋์์๋
Wine๊ฐ์ฒด๋ค์ ๋ฆฌ์คํธ์ ๋ฃ๊ณ ์ํํ๋ฉด์ ๊ฐ๊ฐ์name()๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
wine.name() = ํฌ๋์ฃผ
wine.name() = ๋ฐํฌ์ฑ ํฌ๋์ฃผ
wine.name() = ์ดํ์ธ
- ์ถ๋ ฅ ๊ฒฐ๊ณผ๋
"ํฌ๋์ฃผ","๋ฐํฌ์ฑ ํฌ๋์ฃผ","์ดํ์ธ"์ด ์ฐจ๋ก๋ก ์ถ๋ ฅ๋๋ค. - ์ด๋ ๊ฐ ๊ฐ์ฒด๊ฐ ์ค์ ๋ก ์ด๋ค ํ์ ์ ์ธ์คํด์ค์ธ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก, ๊ฐ์ฅ ํ์์์ ์ ์๋ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฌ์ ์(Overriding):
- ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค์์ ๊ฐ์ ์๊ทธ๋์ฒ๋ก ๋ค์ ์ ์ํ๋ ๊ฒ์ ๋งํ๋ค.
- ๋ฐํ์์ ๊ฐ์ฒด์ ์ค์ ํ์
์ ๋ฐ๋ผ ํธ์ถ๋๋ ๋ฉ์๋๊ฐ ๊ฒฐ์ ๋๋ค. ์ด๋ฅผ
๋์ ๋ฐ์ธ๋ฉ(Dynamic Binding)์ด๋ผ๊ณ ํ๋ค. - ์์ ์์๋
Wine,SparklingWine,Champagneํด๋์ค๊ฐ ๋ชจ๋name()๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์,wineList์ ๊ฐ ๊ฐ์ฒด๋ ์ค์ ์ธ์คํด์ค ํ์ ์ ๋ฐ๋ผ ์ ์ ํname()๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ๋ค์ค ์ ์(Overloading):
- ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ํ๋, ๋งค๊ฐ๋ณ์์ ๊ฐ์๋ ํ์ ์ ๋ฌ๋ฆฌํ์ฌ ๊ตฌ๋ถํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ปดํ์ผํ์์ ํธ์ถํ ๋ฉ์๋๊ฐ ๊ฒฐ์ ๋๋ค. ์ฆ, ๋งค๊ฐ๋ณ์์ ์ ์ ํ์ (์ปดํ์ผํ์ ํ์ )์ ๊ธฐ์ค์ผ๋ก ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ์ ํํ๋ค. ์ด๋ฅผ ์ ์ ๋ฐ์ธ๋ฉ(Static Binding)์ด๋ผ๊ณ ํ๋ค.
- ์ด์ ์ ๋ค๋ฃฌ
CollectionClassifier์์ ์์๋ ๋ฐํ์ ํ์ ๊ณผ ์๊ด์์ด ํญ์ ์ปดํ์ผํ์ ํ์ (Collection<?>)์ ๋ฐ๋ผ ํธ์ถํ ๋ฉ์๋๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก, ์๋์ ๋ค๋ฅด๊ฒ"๊ทธ ์ธ ์ปฌ๋ ์ "์ด ์ถ๋ ฅ๋์๋ค. - Collectionclassifier ์์์ ํ๋ก๊ทธ๋จ์ ์๋ ์๋๋ ๋งค๊ฐ๋ณ์์ ๋ฐํ์ ํ์ ์ ๊ธฐ์ดํด ์ ์ ํ ๋ค์ค์ ์ ๋ฉ์๋๋ก ์๋ ๋ถ๋ฐฐํ๋ ๊ฒ์ด์๋ค. Wine ์์์์ name ๋ฉ์๋์ ๋๊ฐ์ด ๋ง์ด๋ค. ํ์ง๋ง ๋ค์ค์ ์๋ ์ด๋ ๊ฒ ๋์ํ์ง ์๋๋ค.
-
instanceof๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ํ์ ๊ฒ์ฌ:
instanceof์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปฌ๋ ์ ํ์ ์ ๋ช ์์ ์ผ๋ก ๊ฒ์ฌํ๋ฉด, ๋ค์ค ์ ์ ์์ด ํ๋์ ๋ฉ์๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.public static String classify(Collection<?> c) { return c instanceof Set ? "์งํฉ" : c instanceof List ? "๋ฆฌ์คํธ" : "๊ทธ ์ธ ์ปฌ๋ ์ "; }
- ์ด ๋ฐฉ์์ ๋ฐํ์์ ์ปฌ๋ ์ ์ ์ค์ ํ์ ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ ์ง๊ด์ ์ด๋ค.
-
๋ค์ค ์ ์์ ์ํ์ฑ:
- ๋ค์ค ์ ์๋ ์ปดํ์ผํ์์ ๊ฒฐ์ ๋๋ฏ๋ก, ๋ฐํ์์ ๊ฐ์ฒด ํ์ ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ํผ๋์ ์ด๋ํ ์ ์๋ค.
- ํนํ ๊ณต๊ฐ API์ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ์ด๋ค ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ง ๋ช ํํ๊ฒ ์ ์ ์๋ค๋ฉด ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋ฐ ๊ธด ์๊ฐ์ด ์์๋ ์ ์์ผ๋ฉฐ, ํผ๋์ ์ค ๊ฐ๋ฅ์ฑ์ด ์๋ค.
-
๋ฉ์๋ ์ด๋ฆ์ ๋ช ํํ:
- ๋ค์ค ์ ์ ๋์ ๋ค๋ฅธ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๊ฐ์ ํ์ ์ ๋ํด ๊ตฌ์ฒด์ ์ธ ๋ฉ์๋ ์ด๋ฆ์ ๋ถ์ฌ ํผ๋์ ํผํ ์ ์๋ค.
-
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํ์ฉ:
- ์์ฑ์๊ฐ ์ฌ๋ฌ ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ผ๋ก ์์ฑ ์๋๋ฅผ ๋ช ํํ ํ ์ ์๋ค.
- ๋ค์ค ์ ์๊ฐ ํผ๋์ ์ผ์ผํฌ ์ ์๋ ์ํฉ ํผํ๊ธฐ:
- ๋ค์ค ์ ์๋ ๋ฉ์๋๋ฅผ ์ปดํ์ผํ์์ ์ ํํ๋ฏ๋ก, ๋ฐํ์ ํ์ ์ด ์๋ ๋งค๊ฐ๋ณ์์ ์ ์ ํ์ ์ ๋ฐ๋ผ ํธ์ถํ ๋ฉ์๋๊ฐ ๊ฒฐ์ ๋๋ค.
- ์ด๋ก ์ธํด ์ฌ์ฉ์๊ฐ ์๋ํ ๊ฒ๊ณผ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ ์์ผ๋ฉฐ, ํนํ ๋ฐํ์์ ์์๊ณผ ๋ค๋ฅธ ๋์์ ํ๊ฒ ๋์ด ์ค๋์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
- ๋งค๊ฐ๋ณ์ ์๊ฐ ๊ฐ์ ๋ค์ค ์ ์๋ฅผ ํผํ๊ธฐ:
- ๋ค์ค ์ ์๋ ๋ฉ์๋ ์ค ๋งค๊ฐ๋ณ์ ์๊ฐ ๊ฐ์ ๋ฉ์๋๋ ์ปดํ์ผ๋ฌ๊ฐ ์ ์ ํ์ ๋ง์ ๊ณ ๋ คํ์ฌ ์ ํํ๊ธฐ ๋๋ฌธ์ ํผ๋์ ์ค ์ ์๋ค. ๋ฐ๋ผ์ ๋งค๊ฐ๋ณ์์ ์๊ฐ ๊ฐ๋ค๋ฉด ๋ค์ค ์ ์๋ฅผ ํผํด์ผ ํฉ๋๋ค.
- ๊ฐ๋ณ์ธ์ ์ฌ์ฉ ์ ๋ค์ค ์ ์ ํผํ๊ธฐ:
- ๊ฐ๋ณ์ธ์(varargs)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ฉ์๋๋ฅผ ๋ค์ค ์ ์ํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ๋ชจํธํด์ง๋ค. ๋ฐ๋ผ์ ๊ฐ๋ณ์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ค์ค ์ ์๋ฅผ ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ค์ค ์ ์ ๋์ ๋ฉ์๋ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ง๊ธฐ:
- ๋ค์ค ์ ์ ๋์ ์๋ฏธ๊ฐ ๋ช
ํํ ๋ฉ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์๋ฅผ ๋ค์ด,
ObjectOutputStreamํด๋์ค๋writeBoolean(),writeInt()๋ฑ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ค์ ์ ๊ณตํ์ฌ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋์์ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ๋ค.
- ๋ค์ค ์ ์ ๋์ ์๋ฏธ๊ฐ ๋ช
ํํ ๋ฉ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์๋ฅผ ๋ค์ด,
- ์์ฑ์ ๋ค์ค ์ ์์ ๋์ - ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋:
- ์์ฑ์๋ ๋ค์ค ์ ์๊ฐ ๋ถ๊ฐํผํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ชฉ์ ์ ๋ช ํํ ํ๋ ๊ฒ์ด ์ข๋ค. ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์ด๋ฆ์ ์ง์ ์ ์๊ธฐ ๋๋ฌธ์ ์์ฑ์ ๋ชฉ์ ์ ๋ ๋ช ํํ ์ ๋ฌํ ์ ์๋ค.
- ๋ค์ค ์ ์๊ฐ ๋ช
ํํ๊ฒ ๋ค๋ฅธ ํ์
์ธ ๊ฒฝ์ฐ ๊ด์ฐฎ๋ค:
- ๋ค์ค ์ ์๋ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๊ฐ ๋ช ํํ๊ฒ ๋ค๋ฅธ ํ์ ์ ๊ฐ์ง ๊ฒฝ์ฐ๋ผ๋ฉด ํผ๋์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ๋ค. ํ์ง๋ง ๋งค๊ฐ๋ณ์ ํ์ ์ด ๋น์ทํ๊ฑฐ๋ ๊ฐ์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ ํผํด์ผ ํ๋ค.
- ๋ฌธ์ ์ฝ๋:
๊ฐ๋จํ ๋์ผ๋ก ์ฝ๋๋ฅผ ํด์ํด๋ณด๋ฉด,
-3 ~ 2๊น์ง ์ซ์๋ฅผ ๋ฃ๊ณ ,0 ~ 2๊น์ง์ ์ซ์๋ฅผ ์ง์ฐ๋ ค๋ ์๋๊ฐ ๋ณด์ธ๋ค.
@Test
public void boxingTest() {
Set<Integer> set = new TreeSet<>();
List<Integer> list = new ArrayList<>();
for (int i = -3; i < 3; i++) {
set.add(i);
list.add(i);
}
for (int i = 0; i < 3; i++) {
set.remove(i);
list.remove(i);
}
System.out.println("set = " + set);
System.out.println("list = " + list);
}์คํ ๊ฒฐ๊ณผ
set = [-3, -2, -1, 0, 1, 2]
list = [-3, -2, -1, 0, 1, 2]
set = [-3, -2, -1]
list = [-2, 0, 2]
-
set์ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์๋ฐ,list์ ๊ฒฐ๊ณผ๋ ์๋์ ๋ค๋ฅด๋ค. -
๊ทธ ์ด์ ๋
list์๋remove(Object element)์remove(int index)๋๊ฐ์ง ๋ฉ์๋๊ฐ ๋ค์ค ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.- ์ด ์ค ์ฐ๋ฆฌ๊ฐ ์๋ํ ๊ฒ์ ์ฒซ๋ฒ์งธ ๋ฉ์๋์ธ๋ฐ, ๋๋ฒ์งธ ๋ฉ์๋๊ฐ ์ ์ฉ๋์๋ค.
- ์ด ์ฝ๋๋
List<Integer>์์remove()๋ฉ์๋๊ฐ ๋ค์ค ์ ์๋ ํ์ ํผ๋์ด ๋ฐ์ํ๋ค.remove(int index)์remove(Object element)๊ฐ ๋ค์ค ์ ์๋์ด,list.remove(i)๊ฐ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํธ์ถ๋๋ค.
-
๋ฐ๋ฉด
set์๋remove(Object element)๋ฉ์๋๋ฐ์ ์กด์ฌํ์ง ์์์ ์ฐ๋ฆฌ์ ์๋๋๋ก ๋ฉ์๋๊ฐ ์ ์ฉ๋๋ค. -
์ ์ ์๋ํ๋๋ก ์์ :
@Test public void boxingTest2() { Set<Integer> set = new TreeSet<>(); List<Integer> list = new ArrayList<>(); for (int i = -3; i < 3; i++) { set.add(i); list.add(i); } for (int i = 0; i < 3; i++) { set.remove(i); list.remove((Integer) i); // (Integer)๋ก ๋ช ์์ ์บ์คํ } System.out.println("set = " + set); System.out.println("list = " + list); }
-
list.remove((Integer) i)๋ก ๋ช ์์ ์บ์คํ ์ ํตํด ๋ค์ค ์ ์๋ ๋ฉ์๋ ์ค ์๋ํ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋ง๋ ๋ค. -
์คํ ๊ฒฐ๊ณผ
set = [-3, -2, -1, 0, 1, 2] list = [-3, -2, -1, 0, 1, 2] set = [-3, -2, -1] list = [-3, -2, -1]
-
๋ฌธ์ ์ฝ๋:
@Test
public void lambdaTest1() {
new Thread(System.out::println).start();
}
@Test
public void lambdaTest2() {
ExecutorService exec = Executors.newCachedThreadPool();
exec.submit(System.out::println); // ์ปดํ์ผ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
}lambdaTest1()์Runnable์ ์๊ตฌํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ด ์ปดํ์ผ๋๋ค.lambdaTest2()์์๋submit()๋ฉ์๋๊ฐRunnable๊ณผCallable<T>๋ฅผ ๋ชจ๋ ๋ฐ์ ์ ์์ด ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ค ๋ฉ์๋๋ฅผ ์ ํํด์ผ ํ ์ง ๋ชจํธํด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.- ์๋ก ๋ค๋ฅธ ํจ์ํ ์ธํฐํ์ด์ค๋ผ๋ ๊ฐ์ ์์น์ ์ธ์๋ก ๋ฐ์ ๊ฒฝ์ฐ, ๋ค์ค ์ ์๋ ํผ๋์ ์ด๋ํ ์ ์๋ค.
- ์ด ๋ง์ ์๋ก ๋ค๋ฅธ ํจ์ํ ์ธํฐํ์ด์ค๋ผ๋ ์๋ก ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅด์ง ์๋ค๋ ๋ป์ด๋ค. ์ปดํ์ผํ ๋ ๋ช ๋ น์ค ์ค์์น๋ก -Xlint:overloads๋ฅผ ์ง์ ํ๋ฉด ์ด๋ฐ ์ข ๋ฅ์ ๋ค์ค์ ์๋ฅผ ๊ฒฝ๊ณ ํด์ค ๊ฒ์ด๋ค.
{% hint style="danger" %} ์๋ฐ 4์ ๊ทธ ์ดํ์ ๋ํด์ {% endhint %}
์ ๋ค๋ฆญ์ด ๋์ ๋๊ธฐ ์ ์ธ ์๋ฐ 4๊น์ง์ List์์๋ Object์ int๊ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฌ๋ผ์ ๋ฌธ์ ๊ฐ ์์๋ค. ๊ทธ๋ฐ๋ฐ ์ ๋ค๋ฆญ๊ณผ ์คํ ๋ฐ์ฑ์ด ๋ฑ์ฅํ๋ฉด์ ๋ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ํ์ ์ด ๋๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅด์ง ์๊ฒ ๋์๋ค. ์ ๋ฆฌํ์๋ฉด, ์๋ฐ ์ธ์ด์ ์ ๋ค๋ฆญ๊ณผ ์คํ ๋ฐ์ฑ์ ๋ํ ๊ฒฐ๊ณผ List ์ธํฐํ์ด์ค๊ฐ ์ทจ์ฝํด์ก๋ค. ๋คํํ ๊ฐ์ ํผํด๋ฅผ ์ ์ API๋ ๊ฑฐ์ ์์ง๋ง, ๋ค์ค์ ์ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ ๊ทผ๊ฑฐ๋ก๋ ์ถฉ๋ถํ๋ค.
- ์๋ฐ 4๊น์ง๋ ์ ๋ค๋ฆญ๊ณผ ์คํ ๋ฐ์ฑ์ด ์์๊ธฐ ๋๋ฌธ์ ํด๋์ค์ ๊ธฐ๋ณธ ํ์ ๊ฐ์ ๊ตฌ๋ถ์ด ๋ช ํํ๋ค.
- ์๋ฅผ ๋ค์ด,
List์ธํฐํ์ด์ค์์ ๋ ๊ฐ์ง ํํ์remove๋ฉ์๋๊ฐ ์์๋ค:remove(Object element): ์ฃผ์ด์ง ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ค.remove(int index): ์ฃผ์ด์ง ์ธ๋ฑ์ค ์์น์ ์์๋ฅผ ์ญ์ ํ๋ค.
- ๊ธฐ๋ณธ ํ์
(int)๊ณผ ์ฐธ์กฐ ํ์
(Object)์ ์๋ก ๊ทผ๋ณธ์ ์ผ๋ก ๋ฌ๋๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ์ฝ๊ฒ ๊ตฌ๋ถํ ์ ์์๋ค. ์ฆ,
intํ์ ์remove(int index)๋ฉ์๋๋ก ํธ์ถ๋๊ณ ,Objectํ์ ์remove(Object element)๋ฉ์๋๋ก ํธ์ถ๋์๋ค.
-
์๋ฐ 5๋ถํฐ ์ ๋ค๋ฆญ๊ณผ ์คํ ๋ฐ์ฑ์ด ๋์ ๋์๋ค.
- ์ ๋ค๋ฆญ(Generic): ํ์
์์ ์ฑ์ ๋์ด๊ธฐ ์ํด,
List<Integer>์ ๊ฐ์ด ์ปฌ๋ ์ ์ ๋ด๊ธฐ๋ ๊ฐ์ฒด์ ํ์ ์ ์ง์ ํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. - ์คํ ๋ฐ์ฑ(Auto-Boxing): ๊ธฐ๋ณธ ํ์
๊ณผ ํด๋น ์ฐธ์กฐ ํ์
๊ฐ์ ์๋์ผ๋ก ํ๋ณํ์ด ์ด๋ฃจ์ด์ง๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฅผ ๋ค์ด,
intํ์ ์ด ์๋์ผ๋กInteger๊ฐ์ฒด๋ก ๋ณํ๋๋ค.
- ์ ๋ค๋ฆญ(Generic): ํ์
์์ ์ฑ์ ๋์ด๊ธฐ ์ํด,
-
์ด๋ก ์ธํด
List<Integer>์ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋์๊ณ , ์ด๋remove๋ฉ์๋์ ๋ค์ค ์ ์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๊ฒผ๋ค.- ์๋ฅผ ๋ค์ด,
list.remove(i)๊ฐ ์์ ๋,i๊ฐ ๊ธฐ๋ณธ ํ์ int์ผ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ฐธ์กฐ ํ์ Integer๋ก ์คํ ๋ฐ์ฑ๋๋ฏ๋ก, ์ปดํ์ผ๋ฌ๋ ์ดi๊ฐ ์ธ๋ฑ์ค๋ฅผ ์๋ฏธํ๋์ง, ๊ฐ์ ์๋ฏธํ๋์ง ํผ๋ํ ์ ์๊ฒ ๋์๋ค. - ์ด๋ก ์ธํด
remove(int index)์remove(Object element)์ค ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ๋ช ํํ์ง ์๊ฒ ๋๊ณ , ์ปดํ์ผ๋ฌ๋remove(int index)๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋์ด, ์๋์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด,
-
์์ ์์
List<Integer>๊ฐ ์์ ๋,list.remove(i)๋ฅผ ํธ์ถํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐi๋ฅผ ์คํ ๋ฐ์ฑํ์ฌInteger๋ก ์ฒ๋ฆฌํ ์๋ ์๊ณ , ๋จ์ํ ์ธ๋ฑ์ค๋ก ํด์ํ ์๋ ์๋ค. -
์๋ฅผ ๋ค์ด:
List<Integer> list = new ArrayList<>(Arrays.asList(-3, -2, -1, 0, 1, 2)); list.remove(1); // ์ฌ๊ธฐ์ 1์ ์ธ๋ฑ์ค๋ก ํด์๋์ด ๋ ๋ฒ์งธ ์์(-2)๊ฐ ์ ๊ฑฐ๋จ
- ํ์ง๋ง ์๋๋
1์ด๋ผ๋ ๊ฐ์ ์ญ์ ํ๋ ๊ฒ์ด์๋ค๋ฉด,list.remove((Integer) 1)๋ก ๋ช ์์ ์บ์คํ ์ ํตํด ์ปดํ์ผ๋ฌ๊ฐ ํผ๋ํ์ง ์๋๋ก ํด์ผ ํ๋ค.
- ํ์ง๋ง ์๋๋
๋ฐ๋ผ์ ๋ค์ค ์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋งค๊ฐ๋ณ์์ ํ์ ์ด ํผ๋์ ์ค ์ ์๋ ์ํฉ์ ํผํ๊ฑฐ๋, ๋ช ์์ ํ๋ณํ์ ํตํด ์๋๋ฅผ ๋ช ํํ๊ฒ ํํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
-
๋ค์ค ์ ์๋ก ์ฌ๋ฌ ํ์ ์ ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ธ์ ํฌ์๋ฉ์ ์ฌ์ฉํ๋ค.
public boolean contentEquals(StringBuffer sb) { return contentEquals((CharSequence) sb); }
- ์์ ๊ฐ์ด ๋ช ์์ ์บ์คํ ์ ํตํด ๋ ํน์ํ ๋ค์ค ์ ์ ๋ฉ์๋๋ก ํฌ์๋ฉํ์ฌ ๋์ผํ ์์ ์ ์ํํ๋๋ก ํ๋ค.
-
String ํด๋์ค์
valueOf๋ฉ์๋๋ค์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๋๋ผ๋ ์ ํ ๋ค๋ฅธ ์ผ์ ์ํpublic static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } public static String valueOf(char[] data) { return new String(data); }
- ์ด๋ฌํ ๋ค์ค ์ ์๋ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์์ด ์๋ชป๋ ์ค๊ณ ์ฌ๋ก๋ก ๋จ์ ์๋ค.
- ObjectOutputStream ํด๋์ค๋ ๋ชจ๋ ๊ธฐ๋ณธ ํ์
์ ๋ํด
writeBoolean(boolean),writeInt(int)๊ฐ์ ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ค์ ์ ๊ณตํ๋ค. - ์ด ๋ฐฉ์์ ํตํด ๊ฐ ๋ฉ์๋์ ์ญํ ์ ๋ช
ํํ ๊ตฌ๋ถํ๋ฉฐ,
read๋ฉ์๋์ ์ด๋ฆ์ ์ง์ง์ด ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๋์๋ฉ๋๋ค.- ์:
writeInt(int)์readInt()
- ์:
- ์์ฑ์๋ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ง์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฒ์งธ ์์ฑ์๋ถํฐ๋ ๋ค์ค ์ ์๊ฐ ๋ถ๊ฐํผํ๋ค.
- ์ด ๊ฒฝ์ฐ์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์๋ค.
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์ด๋ฆ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์์ฑ์ ์๋๋ฅผ ๋ช ํํ ์ ๋ฌํ ์ ์๋ค.
- ๋งค๊ฐ๋ณ์ ํ์
์ด ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ค์ค ์ ์๋ฅผ ์ฌ์ฉํด๋ ํผ๋์ด ์๋ค.
- ์๋ฅผ ๋ค์ด
ArrayList์๋int๋ฅผ ๋ฐ๋ ์์ฑ์์Collection์ ๋ฐ๋ ์์ฑ์๊ฐ ์๋๋ฐ, ๋ ์์ฑ์ ์ค ์ด๋ค ๊ฒ์ด ํธ์ถ๋ ์ง ๋ช ํํ ๊ตฌ๋ถ๋๋ค.
- ์๋ฅผ ๋ค์ด
- ๊ทธ๋ฌ๋, ์คํ ๋ฐ์ฑ์ด ๋์ ๋๋ฉด์ ๊ธฐ๋ณธ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ๊ฐ์ ํผ๋์ด ์๊ธฐ๊ฒ ๋์๊ณ , ์ด๋ฅผ ํผํ๊ธฐ ์ํด ๋ช ์์ ์บ์คํ ์ด ํ์ํ ๋๊ฐ ์๋ค.
- ๋ค์ค ์ ์๋ฅผ ํ์ฉํ๋ค๊ณ ํด์ ๋จ๋ฐํ์ง ๋ง์.
- ๋งค๊ฐ๋ณ์ ์๊ฐ ๊ฐ์ ๋ค์ค ์ ์๋ ์ฌ๋งํ๋ฉด ๋ง๋ค์ง ๋ง์.
- ๋ค์ค ์ ์์ ํจ์ ์ ์คํ ๋ฐ์ฑ, ๋๋ค์ ๋ฉ์๋ ์ฐธ์กฐ ๋ฑ์ ์ํฉ์์ ๋ฐ์ํ ์ ์๋ค. ํนํ, ์ปดํ์ผ๋ฌ๊ฐ ์ ์ ํ์
์ ๊ธฐ์ค์ผ๋ก ๋ฉ์๋๋ฅผ ์ ํํ๊ธฐ ๋๋ฌธ์ ์์๊ณผ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ ์๋ค.
- ์ด๋ฅผ ํผํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค:
- ๋ช ์์ ์บ์คํ ์ ์ฌ์ฉํ์ฌ ์๋ํ ๋ฉ์๋ ํธ์ถ์ ์ ๋.
- ํจ์ํ ์ธํฐํ์ด์ค๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์์น์ ์ธ์๋ก ๋ฐ์ง ์๋๋ก ์ค๊ณ
- ๋ค์ค ์ ์ ๋์ ๋ฉ์๋ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ ์ํ์ฌ ๋ช ํ์ฑ์ ๋์ธ๋ค.
- ์์ฑ์์ ๊ฒฝ์ฐ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ๋ช ํํ ํ๋ค.
- ๋ค์ค ์ ์ ์์๋ ๋งค๊ฐ๋ณ์ ํ์ ์ด ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํ๋ค.
- ์ด๋ฅผ ํผํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค:
๋ค์ค์ ์๊ฐ ํ์ํ๋ค๋ฉด, ํ๋ณํํ์ฌ ์ ํํ ๋ค์ค์ ์ ๋ฉ์๋๊ฐ ์ ํ๋๋๋ก ํ์
์ถ์ฒ ๋ฐ ์ฐธ๊ณ
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)