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 클래스의 객체를 생성할 때 데이터 타입을 명시적으로 지정할 수 있게 되어, 타입 안정성이 보장됩니다.
또한 제네릭을 사용하면 동일한 코드를 여러 가지 데이터 타입에 대해 재사용할 수 있기 때문에 코드의 재사용성을 높여주고, 컬렉션 객체를 쉽게 다룰 수 있게 해준다는 장점이 있습니다.
'java(자바)' 카테고리의 다른 글
[java(자바)] 자바8의 특징-람다식, 스트림, 새로운 날짜&시간 API _디버깅의 눈물 (0) | 2023.04.02 |
---|---|
[java(자바)] 리플렉션(Reflection)이란? _디버깅의 눈물 (0) | 2023.04.01 |
[java(자바)] 직렬화(Serialization)와 역직렬화(Deserialization) _디버깅의 눈물 (0) | 2023.03.30 |
[java(자바)] Call by Value와 Call by Reference의 차이 _디버깅의 눈물 (0) | 2023.03.29 |
[java(자바)] String, StringBuilder, StringBuffer의 차이 _디버깅의 눈물 (0) | 2023.03.28 |