제네릭이란
- 클래스를 정의할 때, 구체적인 타입(type)을 적지 않고 변수 형태로 적어 놓는 것
- 클래스, 메소드에서 사용할 데이터 타입을 나중에 확정하는 기법이다.
- 클래스나 메소드를 선언할 때가 아닌 사용할 때, 즉 인스턴스를 생성할 때나 메소드를 호출할 때 정한다는 의미이다.
작성 방법
- T: 타입 변수(메소드의 매개변수 역할) > 자료형을 전달하는 변수, 자료형 그 자체 / 보통 대문자 한글자로 작성
- <>: 인자 리스트(메소드의 () 역할)
기본 코드 예제
메인클래스
public class Ex57_Generic {
public static void main(String[] args) {
WrapperInt n1 = new WrapperInt(100);
System.out.println(n1.toString());
System.out.println(n1.getData() * 2);
System.out.println();
}
}
int형을 매개변수로 받는 클래스
class WrapperInt {
private int data; //1. 클래스 중심
//2. data 중심
public WrapperInt(int data) {
this.setData(data);
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
@Override
public String toString() {
return "[data=" + data + "]";
}
}
제네릭 클래스 예제 코드
메인클래스
public class Ex57_Generic {
public static void main(String[] args) {
//다양한 자료형으로 활용 가능하다.
Wrapper<String> s3 = new Wrapper<String>("이순신");
System.out.println(s3.toString());
System.out.println(s3.getData().length());
Wrapper<Boolean> b3 = new Wrapper<Boolean>(true);
System.out.println(b3.toString());
System.out.println(b3.getData() ? "참" : "거짓");
}
}
제네릭 클래스
class Wrapper<T> {
private T data;
public Wrapper(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "Wrapper [data=" + data + "]";
}
}