[java] 자바의 제네릭 데이터 타입

자바에서는 제네릭(generic) 데이터 타입을 사용하여 코드의 재사용성과 안정성을 높일 수 있습니다. 제네릭은 클래스나 메서드를 일반화하여 다양한 타입의 객체를 처리할 수 있는 기능을 제공합니다. 이를 통해 컴파일 시 타입 체크를 할 수 있고, 형변환을 줄여 코드를 보다 간결하고 안전하게 작성할 수 있습니다.

제네릭 클래스

자바에서 제네릭을 사용하는 가장 일반적인 방법은 제네릭 클래스를 정의하는 것입니다. 제네릭 클래스는 타입 매개변수(type parameter)를 사용하여 클래스 내부에서 사용할 타입을 지정합니다. 예를 들어, List 클래스를 제네릭으로 정의하려면 다음과 같이 작성할 수 있습니다.

public class List<T> {
    private T[] elements;
    
    public List(int size) {
        this.elements = (T[]) new Object[size];
    }
    
    public void add(T item) {
        // 요소를 추가하는 로직
    }
    
    public T get(int index) {
        // 인덱스에 해당하는 요소를 반환하는 로직
    }
}

위의 예제에서 T는 타입 매개변수로, List 클래스를 사용할 때 실제 타입으로 채워질 것입니다. 예를 들어, List<String>은 문자열을 다루는 리스트를 생성할 수 있습니다.

제네릭 메서드

제네릭 클래스와 마찬가지로, 제네릭 메서드도 타입 매개변수를 사용하여 다양한 타입의 객체를 처리할 수 있습니다. 제네릭 메서드는 메서드의 반환 타입 앞에 <T>와 같은 형태로 타입 매개변수를 선언합니다.

public class Utils {
    public static <T> T getLastElement(List<T> list) {
        return list.get(list.size() - 1);
    }
}

위의 예제에서 Utils.getLastElement() 메서드는 List 객체를 인자로 받고, 해당 리스트의 마지막 요소를 반환합니다. Utils.getLastElement() 메서드를 호출할 때 타입 매개변수를 명시하지 않아도 컴파일러가 타입을 추론하여 처리합니다.

제네릭의 이점

제네릭을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

결론

제네릭은 자바에서 다양한 타입의 객체를 처리하는 유연하고 안전한 방법을 제공합니다. 제네릭 클래스와 제네릭 메서드를 적절히 활용하여 재사용성과 코드의 안정성을 높일 수 있습니다.


참고자료: