제너릭
- 클래스나 메서드의 타입 안정성을 높이기 위해 도입된 기능
- 컴파일 시에 타입 체크 가능
- 타입 안정성 보장
- 클래스나 메서드가 다루는 데이터 타입 선언 가능
- 다양한 테이터 타입에 대해 동일한 코드 사용 가능
- 재사용성 높이고 형변환을 줄이며 오류를 컴파일 시에 발견 가능하게 해줌
- 타입 매개변수를 사용하여 작성
주의할 점
- 기본 데이터 타입 사용 불가능
- 해당하는 래퍼 클래스 사용해야 함
- 타입 인자를 명시적으로 지정해야 함
- 상위 클래스의 제너틱 타입과 하위 클래스의 제너틱 타입이 일치해야 함
// 제너릭을 사용한 클래스의 예시
class Box<T> {
private T data; // 제너릭 데이터를 저장하는 private 변수
public void setData(T data) { // 데이터를 설정하는 메서드
this.data = data;
}
public T getData() { // 데이터를 반환하는 메서드
return this.data;
}
}
// 제너릭을 사용한 메서드의 예시
class Util {
public static <T> T getFirstElement(T[] array) { // 제너릭 메서드
if (array.length == 0) {
return null; // 배열이 비어있으면 null 반환
}
return array[0]; // 배열의 첫 번째 요소 반환
}
}
public class Main {
public static void main(String[] args) {
// 제너릭 클래스 활용
Box<Integer> integerBox = new Box<>(); // Integer 타입의 Box 인스턴스 생성
integerBox.setData(10); // 데이터 설정
int data = integerBox.getData(); // 데이터 반환
// 제너릭 메서드 활용
String[] stringArray = {"Hello", "Generic", "World"}; // String 배열 선언 및 초기화
String firstElement = Util.getFirstElement(stringArray); // 배열의 첫 번째 요소 가져오기
System.out.println("Data in Box: " + data); // Box에 저장된 데이터 출력
System.out.println("First Element in Array: " + firstElement); // 배열의 첫 번째 요소 출력
}
}