μΆμ²
ChatGPT
νμ μκ±°λ?
νμ μκ±°λ Javaμ μ λ€λ¦μ΄ μ»΄νμΌλ νμ λ°νμμμ μ λ€λ¦ νμ 맀κ°λ³μκ° μ κ³ λλ κ³Όμ μ΄λ€. μ λ€λ¦ νμ μ μ»΄νμΌ μμ μλ§ μ ν¨νκ³ , λ°νμμλ Object νμ μΌλ‘ λ체λκ±°λ μν κ²½κ³λ₯Ό μ¬μ©νλ κ²½μ° μμ ν΄λμ€λ‘ λ체λλ€.
μλ₯Ό λ€μ΄, List<String>κ³Ό List<Integer>λ μ»΄νμΌ νμμλ μλ‘ λ€λ₯Έ νμ μΌλ‘ κ°μ£Όλμ§λ§, μ»΄νμΌ νμλ λͺ¨λ List νμ μΌλ‘ λμΌνκ² μ²λ¦¬λλ€. μ΄ λλ¬Έμ μ λ€λ¦ νμ μ 보λ λ°νμμλ μ‘΄μ¬νμ§ μμΌλ©°, μ΄λ₯Ό νμ μκ±°λΌκ³ νλ€.
νμ μκ±°μ λͺ©μ
μλ°μμ νμ μκ±°κ° λμ λ μ£Όμ μ΄μ λ νλ°© νΈνμ±μ μ μ§νλ©΄μ μ λ€λ¦μ λμ νκΈ° μν¨μ΄λ€. JDK 5 μ΄μ μ μ‘΄μ¬νλ μ½λμ νΈνλλλ‘ νλ €λ©΄ μλ‘μ΄ μ λ€λ¦ κΈ°λ₯μ΄ κΈ°μ‘΄μ λΉμ λ€λ¦ μ½λμ 곡쑴ν μ μμ΄μΌ νλ€.
κΈ°λ₯μ μΌλ‘ νμν΄μ λμ λ κ² μλκ³ , μλ° 1.4 μ΄μ λ²μ μ ν¬κΈ°νμ§ μκΈ° μν΄μ νμ μκ±°λ₯Ό λ§λ κ²μ. π₯Ή
- νλ°© 보νμ±μ΄λ
- μλ‘μ΄ λ²μ μ μμ€ν , μννΈμ¨μ΄ λλ κΈ°μ μ΄ κΈ°μ‘΄μ μ΄μ λ²μ κ³Ό νΈνλμ΄, μ΄μ λ²μ μμ μ¬μ©λλ κΈ°λ₯μ΄λ μ½λκ° μλ‘μ΄ λ²μ μμλ κ·Έλλ‘ λμν μ μλ λ₯λ ₯μ λ§νλ€. μ¦, μλ‘μ΄ λ²μ μ΄ λμ€λλΌλ κΈ°μ‘΄ μ¬μ©μλ€μ΄ μ΄μ λ²μ μμ μμ±ν νλ‘κ·Έλ¨μ΄λ λ°μ΄ν°λ₯Ό κ³μ μ¬μ©ν μ μλλ‘ μ§μνλ κ²μ΄λ€.
νμ μκ±°κ° μ΄λνλ μ μ½
1. λ°νμ νμ μ²΄ν¬ λΆκ°λ₯
μ λ€λ¦ νμ μ λ³΄κ° μκ±°λλ―λ‘, μ λ€λ¦ νμ μΌλ‘ μΊμ€ν νκ±°λ νμ 체ν¬λ₯Ό ν μ μλ€.
2. μ λ€λ¦ νμ μ λ°°μ΄ μμ± λΆκ°λ₯
μ λ€λ¦ νμ μ λ°°μ΄μ μμ±νλ κ²μ νμ μμ μ±μ 보μ₯ν μ μκΈ° λλ¬Έμ κΈμ§λλ€.
3. μ€λ²λ‘λ© λΆκ°
νμ μκ±° λλ¬Έμ μ λ€λ¦ λ©μλλ₯Ό μ€λ²λ‘λ©νλ κ²μ΄ λΆκ°λ₯νλ€. λμΌν νμ μκ±° κ²°κ³Όλ₯Ό κ°μ§λ λ λ©μλλ μ€λ²λ‘λ©λ μ μλ€.
νμ μκ±°μ κ΄λ ¨λ μμ μ½λ
μμ 1 : λ°νμ νμ 체ν¬μ νμ μκ±°
import java.util.ArrayList;
import java.util.List;
public class TypeErasureExample {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
List<Integer> integerList = new ArrayList<>();
System.out.println(stringList.getClass() == integerList.getClass()); // true
}
}
κ²°κ³Ό : true
- stringListμ integerListλ μλ‘ λ€λ₯Έ μ λ€λ¦ νμ (List<String>κ³Ό List<Integer>)μΌλ‘ μ μΈλμμ§λ§, νμ μκ±°λ‘ μΈν΄ μ»΄νμΌλ νμλ λͺ¨λ κ°μ List νμ μΌλ‘ κ°μ£Όλλ€. λ°λΌμ getClass() λ©μλλ‘ νμΈνλ©΄ λμ λμΌν ν΄λμ€λ‘ μ·¨κΈλλ€.
μμ 2: μ λ€λ¦ λ°°μ΄ μμ± λΆκ°λ₯
public class GenericArrayExample<T> {
// μ λ€λ¦ νμ
μ λ°°μ΄μ μμ±νλ €κ³ νλ©΄ μ»΄νμΌ μ€λ₯ λ°μ
// T[] array = new T[10]; // μ»΄νμΌ μ€λ₯
public static void main(String[] args) {
// λ€μκ³Ό κ°μ λ°©μμΌλ‘λ κ°λ₯
List<String>[] stringLists;
List<?>[] lists = new List<?>[10]; // OK
}
}
- new T[10]μ²λΌ μ λ€λ¦ νμ μ λ°°μ΄μ μ§μ μμ±ν μ μλ€. λμ μμΌλμΉ΄λ List<?>[]μ κ°μ ννλ‘ λ°°μ΄μ μ μΈν μλ μμ§λ§, μ΄ κ²½μ°μλ νμ μμ μ±μ μμ ν 보μ₯ν μ μλ€.
νμ μκ±°κ° μ΄λνλ λ¬Έμ μ μ£Όμ μ¬ν
λ°νμ μΊμ€ν μμΈ
νμ μκ±°λ‘ μΈν΄ ClassCastExceptionμ΄ λ°μν μ μλ€. μ λ€λ¦μ μ»΄νμΌ μμ μ νμ 체ν¬λ₯Ό νμ§λ§, μλͺ»λ νμ μΊμ€ν μ λ°νμμ λ°κ²¬λ μ μλ€.
import java.util.ArrayList;
import java.util.List;
public class CastExceptionExample {
public static void main(String[] args) {
List rawList = new ArrayList();
rawList.add("Hello");
rawList.add(123); // κ²½κ³ μμ
List<String> stringList = rawList; // νμ
λΆμΌμΉ, νμ§λ§ κ²½κ³ λ§ λ°μ
// λ°νμ μμΈ λ°μ
for (String s : stringList) {
System.out.println(s); // ClassCastException: Integer cannot be cast to String
}
}
}
- μ΄ μμ μμλ μμ νμ μ 리μ€νΈ(List rawList)μ μλ‘ λ€λ₯Έ νμ μ κ°μ²΄λ₯Ό μΆκ°νλ€. κ·Έλ° λ€μ μ΄ λ¦¬μ€νΈλ₯Ό μ λ€λ¦ νμ μ List<String>μΌλ‘ μΊμ€ν νκ³ λ¬Έμμ΄λ‘ μΆλ ₯νλ €κ³ μλν λ ClassCastExceptionμ΄ λ°μνλ€.
νμ μκ±°λ₯Ό μ°ννκ±°λ 극볡νλ λ°©λ²
λ°μ΄λ νμ μ μ¬μ©ν΄ μ λ€λ¦ νμ μ μ ν
μλ₯Ό λ€μ΄, List<? extends Number>μ κ°μ΄ μ νλ μ λ€λ¦ νμ μ μ¬μ©νλ©΄ λ°νμ μμ μ±μ λμΌ μ μλ€.
μμΌλμΉ΄λ μ¬μ©
'? extends' λλ '? super'μ κ°μ μμΌλμΉ΄λλ₯Ό μ¬μ©ν΄ νμ μμ μ±μ κ°ννλ€.
μ»΄νμΌ κ²½κ³ λ₯Ό νμΈνκ³ μ²λ¦¬
unchecked κ²½κ³ λ₯Ό 무μνμ§ λ§κ³ μ½λμμ λ¬Έμ κ° λ°μν μ μλ μ§μ μ μ² μ ν νμΈνλ€.
νμ μκ±°μ μ₯μ κ³Ό λ¨μ
μ₯μ
- μ λ€λ¦μ μ¬μ©νλ©΄ νμ μμ μ±μ μ μ§νλ©΄μ μ½λ μ¬μ¬μ©μ±μ λμΌ μ μλ€.
- νμ μκ±°λ‘ μΈν΄ μ»΄νμΌλ λ°μ΄νΈμ½λκ° λ κ°λ¨νκ³ λ μμμ§ μ μλ€.
λ¨μ
- λ°νμμλ μ λ€λ¦ νμ μ λ³΄κ° μ¬λΌμ§κΈ° λλ¬Έμ, νΉμ μν©μμλ νμ μμ μ±μ 보μ₯νμ§ λͺ»ν μ μλ€.
- μ λ€λ¦ νμ μ λ°°μ΄ μμ±μ΄ λΆκ°λ₯νκ³ , μ λ€λ¦ λ©μλ μ€λ²λ‘λ©λ μ νλλ€.