본문 바로가기

java(자바)

[java(자바)] Generic이란? _디버깅의 눈물

Generic

제네릭은 클래스나 메서드에서 사용할 데이터 타입을 미리 지정하지 않고, 실행 시점(컴파일 시점)에 타입을 결정할 수 있도록 하는 기능입니다.

 

제네릭을 사용하기 위해서는 우선 클래스나 인터페이스에서 타입 매개변수(Type Parameter)를 선언합니다. 그리고 객체를 생성할 때, 타입 매개변수에 실제 사용할 타입(ex.Integer)을 지정합니다. 메서드에서도 제네릭을 사용할 수 있습니다.

 

 

public class GenericExample<T> {
    
    private T data;
    
    public GenericExample(T data) {
        this.data = data;
    }
    
    public T getData() {
        return data;
    }
    
    public void setData(T data) {
        this.data = data;
    }
    
    public static void main(String[] args) {
        GenericExample<String> stringObj = new GenericExample<String>("Hello World!");
        String data = stringObj.getData();
        System.out.println(data);
        
        GenericExample<Integer> integerObj = new GenericExample<Integer>(42);
        Integer value = integerObj.getData();
        System.out.println(value);
    }
}

 

위 예시 코드에서는 GenericExample 클래스를 제네릭 클래스로 선언합니다. T는 타입 매개변수로서 클래스 내부에서 사용되는 데이터의 타입을 지정합니다.

 

생성자와 getData, setData 메서드에서는 T 타입을 매개변수나 반환 값으로 사용합니다. main 메서드에서는 GenericExample 클래스를 생성하면서 타입 인자를 명시합니다.

 

실행 결과는 다음과 같습니다.

 

 

Hello World!
42

 

 

stringObj는 GenericExample 클래스의 객체이며, 생성 시 T를 String으로 지정하여 문자열 "Hello World!"를 초기값으로 갖습니다. stringObj.getData() 메소드를 호출하면 "Hello World!" 문자열이 반환됩니다.

 

integerObj도 GenericExample 클래스의 객체이며, 생성 시 T를 Integer로 지정하여 정수 42를 초기값으로 갖습니다. integerObj.getDate() 메서드를 호출하면 정수 42가 반환됩니다.

 

위 예시 코드에서는 제네릭을 사용함으로써, GenericExample 클래스의 객체를 생성할 때 데이터 타입을 명시적으로 지정할 수 있게 되어, 타입 안정성이 보장됩니다.

 

또한 제네릭을 사용하면 동일한 코드를 여러 가지 데이터 타입에 대해 재사용할 수 있기 때문에 코드의 재사용성을 높여주고, 컬렉션 객체를 쉽게 다룰 수 있게 해준다는 장점이 있습니다.