📚 제네릭이란?
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크(compile-time type check)를 해주는 기능이다.
예를들어, ArrayList와 같은 컬렉션 클래스는 다양한 종류의 객체를 담을 수 있지만 보통 한 종류의 객체를 담는 경우가 많다. 그런데도 꺼낼 때마다 타입체크를 하고 형변환을 하는 것은 아무래도 불편할 수 밖에 없다. 게다가 원치않는 종류의 객체가 포함되는 것을 막는 방법이 없는 것도 문제이다. 이러한 방법을 해결해주는 것이 제네릭(Generics)이다.
제네릭의 장점
1. 타입 안정성을 제공해준다.
2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다
3. 잘못된 타입이 들어오는 것을 컴파일 단계에서 방지할 수 있다.
단순히 말하자면, 다룰 객체의 타입을 미리 명시해주면서 번거로운 형변환을 줄여준다.
제네릭 클래스의 선언
class Box<T> {
<T> item;
void setItem(T item){
this.item = item;
}
T getItem() {
return item;
}
}
Box<T>의 T를 타입변수(Type variable)이라고 한다.
만일 타입변수가 여러개면 Map<
K,V>와 같이 콤마 구분자로 나열하면 된다.
* 클래스 변수(static 변수)에는 제네릭 타입 매개변수를 사용할 수 없다.
제네릭은 배열의 타입을 지정하듯이 리스트 자료형 같은 컬렉션 클래스나 메소드에서 사용할 내부 데이터 타입(type)을 파라미터(parameter) 주듯이 외부에서 지정하는 이른바 타입을 변수화 한 기능이다.
<?> (와일드 카드 : Wild Card)
<?> // 모든 타입 가능. <? extends Object>랑 같은
Object는 자바에서의 모든 API 및 사용자 클래스의 최상위 타입이다.
//두 코드는 같은 코드이다.
public class ClassName { ... }
public class ClassName extends Object { ... }
기능의 사용에만 관심이 있는 경우 사용한다.
'🍎 Backend > JAVA' 카테고리의 다른 글
[JAVA] JVM의 구조 (0) | 2025.01.30 |
---|---|
[JAVA] String, StringBuffer, 예외(Exception) (0) | 2025.01.09 |
[JAVA] 어노테이션(Annotation) (0) | 2025.01.09 |
[JAVA] 람다(Lambda)와 스트림(Stream) (0) | 2025.01.09 |
[JAVA] CS면접대비 자바와 객체지향 정리 (0) | 2025.01.02 |