T[]λ μ λ€λ¦ λ°°μ΄(Generic Array)μ μλ―Ένλ©°, Javaμμ μ λ€λ¦ νμ
λ§€κ°λ³μλ₯Ό μ¬μ©ν λ°°μ΄μ λνλ
λλ€. μ¬κΈ°μ Tλ μ λ€λ¦ νμ
λ§€κ°λ³μλ₯Ό λνλ΄λ©°, νΉμ νμ
μΌλ‘ λ°μΈλ©λ μ μμ΅λλ€. μ΄ λ°°μ΄μ μ λ€λ¦ νμ
μ μμλ€μ λ΄μ μ μλλ‘ μ€κ³λ λ°°μ΄μ
λλ€.
Tλ μ λ€λ¦ νμ λ§€κ°λ³μλ‘, μΌλ°μ μΌλ‘ μ΄λ€ νμ μ΄λ μ¬μ©μκ° μνλ νμ μ μλ―Έν©λλ€.- μ λ€λ¦ ν΄λμ€λ λ©μλμμ νμ λ§€κ°λ³μλ‘ μ¬μ©λλ©°, μ΄ νμ λ§€κ°λ³μλ μ»΄νμΌ μμ μ μ€μ νμ μΌλ‘ λ체λ©λλ€.
μλ₯Ό λ€μ΄, μ λ€λ¦ λ©μλμ μ μΈμμ Tλ νΉμ νμ
μ μλ―Έν μ μμ΅λλ€.
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}μ μ½λμμ <T>λ λ©μλμ νμ
λ§€κ°λ³μλ₯Ό λνλ΄λ©°, T[]λ ν΄λΉ νμ
μ μμλ‘ κ°μ§λ λ°°μ΄μ
λλ€.
T[]λ μ λ€λ¦ νμ μ μμλ€μ μ μ₯ν μ μλ λ°°μ΄μ μλ―Έν©λλ€. μλ₯Ό λ€μ΄,Tκ°StringμΌλ‘ λ체λλ©΄,T[]λString[]λ°°μ΄μ΄ λ©λλ€.T[]λ°°μ΄μTνμ μ μμλ§ μ μ₯ν μ μμΌλ©°, μ λ€λ¦μ νμ μμ μ±μ 보μ₯ν©λλ€.
Javaμμλ μ λ€λ¦ λ°°μ΄μ μ§μ μ μΈ μμ±μ΄ νμ©λμ§ μμ΅λλ€. μλ₯Ό λ€μ΄, new T[10]κ³Ό κ°μ λ°°μ΄ μμ±μ μ»΄νμΌ μ€λ₯κ° λ°μν©λλ€. μ΄λ μ λ€λ¦ νμ
μ μ λ³΄κ° λ°νμμ μκ±°λκΈ° λλ¬Έμ, λ°°μ΄μ νμ
μμ μ±μ 보μ₯ν μ μκΈ° λλ¬Έμ
λλ€.
public <T> T[] createArray(int size) {
// μ»΄νμΌ μ€λ₯ λ°μ: μ λ€λ¦ νμ
Tλ‘ λ°°μ΄μ μμ±ν μ μμ
// T[] array = new T[size];
// λμ Object λ°°μ΄μ μμ±ν ν T[]λ‘ νλ³ννλ λ°©μ μ¬μ©
@SuppressWarnings("unchecked")
T[] array = (T[]) new Object[size];
return array;
}μ μ½λμμ μ λ€λ¦ νμ
μΌλ‘ λ°°μ΄μ μμ±νλ λμ , Object λ°°μ΄μ μμ±ν ν T[]λ‘ νλ³ννμ¬ λ°°μ΄μ μμ±ν©λλ€. μ΄λ @SuppressWarnings("unchecked") μ λν
μ΄μ
μ μ¬μ©ν΄ λΉκ²μ¬ νλ³ν κ²½κ³ λ₯Ό μ΅μ ν μ μμ΅λλ€.
λ€μμ μ λ€λ¦ λ°°μ΄μ μ¬μ©ν μμ λλ€.
public class GenericArrayExample<T> {
private T[] array;
public GenericArrayExample(int size) {
// μ λ€λ¦ λ°°μ΄μ μμ±ν λ Object λ°°μ΄μ μ¬μ©νκ³ νλ³ν
@SuppressWarnings("unchecked")
array = (T[]) new Object[size];
}
public void set(int index, T value) {
array[index] = value;
}
public T get(int index) {
return array[index];
}
public static void main(String[] args) {
GenericArrayExample<String> stringArray = new GenericArrayExample<>(10);
stringArray.set(0, "Hello");
System.out.println(stringArray.get(0)); // μΆλ ₯: Hello
}
}μ μμ μμ GenericArrayExample ν΄λμ€λ μ λ€λ¦ νμ
Tλ₯Ό μ¬μ©νμ¬ λ°°μ΄μ μμ±νκ³ , λ°°μ΄μ μμλ₯Ό μ½κ±°λ μΈ μ μμ΅λλ€.
- μ§μ μ μΈ μ λ€λ¦ λ°°μ΄ μμ±μ λΆκ°λ₯:
new T[10]κ³Ό κ°μ ꡬ문μ νμ©λμ§ μμΌλ©°, λμObjectλ°°μ΄μ μμ±ν ν νλ³νν΄μΌ ν©λλ€.
- νμ
μμ μ±μ μν΄ λΉκ²μ¬ νλ³ν κ²½κ³ μ΅μ νμ:
Object[]μμT[]λ‘ νλ³νν λ@SuppressWarnings("unchecked")λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
- λ°νμ μ νμ
μ 보 μκ±°:
- μ λ€λ¦ λ°°μ΄μ νμ μ 보λ₯Ό λ°νμμ μ μ§νμ§ μκΈ° λλ¬Έμ, λ°°μ΄μ νμ μμ μ±μ μ»΄νμΌ μμ μ 보μ₯ν΄μΌ ν©λλ€.
T[]λ μ λ€λ¦ νμ λ§€κ°λ³μTλ₯Ό μμλ‘ κ°μ§λ λ°°μ΄μ μλ―Ένλ©°, μ»΄νμΌ μμ μ νΉμ νμ μΌλ‘ λ체λ©λλ€.- μ λ€λ¦ λ°°μ΄μ μ§μ μμ±ν μ μμΌλ―λ‘,
Objectλ°°μ΄μ μμ±ν ν νλ³νμ ν΅ν΄ μ λ€λ¦ λ°°μ΄μ μ¬μ©ν©λλ€. - μ λ€λ¦ λ°°μ΄μ μ¬μ©ν λλ λΉκ²μ¬ νλ³ν κ²½κ³ λ₯Ό μ΅μ νκ³ , νμ μμ μ±μ 보μ₯ν μ μλ μ½λλ₯Ό μμ±ν΄μΌ ν©λλ€.
μ λ€λ¦ λ°°μ΄μ Javaμμ μ λ€λ¦μ νμ μμ μ±μ μ μ§νλ©΄μ λ°°μ΄μ μ¬μ©ν μ μκ² ν΄μ£Όλ μ€μν κΈ°λ₯μ λλ€.