Generic

최인효·2023년 5월 2일
0

java

목록 보기
1/3
post-thumbnail

Java에서 제네릭(Generic)은 클래스나 메소드에서 사용할 타입을 나중에 지정할 수 있도록 하는 기능입니다. 제네릭을 사용하면 클래스나 메소드가 여러 종류의 타입에 대해 동작할 수 있어 코드의 재사용성을 높일 수 있습니다.

아래는 Java에서 제네릭을 사용하는 예시입니다.

public class Box<T> {
    private T data;

    public void setData(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }
}

public class Main {
    public static void main(String[] args) {
        Box<String> stringBox = new Box<>();
        stringBox.setData("hello");

        Box<Integer> intBox = new Box<>();
        intBox.setData(123);

        String str = stringBox.getData(); // "hello"
        int num = intBox.getData(); // 123
    }
}

위 예시에서는 제네릭 클래스인 Box를 선언하고, 데이터를 저장하는 data 필드와 데이터를 설정하는 setData() 메소드, 데이터를 반환하는 getData() 메소드를 정의합니다. 제네릭 타입 T는 Box 클래스를 생성할 때 실제 타입으로 대체됩니다.

main() 메소드에서는 String 타입과 Integer 타입의 Box를 생성하고, setData() 메소드를 통해 데이터를 설정합니다. getData() 메소드를 통해 데이터를 가져올 때는 해당 타입으로 반환됩니다.

위와 같이 제네릭을 사용하면, Box 클래스가 다양한 타입의 데이터를 다룰 수 있기 때문에 코드의 재사용성이 높아지며, 타입 안정성(type safety)도 보장할 수 있습니다.


Java에서는 클래스뿐만 아니라 메소드도 제네릭으로 만들 수 있습니다. 메소드에 제네릭을 적용하면 해당 메소드에서 사용하는 타입을 미리 정하지 않고, 메소드를 호출할 때 타입을 지정할 수 있습니다. 이를 통해 메소드에서 다양한 타입의 객체를 처리할 수 있습니다.

아래는 Java에서 제네릭 메소드를 사용하는 예시입니다.

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

    public static void main(String[] args) {
        Integer[] intArr = {1, 2, 3};
        Double[] doubleArr = {1.0, 2.0, 3.0};
        String[] stringArr = {"one", "two", "three"};

        printArray(intArr);
        printArray(doubleArr);
        printArray(stringArr);
    }
}

위 예시에서는 제네릭 메소드인 printArray()를 선언하고, T 타입의 배열을 인자로 받아 배열 요소를 출력합니다. 메소드 선언에서 <T>는 T가 제네릭 타입임을 나타내며, 메소드 실행 시 실제 타입으로 대체됩니다.

main() 메소드에서는 각각 Integer, Double, String 타입의 배열을 생성하고, printArray() 메소드를 호출합니다. 인자로 넘긴 배열의 타입에 따라 T 타입이 결정되며, 배열 요소가 출력됩니다.

제네릭 메소드를 사용하면, 해당 메소드에서 처리하는 객체의 타입을 지정하지 않아도 되기 때문에 메소드의 재사용성이 높아지며, 타입 안정성도 보장할 수 있습니다.


<>안에 사용되는 T, E, K, V는 Java에서 제네릭 타입 파라미터 이름으로 주로 사용되는 관례적인 식별자입니다. 이들은 보통 아래와 같은 의미를 가지고 사용됩니다.

  • T : Type을 의미합니다. 보통 클래스나 메소드의 반환 타입이나 매개변수 타입으로 사용됩니다.
  • E : Element를 의미합니다. 보통 컬렉션 클래스의 요소 타입으로 사용됩니다.
  • K : Key를 의미합니다. 보통 맵(Map)에서 키(key) 타입으로 사용됩니다.
  • V : Value를 의미합니다. 보통 맵(Map)에서 값(value) 타입으로 사용됩니다.
    하지만, 이들은 단지 관례일 뿐이며, 실제로 사용되는 식별자는 프로그래머가 자유롭게 지정할 수 있습니다. 또한, 이 외에도 프로그래머가 의미를 명확하게 표현할 수 있는 다른 식별자를 사용해도 됩니다.

0개의 댓글