JAVA

JAVA | 12. 제네릭

TECH 톡마스터 2023. 6. 11.

JAVA | 12. 제네릭
12. 제네릭

  안녕하세요! 이번에는 자바의 제네릭(Generic)에 대해 알아보겠습니다. 제네릭은 자바에서 컴파일 시 타입을 체크하여 타입 안정성을 확보하기 위한 기능입니다. 이를 활용하면 타입 변환에 따른 오류를 줄이고 재사용성을 높일 수 있습니다. 이번에는 제네릭의 개념과 제네릭 클래스, 제네릭 메서드, 제한된 제네릭 클래스, 와일드카드에 대해 알아보겠습니다.

 

12.1 제네릭의 개념

제네릭은 클래스나 메서드를 선언할 때 사용할 타입을 미리 지정하지 않고, 사용하는 시점에서 구체적인 타입을 지정할 수 있도록 합니다. 이를 통해 재사용성을 높이고 타입 안정성을 확보할 수 있습니다.

 

12.2 제네릭 클래스

제네릭 클래스는 클래스 선언 시 타입 매개변수를 사용하여 클래스 내부에서 사용할 타입을 지정할 수 있습니다. 타입 매개변수는 클래스 이름 뒤에 "<>" 기호를 사용하여 선언합니다.

아래는 제네릭 클래스의 예제 코드입니다.

public class Box<T> {
    private T item;

    public void setItem(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }
}

public class GenericClassExample {
    public static void main(String[] args) {
        Box<String> box1 = new Box<>();
        box1.setItem("Apple");
        String item1 = box1.getItem();

        Box<Integer> box2 = new Box<>();
        box2.setItem(123);
        int item2 = box2.getItem();
    }
}

12.3 제네릭 메서드

제네릭 메서드는 메서드 선언 시 매개변수나 반환 타입에 제네릭 타입을 사용하는 메서드를 말합니다. 제네릭 메서드는 메서드 이름 앞에 "<>" 기호를 사용하여 제네릭 타입을 선언합니다.

아래는 제네릭 메서드의 예제 코드입니다.

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

    public static void main(String[] args) {
        Integer[] integers = {1, 2, 3, 4, 5};
        String[] strings = {"Apple", "Banana", "Cherry"};

        printArray(integers);
        printArray(strings);
    }
}

12.4 제한된 제네릭 클래스

제한된 제네릭 클래스는 특정한 타입으로 제한하여 사용하는 제네릭 클래스입니다. 제한된 제네릭 클래스는 extends 키워드를 사용하여 특정 클래스나 인터페이스를 상속 또는 구현하도록 제한할 수 있습니다.

아래는 제한된 제네릭 클래스의 예제 코드입니다.

public class GenericClassExample<T extends Number> {
    private T value;

    public GenericClassExample(T value) {
        this.value = value;
    }

    public double square() {
        return value.doubleValue() * value.doubleValue();
    }

    public static void main(String[] args) {
        GenericClassExample<Integer> integerExample = new GenericClassExample<>(5);
        System.out.println(integerExample.square());

        // 아래의 코드는 컴파일 오류가 발생합니다.
        // GenericClassExample<String> stringExample = new GenericClassExample<>("Hello");
    }
}

12.5 와일드카드

와일드카드는 제네릭 타입 매개변수에 다양한 타입을 지정할 수 있도록 도와줍니다. "?" 기호를 사용하여 특정 타입 대신 와일드카드를 사용할 수 있습니다. 와일드카드는 extends 또는 super 키워드와 함께 사용하여 상한 제한이나 하한 제한을 설정할 수 있습니다.

와일드카드의 사용 예시는 다음과 같습니다.

public class WildcardExample {
    public static void printList(List<?> list) {
        for (Object element : list) {
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
        List<String> strings = Arrays.asList("Apple", "Banana", "Cherry");

        printList(integers);
        printList(strings);
    }
}

 

이상으로 자바의 제네릭 개념과 활용에 대해 알아보았습니다. 제네릭을 사용하여 타입 안정성을 확보하고 재사용성을 높여보세요. 감사합니다!

'JAVA' 카테고리의 다른 글

JAVA | 14. GUI 프로그래밍  (0) 2023.06.12
JAVA | 13. 람다식과 스트림  (0) 2023.06.11
JAVA | 11. 컬렉션 프레임워크  (0) 2023.06.11
JAVA | 10. 스레드  (0) 2023.06.10
JAVA | 9. 입출력  (0) 2023.06.10

댓글

💲 추천 글