μΆμ²
ChatGPT
μ λ€λ¦ Generics
κ°μ
μ λ€λ¦μ ν΄λμ€ μΈν°νμ΄μ€, λ©μλμμ μ¬μ©ν λ°μ΄ν° νμ μ μΌλ°ννμ¬ μ μΈ μμ μ ꡬ체μ μΈ νμ μ μ§μ ν μ μλλ‘ νλ μλ°μ κΈ°λ₯. μ λ€λ¦μ μ¬μ©νλ©΄ μ»΄νμΌλ¬κ° νμ μ 체ν¬νλ―λ‘, μλͺ»λ νμ μ μ¬μ©νλ μ€λ₯λ₯Ό μ€μ΄κ³ νμ μμ μ±μ λμΌ μ μλ€.
μ₯μ
1. νμ μμ μ± Type Safety
μ λ€λ¦μ μ¬μ©νλ©΄ μ»΄νμΌ μμ μ νμ 체ν¬κ° μ΄λ£¨μ΄μ Έ μλͺ»λ νμ μ΄ λ€μ΄κ°λ κ²μ λ°©μ§ν μ μλ€.
2. μ½λ μ¬μ¬μ©μ±
νλμ ν΄λμ€λ λ©μλλ‘ λ€μν λ°μ΄ν° νμ μ μ²λ¦¬ν μ μμ΄ μ½λ μ€λ³΅μ μ€μΌ μ μλ€.
3. λͺ νν μ½λ
νμ μΊμ€ν μ΄ λΆνμν΄μ Έμ μ½λκ° κ°κ²°νκ³ μ½κΈ° μ¬μμ§λ€.
κΈ°λ³Έ λ¬Έλ²
// μ λ€λ¦ ν΄λμ€ μ μΈ
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
// μ λ€λ¦ μ¬μ© μμ
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
String message = stringBox.getItem(); // μΊμ€ν
λΆνμ
μ λ€λ¦ λ©μλ
μ λ€λ¦ λ©μλλ λ©μλ λ 벨μμ νμ μ 맀κ°λ³μλ‘ μ¬μ©νλ λ°©λ². λ©μλκ° νΈμΆλ λ νμ μ΄ κ²°μ λλ€.
// μ λ€λ¦ λ©μλ μ μΈ
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
// μ λ€λ¦ λ©μλ μ¬μ© μμ
Integer[] intArray = {1, 2, 3};
String[] strArray = {"A", "B", "C"};
printArray(intArray); // Integer λ°°μ΄μ μΆλ ₯
printArray(strArray); // String λ°°μ΄μ μΆλ ₯
// μ λ€λ¦ λ©μλ μ μΈ
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
// μ λ€λ¦ λ©μλ μ¬μ© μμ
Integer[] intArray = {1, 2, 3};
String[] strArray = {"A", "B", "C"};
printArray(intArray); // Integer λ°°μ΄μ μΆλ ₯
printArray(strArray); // String λ°°μ΄μ μΆλ ₯
μμΌλ μΉ΄λ Wildcards
κ°μ
μμΌλμΉ΄λλ μ λ€λ¦ νμ μ κ²½κ³λ₯Ό μ μνλ λ° μ¬μ©λλ©°, μ λ€λ¦ ν΄λμ€λ λ©μλκ° λ€λ£° μ μλ νμ μ λ²μλ₯Ό νμ₯νκ±°λ μ ννλ€. μ£Όλ‘ λΆνΉμ ν νμ μ μ²λ¦¬ν λ μ¬μ©λλ€.
μμΌλμΉ΄λμ μ’ λ₯
1. μΈλ°μ΄λ μμΌλ μΉ΄λ '?'
- '<?>'λ νΉμ νμ μ μ νμ΄ μλ κ²½μ°μ μ¬μ©λλ€.
- μ½κΈ° μ μ©: μμΌλμΉ΄λλ₯Ό μ¬μ©νλ©΄ 컬λ μ μ λ°μ΄ν°λ₯Ό μΆκ°νλ κ²μ΄ μ νλ μ μλ€.
2. μν κ²½κ³ μμΌλμΉ΄λ '? extends T'
- '<? extends T>'λ μμΌλμΉ΄λ νμ μ΄ T ν΄λμ€μ μλΈν΄λμ€μ΄κ±°λ T μ체λ₯Ό κ°λ¦¬ν¨λ€.
- μ½κΈ° μ μ© : 컬λ μ μμ λ°μ΄ν°λ₯Ό μ½μ μ μμ§λ§, μΆκ°νλ κ²μ μ νλλ€.
3. νν κ²½κ³ μμΌλμΉ΄λ '? super T'
- '<? super T>'λ μμΌλμΉ΄λ νμ μ΄ T ν΄λμ€μ μνΌν΄λμ€μ΄κ±°λ T μ체λ₯Ό κ°λ¦¬ν¨λ€.
- μ°κΈ° κ°λ₯ : 컬λ μ μ΄ λ°μ΄ν°λ₯Ό μΆκ°ν μ μλ€.
μ¬μ© μμ
import java.util.List;
public class WildcardExample {
// μΈλ°μ΄λ μμΌλμΉ΄λ μ¬μ©
public static void printList(List<?> list) {
for (Object element : list) {
System.out.println(element);
}
}
// μν κ²½κ³ μμΌλμΉ΄λ μ¬μ©
public static double sumNumbers(List<? extends Number> list) {
double sum = 0;
for (Number number : list) {
sum += number.doubleValue();
}
return sum;
}
// νν κ²½κ³ μμΌλμΉ΄λ μ¬μ©
public static void addNumbers(List<? super Integer> list) {
list.add(10);
list.add(20);
}
}
μ¬μ© μμ μ€λͺ
- μΈλ°μ΄λ μμΌλμΉ΄λ : 'printList' λ©μλλ λͺ¨λ νμ μ 리μ€νΈλ₯Ό λ°μ μΆλ ₯νλ€.
List<String> stringList = Arrays.asList("A", "B", "C");
WildcardExample.printList(stringList);
- μν κ²½κ³ μμΌλμΉ΄λ : 'sumNumbers' λ©μλλ 'Number'μ νμ ν΄λμ€(μ: 'Integer', 'Double')μ 리μ€νΈλ₯Ό λ°μ ν©κ³λ₯Ό κ³μ°νλ€.
List<Integer> intList = Arrays.asList(1, 2, 3);
double sum = WildcardExample.sumNumbers(intList);
System.out.println("Sum: " + sum);
- νν κ²½κ³ μμΌλμΉ΄λ : 'addNumbers' λ©μλλ 'Integer'μ μνΌν΄λμ€(μ: 'Number', 'Object')μ 리μ€νΈμ κ°μ μΆκ°νλ€.
List<Number> numberList = new ArrayList<>();
WildcardExample.addNumbers(numberList);
System.out.println(numberList); // [10, 20]
μ λ€λ¦κ³Ό μμΌλμΉ΄λμ μ°¨μ΄μ
νΉμ§ | μ λ€λ¦ | μμΌλμΉ΄λ |
νμ μ μ | λͺ νν νμ μ μ μΈνλ©°, νΉμ νμ μΌλ‘ μ ννλ€. | νΉμ νμ μ κ²½κ³λ₯Ό μ μ°νκ² μ§μ ν μ μλ€. |
μ ν | <T>: νΉμ νμ μ λͺ μμ μΌλ‘ μ μ | <?> : λΆνΉμ νμ
<? extends T> μν κ²½κ³ <? super T> : νν κ²½κ³ |
μ¬μ© λͺ©μ | νμ μ λͺ ννκ² μ μνμ¬ μ½λμ μμ μ±μ λμΈλ€. | μ¬λ¬ νμ μ νμ©νκ±°λ νμ μ λ²μλ₯Ό νμ₯ν λ μ¬μ©νλ€. |
μ μ°μ± | λ μ μ°νλ€. ꡬ체μ μΈ νμ μ 미리 μ μν΄μΌ νλ€. | λ μ μ°νλ€. λ€μν νμ μ μμ©ν μ μλ€. |
μ½κΈ°/μ°κΈ° | μ λ€λ¦ νμ μ λ°λΌ μ½κΈ°μ μ°κΈ°κ° λͺ¨λ κ°λ₯νλ€ | μμΌλμΉ΄λμ λ°λΌ μ½κΈ°μ μ°κΈ°κ° μ νλ μ μλ€. |
μ€μ©μ μΈ μ¬μ© μ
μ λ€λ¦μ μ¬μ©νλ μ΄μ
μ λ€λ¦μ κ°λ ₯ν νμ 체ν¬μ μ½λμ λͺ νμ±μ μ 곡νλ€. μλ₯Ό λ€μ΄, 리μ€νΈμ λͺ¨λ μμκ° νΉμ νμ μμ 보μ₯ν μ μλ€.
List<String> strings = new ArrayList<>();
strings.add("Hello");
strings.add("World");
// νμ
λΆμΌμΉ μ€λ₯ λ°©μ§
// strings.add(10); // μ»΄νμΌ μ€λ₯ λ°μ
μμΌλμΉ΄λλ₯Ό μ¬μ©νλ μ΄μ
μμΌλμΉ΄λλ λ€μν νμ μ μμ©ν λ μ μ©νλ€. μλ₯Ό λ€μ΄, λ€νμ±μ μ§μνλ λ©μλλ₯Ό μμ±ν λ μ¬μ©λλ€.
public static void printCollection(Collection<?> collection) {
for (Object element : collection) {
System.out.println(element);
}
}
List<Integer> integers = Arrays.asList(1, 2, 3);
List<String> strings = Arrays.asList("A", "B", "C");
printCollection(integers);
printCollection(strings);
μν κ²½κ³ μμΌλμΉ΄λμ νν κ²½κ³ μμΌλμΉ΄λμ νμ©
- μν κ²½κ³ : λΆλ³μ κ²½μ°μ μ¬μ©νμ¬ μ½κΈ° μ μ©μΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ€.
public static void processNumbers(List<? extends Number> numbers) {
for (Number num : numbers) {
System.out.println(num);
}
}
List<Double> doubles = Arrays.asList(1.1, 2.2, 3.3);
processNumbers(doubles); // Double νμ
λ νμ©
- νν κ²½κ³ : κ°λ³μ κ²½μ°μ μ¬μ©νμ¬ μμ νκ² λ°μ΄ν°λ₯Ό μΆκ°ν μ μλ€.
public static void addIntegers(List<? super Integer> list) {
list.add(1);
list.add(2);
}
List<Number> numbers = new ArrayList<>();
addIntegers(numbers);
System.out.println(numbers); // [1, 2]
μ λ€λ¦κ³Ό μμΌλμΉ΄λμ μ μ½ μ¬ν
1. μ λ€λ¦ νμ μ μΈμ€ν΄μ€ν
μ λ€λ¦ νμ μΌλ‘ μ§μ μΈμ€ν΄μ€νν μ μλ€. μλ₯Ό λ€μ΄, 'T obj = new T();' λ νμ©λμ§ μλλ€.
2. κΈ°λ³Έ νμ μ¬μ© λΆκ°
μ λ€λ¦μ κΈ°λ³Έ λ°μ΄ν° νμ ('int', 'char', 'double' λ±)μ μ¬μ©ν μ μλ€. λμ , λνΌ ν΄λμ€('Integer', 'Character', 'Double'λ±)λ₯Ό μ¬μ©ν΄μΌ νλ€.
3. μ€νν± μ»¨ν μ€νΈμμμ μ λ€λ¦ μ¬μ©
μ λ€λ¦ νμ μ μ€νν± μ»¨ν μ€νΈμμ μ¬μ©λ μ μλ€. μ€νν± νλλ λ©μλμμ μ λ€λ¦ νμ 맀κ°λ³μλ₯Ό μ¬μ©ν μ μλ€.
4. μλ° νμ μκ±° Type Erasure
μλ°μ μ λ€λ¦μ μ»΄νμΌ νμμ νμ 체ν¬λ₯Ό μννκ³ , λ°νμμλ νμ μ λ³΄κ° μ κ±°λλ€. μ΄λ μΌλΆ μν©μμ νμ μΊμ€ν μ€λ₯λ₯Ό λ°μμν¬ μ μλ€.
5. λ°°μ΄κ³Ό μ λ€λ¦
μ λ€λ¦ νμ μ λ°°μ΄μ μμ±ν μ μλ€. μλ₯Ό λ€μ΄, 'T[] array = new T[10];'λ νμ©λμ§ μλλ€.
6. μν κ²½κ³ μμΌλμΉ΄λμ λ©μλ μ€λ²λ‘λ©μ μ ν
μμΌλμΉ΄λλ₯Ό μ¬μ©ν λ©μλ μ€λ²λ‘λ©μ νΌλμ μ΄λν μ μμΌλ―λ‘ νΌν΄μΌ νλ€.
public void doSomething(List<? extends Number> list) { ... }
public void doSomething(List<Integer> list) { ... } // λͺ¨νΈν νΈμΆ λ°μ κ°λ₯
κ²°λ‘
μ λ€λ¦κ³Ό μμΌλμΉ΄λλ μλ°μ νμ μμ μ±μ 보μ₯νκ³ μ½λμ μ¬μ¬μ©μ±μ λμ΄λ μ€μν λꡬμ΄λ€. μ λ€λ¦μ νμ μ λͺ ννκ² μ μνμ¬ νμ μμ μ±μ λμ΄κ³ , μμΌλμΉ΄λλ μ μ°μ±μ μ 곡νμ¬ λ€μν νμ μ μ²λ¦¬ν μ μλλ‘ νλ€. μ λ€λ¦κ³Ό μμΌλμΉ΄λμ μ΄ν΄λ μλ° νλ‘κ·Έλλ°μμ μμ νκ³ ν¨μ¨μ μΈ μ½λλ₯Ό μμ±νλ λ° νμμ μ΄λ€. μ΄λ₯Ό ν΅ν΄ νμ μ€λ₯λ₯Ό μ¬μ μ λ°©μ§νκ³ , λ³΄λ€ μ½κΈ° μ½κ³ μ μ§λ³΄μνκΈ° μ¬μ΄ μ½λλ₯Ό μμ±ν μ μλ€.