1. 제네릭 타입이란?
Java의 제네릭(Generic) 타입은 클래스, 인터페이스, 메소드에 다양한 타입을 사용할 수 있게 도와주는 기능입니다. 제네릭을 사용하면 다양한 타입에 대해 동일한 코드를 작성할 수 있으며, 컴파일 시점에 타입 검사를 통해 안정성을 높일 수 있습니다.
예시:
List<String> stringList = new ArrayList<>();
List<Integer> integerList = new ArrayList<>();
2. 제네릭 클래스와 인터페이스
제네릭 클래스와 인터페이스는 다양한 타입의 객체를 다룰 수 있습니다. 타입 파라미터를 꺽쇠 괄호 <> 안에 지정하고, 클래스 또는 인터페이스 이름 뒤에 위치합니다.
예시:
public class GenericBox<T> {
private T object;
public void setObject(T object) {
this.object = object;
}
public T getObject() {
return object;
}
}
3. 제네릭 메소드
제네릭 메소드는 다양한 타입의 매개변수를 처리할 수 있습니다. 타입 파라미터를 메소드 선언부에 위치시킵니다.
예시:
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
4. 와일드카드와 제네릭의 한계
제네릭 타입의 변수에 다른 제네릭 타입의 객체를 대입하려면, 와일드카드를 사용해야 합니다. 와일드카드는 '?' 기호로 표시되며, 모든 타입을 나타냅니다.
예시:
List<?> list = new ArrayList<Integer>();
5. 제네릭 타입 제약
타입 파라미터에 제약을 걸어 특정 클래스를 상속받거나 인터페이스를 구현한 타입만 허용할 수 있습니다. 'extends' 키워드를 사용해 제약을 표시합니다.
예시:
public class GenericNumberContainer<T extends Number> {
private T number;
public void setNumber(T number) {
this.number = number;
}
public T getNumber() {
return number;
}
}
6. 제네릭 타입의 실용적인 활용
제네릭 타입은 코드의 재사용성을 높이고 타입 안정성을 제공하여 개발자들이 선호하는 기능입니다. 여러 가지 실용적인 예시를 살펴보겠습니다.
예시 1: 컬렉션을 사용할 때
List<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
for (String name : names) {
System.out.println(name);
}
예시 2: 사용자 정의 클래스에서 제네릭 사용하기
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
Pair<String, Integer> agePair = new Pair<>("John", 28);
System.out.println("Name: " + agePair.getKey() + ", Age: " + agePair.getValue());
Java 제네릭 타입에 대해 설명하고 예시를 제공하였습니다. 제네릭 타입을 사용하면 코드의 재사용성을 높이고 타입 안정성을 제공할 수 있으므로, Java 개발자들에게 꼭 필요한 기술입니다. 이러한 기초를 바탕으로 제네릭 타입을 자유롭게 활용하시길 바랍니다.
'개발 > Java' 카테고리의 다른 글
선택 정렬(Selection Sort) 알고리즘 이해하기 (0) | 2023.04.11 |
---|---|
버블 정렬(Bubble Sort) 알고리즘 이해하기 (0) | 2023.04.09 |
ModelMapper와 ObjectMapper 의 차이점 (0) | 2023.04.07 |
Abstract Class와 Interface의 사용법과 차이점 (0) | 2023.04.07 |
자바8 Stream 기능 이해하기 (0) | 2023.04.01 |