제네릭(Generic)
코드의 재사용성과 타입 안정성을 높이기 위해 컴파일 시점에 타입을 결정하는 문법이다.
제네릭이란?
- 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정할 수 있도록 하는 기능이다.
- 타입 안정성(Type Safety)을 보장하며, 코드의 재사용성을 높이는 장점이 있다.
- 제네릭을 사용하면 개발자가 원하는 타입을 직접 지정하여 객체를 생성할 수 있다.
제네릭을 사용하면 클래스 내부에서 사용할 데이터 타입을 외부에서 지정할 수 있으며, 원하는 타입으로 객체를 생성하여 타입 안정성과 코드 재사용성을 높일 수 있다
제네릭 클래스 (<T>)
▼제네릭 클래스
public class GenericBox<T> {
private T item;
public GenericBox(T item) { this.item = item; }
public T getItem() { return this.item; }
}
- GenericBox<T> 를 활용해서 String, Integer, Double 등 다양한 타입 저장 가능하다.
- 제네릭은 다양한 데이터 타입을 재사용 가능하게 만들고, 타입 안정성을 보장한다.
- 제네릭 클래스는 클래스 선언부에 <T> 가 선언된 클래스이다.
▼타입소거
GenericBox<String> strBox = new GenericBox<>("ABC");
GenericBox<Integer> intBox = new GenericBox<>(100);
String strItem = strBox.getItem(); // ✅ 타입 안정성 보장
Integer intItem = intBox.getItem(); // ✅ 타입 안정성 보장
컴파일 시점에 <T>가 Object로 대체되며, 자동으로 다운 캐스팅이 추가된다.
제네릭 메서드(Generic Method)
제네릭 메서드는 메서드 내부에서 사용할 타입을 유연하게 지정하는 기능이고, 클래스의 제네릭 타입과 별개로 독립적인 타입 매개변수를 가진다.
일반 메서드 vs 제네릭 메서드
일반 메서드는 클래스의 타입 매개변수T를 그대로 따른다.
밑에 코드에 보이는 GenericBox<String>의 경우 T는 String이므로 다른 타입을 받을 수 없다.
public void printItem(T item) {
System.out.println(item);
}
제네릭 메서드는 독립적인 타입 매개변수 <S>를 사용하며, 클래스의 제네릭 타입 T와 완전히 독립적이므로 모든 데이터 타입을 받을 수 있다.
public <S> void printBoxItem(S item) {
System.out.println(item);
}
실행 예시
public class Main {
public static void main(String[] args) {
GenericBox<String> strGBox = new GenericBox<>("ABC");
// ⚠️ 일반 메서드는 클래스의 타입(T)을 따라감
strGBox.printItem("ABC"); // ✅ 가능
strGBox.printItem(100); // ❌ 오류 발생 (T는 String이므로 Integer 불가)
// ✅ 제네릭 메서드는 독립적인 타입 매개변수를 사용
strGBox.printBoxItem("ABC"); // ✅ 가능
strGBox.printBoxItem(100); // ✅ 가능
strGBox.printBoxItem(0.1); // ✅ 가능
}
}
제네릭 메서드는 클래스의 타입과 독립적으로 동작하므로, 보다 유연하게 다양한 타입을 다룰 수 있다!
정리
제네릭 클래스 (GenericBox<T>) | <T> | 클래스가 정의될 때 원하는 타입을 설정 | 객체 생성 시 지정한 타입만 사용 가능 |
일반 메서드 (printItem) | T (클래스의 타입) | 클래스에서 설정한 타입을 그대로 따름 | 클래스에서 지정한 타입만 가능 |
제네릭 메서드 (printBoxItem) | <S> (독립적인 타입) | 클래스의 제네릭 타입과 별개로 동작 | 모든 타입 사용 가능 |
'JAVA' 카테고리의 다른 글
JAVA 계산기 트러블 슈팅 (3) | 2025.03.05 |
---|---|
JAVA - Enum (0) | 2025.03.05 |
JAVA로 간단한 계산기 구현 2 (0) | 2025.02.28 |
JAVA 클래스와 객체 (0) | 2025.02.27 |
JAVA 기초 (0) | 2025.02.25 |