14. 제네릭
14.1. 제네릭 개념
제네릭(Generic)은 자바에서 타입 안정성을 보장하고, 코드 중복을 줄이기 위해 도입된 기능입니다. 제네릭을 사용하면 클래스나 메서드에서 사용할 타입을 미리 지정하지 않고, 호출하는 시점에서 타입을 결정할 수 있습니다. 이를 통해 다양한 타입에 대응하는 하나의 클래스나 메서드를 작성할 수 있습니다. 제네릭은 꺾쇠괄호(<>) 안에 타입 매개변수를 표시하여 사용합니다.
14.2. 제네릭 클래스와 인터페이스
제네릭 클래스는 클래스 선언 시 타입 매개변수를 사용하여 클래스를 정의합니다. 이렇게 정의된 클래스는 객체 생성 시 타입을 명시하여 인스턴스를 생성할 수 있습니다. 제네릭 인터페이스도 제네릭 클래스와 동일한 방식으로 정의하며, 구현 클래스에서 타입을 명시하여 사용할 수 있습니다.
// 제네릭 클래스
public class GenericClass<T> {
private T data;
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
// 제네릭 인터페이스
public interface GenericInterface<T> {
void doSomething(T data);
}
// 구현 클래스
public class MyClass implements GenericInterface<String> {
@Override
public void doSomething(String data) {
System.out.println(data);
}
}
14.3. 제네릭 메소드
제네릭 메서드는 메소드 선언 시 타입 매개변수를 사용하여 메서드를 정의합니다. 제네릭 메소드는 정적 또는 인스턴스 메소드 모두 사용할 수 있으며, 호출 시점에서 타입을 결정합니다.
public class GenericMethod {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
}
// 사용 예
Integer[] intArray = {1, 2, 3};
String[] strArray = {"Hello", "World"};
GenericMethod.printArray(intArray);
GenericMethod.printArray(strArray);
14.4. 와일드카드
와일드카드는 제네릭 타입의 범위를 제한하거나 확장할 때 사용합니다. 와일드카드는 '?' 기호로 표시하며, 제한된 타입을 지정할 수 있습니다. 와일드카드는 다음 세 가지 종류가 있습니다.
1. Unbounded Wildcard (제한 없음): <?>
어떤 타입이든 사용할 수 있으며, 제네릭 타입에 대한 제한이 없습니다. 예를 들어, 모든 종류의 객체를 처리하는 메소드를 작성할 때 사용할 수 있습니다.
public static void processElements(List<?> list) {
for (Object elem : list) {
// 일반적인 객체 처리 로직
}
}
2. Upper Bounded Wildcard (상위 경계): <? extends T>
상위 경계 와일드카드는 주어진 타입 T 또는 그 하위 타입만 허용합니다. 이를 통해 특정 타입의 상위 클래스나 인터페이스를 구현한 객체만 처리하는 메소드를 작성할 수 있습니다.
public static void processNumbers(List<? extends Number> list) {
for (Number num : list) {
// 숫자 처리 로직
}
}
반응형
'GD's IT Lectures : 기초부터 시리즈 > 자바(JAVA) 기초부터 ~' 카테고리의 다른 글
[자바(JAVA)] 함수형 프로그래밍과 람다 (0) | 2023.04.28 |
---|---|
[자바(JAVA)] 컬렉션 프레임워크 (0) | 2023.04.28 |
[자바(JAVA)] 예외 처리 (0) | 2023.04.27 |
[자바(JAVA)] 패키지와 접근 제어자 (0) | 2023.04.27 |
[자바(JAVA)] 추상 클래스와 인터페이스 (0) | 2023.04.27 |
댓글