제네릭이란?
자바에서 형 안전성을 높이기 위해 도입된 프로그래밍으로 |
컴파일 시간에 타입 오류를 더욱 효과적으로 찾아낼 수 있으며 클래스, 인터페이스, 메서드에 대한 타입을 파라미터로 전달할 수 있게 해주는 역할 |
즉, 결정되지 않은 타입을 파라미터로 넘겨주어, 실제 사용할 때 파라미터의 타입을 결정하는 기능 |
제네릭의 장점
타입 안전성 | 잘못된 타입의 객체가 저장되는 것을 컴파일 시간에 방지 |
형 변환 필요성 감소 | 제네릭을 사용하면 명시적인 형 변환이 필요 없어짐 |
코드 재사용성 | 일반 클래스나 메서드로 다양한 타입에 대해 동작하는 코드를 작성하는 것이 가능함 |
제네릭 타입
public class 클래스명<T>
public interface 인터페이스명<E>
결정되지 않은 타입을 파라미터로 가지는 클래스와 인터페이스로 일반적으로 괄호 안의 임시 타입은 대문자로 작성하는 것이 원칙임
제네릭 클래스의 예시 코드
public class MyCustomList<T> {
ArrayList<T> list = new ArrayList<>();
public void addElement(T element) {
list.add(element);
}
public void removeElement(T element) {
list.remove(element);
}
public static <E> void printPair(E first, E second) {
System.out.println("(" + first + ", " + second + ")");
}
}
제한된 타입 파라미터(bounded type parameter)
<T extends Number>
모든 타입으로 대체할 수 없고, 특정 타입과 자식 or 구현 관계에 이쓴ㄴ 타입만 대체할 수 있는 파라미터 |
extends 키워드를 사용하여 제네릭에 상한을 결정하면 타입 파리마터를 정해진 상한에서 제한할 수 있음 |
이를 통해 타입 파라미터가 특정 클래스의 서브 클래스, 또는 특정 인터페이스의 구현 클래스만 가능하도록 제한할 수 있다. |
와일드카드(?)
?(Unbounded Wildcard) : 어떠한 타입도 될 수 있습니다.
? extends T(Upper Bounded Wlidcard) : T 타입 또는 T의 서브타입을 의미함
? super T(Lower Bounded Wlidcard) : T 타입 또는 T의 슈퍼 타입을 의미함
제네릭 타입을 매개값 or 리턴 타입으로 사용할 때 타입 파라미터로 ? 사용가능 |
재네릭에서 와일드카드(?)는 "알 수 없는 타입"을 의미한다. |
와일드카드는 제네릭 코드에서 더 큰 유연성을 얻기 위해 사용되며 특히 제네릭 메서드나 제네릭 클래스에서 다양한 제네릭 타입을 처리할 때 유용하게 사용됨 |
와일드카드의 사용의 예
1. 상한 경계 와일드카드 : ? extend 변수
public static void printNumbers(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}
해당 List에서는 Integer나 Double과 같은 다양한 타입의 리스트를 받아 처리하는 것이 가능함 |
2. 하한 경계 와일드카드 : ? super Integer
public static void addIntegers(List<? super Integer> list) {
list.add(10);
list.add(20);
}
Integer가 아닌 Number랑 Object를 인자로 전달할 수 있음 |
'국비지원 공부 정리 > Java' 카테고리의 다른 글
Collection FrameWork - Map, Set, List (0) | 2025.04.09 |
---|---|
Wrapper 클래스 - 기본 변수를 포장 (0) | 2025.04.09 |
추상 클래스와 인터페이스 (0) | 2025.04.08 |
객체지향 프로그래밍과 객체 (0) | 2025.04.08 |
JAVA 예외처리 (0) | 2025.04.08 |