안녕하세요! 이번에는 자바의 제네릭(Generic)에 대해 알아보겠습니다. 제네릭은 자바에서 컴파일 시 타입을 체크하여 타입 안정성을 확보하기 위한 기능입니다. 이를 활용하면 타입 변환에 따른 오류를 줄이고 재사용성을 높일 수 있습니다. 이번에는 제네릭의 개념과 제네릭 클래스, 제네릭 메서드, 제한된 제네릭 클래스, 와일드카드에 대해 알아보겠습니다.
12.1 제네릭의 개념
제네릭은 클래스나 메서드를 선언할 때 사용할 타입을 미리 지정하지 않고, 사용하는 시점에서 구체적인 타입을 지정할 수 있도록 합니다. 이를 통해 재사용성을 높이고 타입 안정성을 확보할 수 있습니다.
12.2 제네릭 클래스
제네릭 클래스는 클래스 선언 시 타입 매개변수를 사용하여 클래스 내부에서 사용할 타입을 지정할 수 있습니다. 타입 매개변수는 클래스 이름 뒤에 "<>" 기호를 사용하여 선언합니다.
아래는 제네릭 클래스의 예제 코드입니다.
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
public class GenericClassExample {
public static void main(String[] args) {
Box<String> box1 = new Box<>();
box1.setItem("Apple");
String item1 = box1.getItem();
Box<Integer> box2 = new Box<>();
box2.setItem(123);
int item2 = box2.getItem();
}
}
12.3 제네릭 메서드
제네릭 메서드는 메서드 선언 시 매개변수나 반환 타입에 제네릭 타입을 사용하는 메서드를 말합니다. 제네릭 메서드는 메서드 이름 앞에 "<>" 기호를 사용하여 제네릭 타입을 선언합니다.
아래는 제네릭 메서드의 예제 코드입니다.
public class GenericMethodExample {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
public static void main(String[] args) {
Integer[] integers = {1, 2, 3, 4, 5};
String[] strings = {"Apple", "Banana", "Cherry"};
printArray(integers);
printArray(strings);
}
}
12.4 제한된 제네릭 클래스
제한된 제네릭 클래스는 특정한 타입으로 제한하여 사용하는 제네릭 클래스입니다. 제한된 제네릭 클래스는 extends 키워드를 사용하여 특정 클래스나 인터페이스를 상속 또는 구현하도록 제한할 수 있습니다.
아래는 제한된 제네릭 클래스의 예제 코드입니다.
public class GenericClassExample<T extends Number> {
private T value;
public GenericClassExample(T value) {
this.value = value;
}
public double square() {
return value.doubleValue() * value.doubleValue();
}
public static void main(String[] args) {
GenericClassExample<Integer> integerExample = new GenericClassExample<>(5);
System.out.println(integerExample.square());
// 아래의 코드는 컴파일 오류가 발생합니다.
// GenericClassExample<String> stringExample = new GenericClassExample<>("Hello");
}
}
12.5 와일드카드
와일드카드는 제네릭 타입 매개변수에 다양한 타입을 지정할 수 있도록 도와줍니다. "?" 기호를 사용하여 특정 타입 대신 와일드카드를 사용할 수 있습니다. 와일드카드는 extends 또는 super 키워드와 함께 사용하여 상한 제한이나 하한 제한을 설정할 수 있습니다.
와일드카드의 사용 예시는 다음과 같습니다.
public class WildcardExample {
public static void printList(List<?> list) {
for (Object element : list) {
System.out.println(element);
}
}
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
List<String> strings = Arrays.asList("Apple", "Banana", "Cherry");
printList(integers);
printList(strings);
}
}
이상으로 자바의 제네릭 개념과 활용에 대해 알아보았습니다. 제네릭을 사용하여 타입 안정성을 확보하고 재사용성을 높여보세요. 감사합니다!
'JAVA' 카테고리의 다른 글
JAVA | 14. GUI 프로그래밍 (0) | 2023.06.12 |
---|---|
JAVA | 13. 람다식과 스트림 (0) | 2023.06.11 |
JAVA | 11. 컬렉션 프레임워크 (0) | 2023.06.11 |
JAVA | 10. 스레드 (0) | 2023.06.10 |
JAVA | 9. 입출력 (0) | 2023.06.10 |
댓글