Java

[Java] generic - 2

비번변경 2026. 3. 10. 10:29

개요

2026.03.03-[Java] generic - 1에서 generic이 무엇인지, 기본적인 개념 위주로 정리했다. 이번 글에서는 조금 더 세부적이고 소소한 내용을 정리한다.

 

 

타입 파라미터 할당 가능 타입

generic 할당은 Reference 타입만 가능하다. int, double과 같은 원시(Primitive) 타입 대신 Integer, Double을 사용해야 한다. 클래스로 지정하기 때문에 개체 지향 프로그래밍의 다형성 원리도 적용된다. 예로 들어 Apple, Banana라는 두 개 클래스가 Fruit이라는 클래스의 자식 클래스일 때, generic에 Fruit이라고 지정하면 Apple, Banana도 취급할 수 있다.

class Fruit { }
class Apple extends Fruit { }
class Banana extends Fruit { }

class FruitBox<T> {
    List<T> fruits = new ArrayList<>();

    public void add(T fruit) {
        fruits.add(fruit);
    }
}

public class Main {
    public static void main(String[] args) {
        FruitBox<Fruit> box = new FruitBox<>();
        
        // 제네릭 타입은 다형성 원리가 그대로 적용된다.
        box.add(new Fruit());
        box.add(new Apple());
        box.add(new Banana());
    }
}

 

 

복수 타입 파라미터

generic에는 여러 개의 타입을 지정할 수 있다. 여러 개를 지정할 때는 다이아몬드 연산자 안에 쉼표로 구분한다.

import java.util.ArrayList;
import java.util.List;

class Apple {}
class Banana {}

class FruitBox<T, U> {
    List<T> apples = new ArrayList<>();
    List<U> bananas = new ArrayList<>();

    public void add(T apple, U banana) {
        apples.add(apple);
        bananas.add(banana);
    }
}

public class Main {
    public static void main(String[] args) {
    	// 복수 제네릭 타입
        FruitBox<Apple, Banana> box = new FruitBox<>();
        box.add(new Apple(), new Banana());
        box.add(new Apple(), new Banana());
    }
}

 

 

중첩 타입 파라미터

타입 파라미터에는 generic 객체를 지정할 수도 있다. 

public static void main(String[] args) {
    // LinkedList<String>을 원소로서 저장하는 ArrayList
    ArrayList<LinkedList<String>> list = new ArrayList<LinkedList<String>>();

    LinkedList<String> node1 = new LinkedList<>();
    node1.add("aa");
    node1.add("bb");

    LinkedList<String> node2 = new LinkedList<>();
    node2.add("11");
    node2.add("22");

    list.add(node1);
    list.add(node2);
    System.out.println(list);
}

 

타입 파라미터 네이밍

지금까지 generic을 표기할 때 <T>와 같이 표현했으나, 문법적으로 정해진 값은 없다. 다만 암묵적으로 T를 많이 사용하고 여러 generic이 필요한 경우에는 S, U 등으로 표기한다. 타입 외의 요소를 표현할 때는 암묵적으로 아래와 같인 규칙을 따른다.

타입 설명
<T> 타입(Type)
<E> 요소(Element), 예를 들어 List
<K> 키(Key), 예를 들어 Map<k, v>
<V> 리턴 값 또는 매핑된 값(Variable)
<N> 숫자(Number)
<S, U, V> 2번째, 3번째, 4번째에 선언된 타입

 

 

참고 문서

☕ 자바 제네릭(Generics) 개념 & 문법 정복하기

https://st-lab.tistory.com/153

 

 

728x90