Skip to content

Latest commit

Β 

History

History
92 lines (66 loc) Β· 4.49 KB

File metadata and controls

92 lines (66 loc) Β· 4.49 KB

μ œλ„€λ¦­ 배열에 λŒ€ν•œ 정리

T[]λŠ” μ œλ„€λ¦­ λ°°μ—΄(Generic Array)을 μ˜λ―Έν•˜λ©°, Javaμ—μ„œ μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•œ 배열을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ—¬κΈ°μ„œ TλŠ” μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό λ‚˜νƒ€λ‚΄λ©°, νŠΉμ • νƒ€μž…μœΌλ‘œ 바인딩될 수 μžˆμŠ΅λ‹ˆλ‹€. 이 배열은 μ œλ„€λ¦­ νƒ€μž…μ˜ μš”μ†Œλ“€μ„ 담을 수 μžˆλ„λ‘ μ„€κ³„λœ λ°°μ—΄μž…λ‹ˆλ‹€.

1. μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜ T

  • TλŠ” μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ, 일반적으둜 μ–΄λ–€ νƒ€μž…μ΄λ“  μ‚¬μš©μžκ°€ μ›ν•˜λŠ” νƒ€μž…μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • μ œλ„€λ¦­ ν΄λž˜μŠ€λ‚˜ λ©”μ„œλ“œμ—μ„œ νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©λ˜λ©°, 이 νƒ€μž… λ§€κ°œλ³€μˆ˜λŠ” 컴파일 μ‹œμ μ— μ‹€μ œ νƒ€μž…μœΌλ‘œ λŒ€μ²΄λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ œλ„€λ¦­ λ©”μ„œλ“œμ˜ μ„ μ–Έμ—μ„œ TλŠ” νŠΉμ • νƒ€μž…μ„ μ˜λ―Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

public <T> void printArray(T[] array) {
    for (T element : array) {
        System.out.println(element);
    }
}

μœ„ μ½”λ“œμ—μ„œ <T>λŠ” λ©”μ„œλ“œμ˜ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό λ‚˜νƒ€λ‚΄λ©°, T[]λŠ” ν•΄λ‹Ή νƒ€μž…μ„ μš”μ†Œλ‘œ κ°€μ§€λŠ” λ°°μ—΄μž…λ‹ˆλ‹€.

2. T[]의 의미

  • T[]λŠ” μ œλ„€λ¦­ νƒ€μž…μ˜ μš”μ†Œλ“€μ„ μ €μž₯ν•  수 μžˆλŠ” 배열을 μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Tκ°€ String으둜 λŒ€μ²΄λ˜λ©΄, T[]λŠ” String[] 배열이 λ©λ‹ˆλ‹€.
  • T[] 배열은 T νƒ€μž…μ˜ μš”μ†Œλ§Œ μ €μž₯ν•  수 있으며, μ œλ„€λ¦­μ˜ νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€.

3. μ œλ„€λ¦­ λ°°μ—΄ μƒμ„±μ˜ μ œν•œ

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") μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ 비검사 ν˜•λ³€ν™˜ κ²½κ³ λ₯Ό μ–΅μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. μ œλ„€λ¦­ λ°°μ—΄ μ‚¬μš© 예

λ‹€μŒμ€ μ œλ„€λ¦­ 배열을 μ‚¬μš©ν•œ μ˜ˆμž…λ‹ˆλ‹€.

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λ₯Ό μ‚¬μš©ν•˜μ—¬ 배열을 μƒμ„±ν•˜κ³ , λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ½κ±°λ‚˜ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

5. μ œλ„€λ¦­ λ°°μ—΄μ˜ 주의점

  1. 직접적인 μ œλ„€λ¦­ λ°°μ—΄ 생성은 λΆˆκ°€λŠ₯:
    • new T[10]κ³Ό 같은 ꡬ문은 ν—ˆμš©λ˜μ§€ μ•ŠμœΌλ©°, λŒ€μ‹  Object 배열을 μƒμ„±ν•œ ν›„ ν˜•λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. νƒ€μž… μ•ˆμ „μ„±μ„ μœ„ν•΄ 비검사 ν˜•λ³€ν™˜ κ²½κ³  μ–΅μ œ ν•„μš”:
    • Object[]μ—μ„œ T[]둜 ν˜•λ³€ν™˜ν•  λ•Œ @SuppressWarnings("unchecked")λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  3. λŸ°νƒ€μž„ μ‹œ νƒ€μž… 정보 μ†Œκ±°:
    • μ œλ„€λ¦­ 배열은 νƒ€μž… 정보λ₯Ό λŸ°νƒ€μž„μ— μœ μ§€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ°°μ—΄μ˜ νƒ€μž… μ•ˆμ „μ„±μ„ 컴파일 μ‹œμ μ— 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

6. 정리

  • T[]λŠ” μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜ Tλ₯Ό μš”μ†Œλ‘œ κ°€μ§€λŠ” 배열을 μ˜λ―Έν•˜λ©°, 컴파일 μ‹œμ μ— νŠΉμ • νƒ€μž…μœΌλ‘œ λŒ€μ²΄λ©λ‹ˆλ‹€.
  • μ œλ„€λ¦­ 배열은 직접 생성할 수 μ—†μœΌλ―€λ‘œ, Object 배열을 μƒμ„±ν•œ ν›„ ν˜•λ³€ν™˜μ„ 톡해 μ œλ„€λ¦­ 배열을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μ œλ„€λ¦­ 배열을 μ‚¬μš©ν•  λ•ŒλŠ” 비검사 ν˜•λ³€ν™˜ κ²½κ³ λ₯Ό μ–΅μ œν•˜κ³ , νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ œλ„€λ¦­ 배열은 Javaμ—μ„œ μ œλ„€λ¦­μ˜ νƒ€μž… μ•ˆμ „μ„±μ„ μœ μ§€ν•˜λ©΄μ„œ 배열을 μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” μ€‘μš”ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.