[java] 제네릭

제네릭은 자바에서 타입 안정성을 제공하고, 재사용성을 높이기 위해 도입된 기능입니다. 제네릭을 사용하면 컴파일 시에 타입 체크를 할 수 있고, 타입 변환에 따른 오류를 방지할 수 있습니다.

제네릭 사용법

제네릭은 클래스, 인터페이스, 메서드를 정의할 때 사용할 수 있습니다. 아래는 간단한 제네릭 클래스의 예시입니다.

public class Box<T> {
    private T value;
    
    public void setValue(T value) {
        this.value = value;
    }
    
    public T getValue() {
        return value;
    }
}

위의 코드에서 T는 타입 파라미터로, Box 클래스를 생성할 때 실제 타입으로 대체됩니다. 예를 들어 Box은 문자열을 저장하는 Box타입이 됩니다.

제네릭 메서드

메서드에서 제네릭을 사용할 수도 있습니다. 제네릭 메서드를 정의할 때는 리턴 타입 앞에 타입 파라미터를 추가하면 됩니다. 아래는 예시입니다.

public class Box<T> {
    private T value;
    
    public void setValue(T value) {
        this.value = value;
    }
    
    public T getValue() {
        return value;
    }
    
    public <U> void printValue(U value) {
        System.out.println(value);
    }
}

위의 코드에서 printValue 메서드는 제네릭 메서드로, 파라미터로 전달된 값을 출력하는 기능을 합니다.

제네릭 제한

제네릭은 타입 파라미터에 제한을 둘 수도 있습니다. 예를 들어, 특정 클래스의 하위 클래스만 타입 파라미터로 받을 수 있도록 제한할 수 있습니다. 아래는 예시입니다.

public class Box<T extends Number> {
    private T value;
    
    public void setValue(T value) {
        this.value = value;
    }
    
    public T getValue() {
        return value;
    }
}

위의 코드에서 T는 Number 클래스를 상속받는 타입으로 제한되어 있습니다. 따라서 Box 클래스를 생성할 때 타입 파라미터로 Integer, Double 등 Number 클래스의 하위 클래스만 지정할 수 있습니다.

결론

제네릭은 자바에서 타입 안정성을 제공하고 재사용성을 높이기 위한 기능입니다. 타입 파라미터를 이용하여 클래스, 인터페이스, 메서드를 정의하고 사용할 수 있으며, 타입 파라미터에 제한을 둘 수도 있습니다. 제네릭을 적절히 사용하여 프로그램의 안정성과 유연성을 개선할 수 있습니다.

참고 자료