제네릭(Generic)은 Java에서 데이터 타입을 일반화하여 코드를 재사용하고 타입 안전성을 높이기 위한 프로그래밍 기능입니다. 제네릭을 사용하면 컬렉션과 같은 다양한 타입의 객체를 처리할 수 있는 클래스나 메서드를 생성할 수 있습니다.
제네릭의 기본 개념:
1. 타입 안전성(Type Safety):
제네릭을 사용하면 컴파일 시점에 타입 검사를 수행하여 런타임 에러를 방지할 수 있습니다.
2. 타입 파라미터(Type Parameter):
제네릭에서는 꺾쇠 괄호(<>) 안에 타입 파라미터를 사용합니다.
예: ArrayList<T> 여기서 T는 타입 파라미터입니다.
3. 제네릭 클래스와 인터페이스:
클래스나 인터페이스를 정의할 때 타입 파라미터를 추가하여 제네릭화할 수 있습니다.
기본 예제:
// 제네릭 클래스의 예
public class Box<T> {
private T content;
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
}
// 사용 예
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello, Java!");
String value = stringBox.getContent();
이 예에서 Box 클래스는 어떤 타입의 content를 담을 수 있습니다. 이를 사용할 때 원하는 타입으로 인스턴스화할 수 있습니다.
제네릭 메서드:
클래스뿐만 아니라 메서드도 제네릭화할 수 있습니다.
public class GenericMethodExample {
public static <T> void printContent(T content) {
System.out.println(content);
}
public static void main(String[] args) {
printContent("Hello, World!"); // 출력: Hello, World!
printContent(123); // 출력: 123
}
}
제한된 타입 파라미터(Bounded Type Parameter):
제네릭에서 특정 타입 또는 그 하위 타입만을 허용하고 싶을 때 사용합니다.
public class NumericBox<T extends Number> {
private T content;
// 나머지 코드 ...
}
이 예에서 NumericBox는 Number의 서브클래스만 담을 수 있습니다. (Integer, Double 등)
장점:
타입 안전성: 제네릭을 사용하면 컴파일러가 타입 검사를 수행하기 때문에 잘못된 타입 사용 시 오류를 즉시 발견할 수 있습니다.
코드 재사용: 같은 코드를 여러 타입에 대해 사용할 수 있기 때문에 코드의 재사용성이 높아집니다.
제네릭을 사용하면서 주의해야 할 점:
런타임 시 제네릭 정보 소실: Java의 제네릭은 타입 소거(Type Erasure) 때문에 런타임에는 제네릭 정보가 사라집니다. 따라서 List<Integer>와 List<String>은 런타임에 동일한 List 타입으로 취급됩니다.
기본 타입 사용 불가: 제네릭 타입 파라미터로는 기본 타입(int, char, double 등)을 사용할 수 없습니다. 대신 래퍼 클래스(Integer, Character, Double 등)를 사용해야 합니다.
제네릭은 처음에는 복잡해 보일 수 있지만, 익숙해지면 Java 프로그래밍에서 큰 도움이 됩니다. 제네릭을 활용하면 타입 안전성을 높이면서도 유연한 코드를 작성할 수 있습니다.
'Programing > JAVA' 카테고리의 다른 글
java JSON 파싱 예제 (0) | 2023.09.21 |
---|---|
추상클래스를 구현하면 @Override를 안붙혀도 되나? (0) | 2023.09.21 |
Java에서의 Set<String> 및 Map<String, ?> 자료구조 (0) | 2023.09.14 |
ByteBuffer를 활용하여 Protocol Data 파싱하기 (0) | 2023.08.24 |
리팩토링...java... (0) | 2023.08.06 |