Java 제네릭 (Generics)

임유진·2025년 7월 7일

Java

목록 보기
12/12
post-thumbnail

Java에서 제네릭은 클래스나 메서드에서 사용할 데이터 타입을 일반화해 코드의 재사용성과 타입 안정성을 확보하는 기능입니다.

제네릭의 특징

  • 컴파일 시 타입 체크 가능
  • 형 변환(casting) 필요 없음
  • 잘못된 타입 사용 방지
  • 재사용성 높은 코드 작성 가능

기본 문법

<> 안에 타입 매개변수를 지정해 사용합니다.

class Box<T> {
  private T value;

  public void set(T value) {
     this.value = value;
  }

  public T get() {
     return value;
  }
}

// 사용 예
Box<String> box = new Box<>();
box.set("Hello");
String data = box.get();

제네릭 메서드

메서드에만 제네릭 타입을 선언해 사용할 수 있습니다.

public <T> void print(T item) {
  System.out.println(item);
}

// 사용 예
print(100);
print("Java");

타입 매개변수 명명 관례

약어의미
TType
EElement (컬렉션 요소)
KKey
VValue
NNumber

제한된 타입 (Bounded Type)

제네릭에 상위 타입 제한을 설정해 타입 범위를 제어합니다.

class NumberBox<T extends Number> {
  private T num;

  public void set(T num) {
    this.num = num;
  }

  public T get() {
    return num;
  }
}

// 사용 예
NumberBox<Integer> intBox = new NumberBox<>();
intBox.set(123);

T는 Number 또는 그 하위 타입만 허용됩니다.


와일드카드

제네릭 타입의 불특정 타입을 허용할 때 사용합니다.

  • <?>: 모든 타입 허용
  • <? extends T>: T 또는 하위 타입
  • <? super T>: T 또는 상위 타입
public void printList(List<?> list) {
  for (Object obj : list) {
     System.out.println(obj);
  }
}

제네릭의 특징과 제한사항

  • 컴파일 시 타입 결정

  • 런타임에는 타입 정보 제거됨 (Type Erasure)

  • 기본형(primitive) 타입 사용 불가 (List<int>List<Integer>)

  • instanceof 검사 불가

    // 오류 예시
    if (obj instanceof Box<String>) { }

📌 전체 요약 표

구분설명
기본 문법<>에 타입 매개변수를 지정
제네릭 메서드메서드에만 타입 매개변수 선언
제한된 타입T extends Number로 타입 범위 제한
와일드카드<?>, <? extends T>, <? super T> 사용 가능
주요 제한사항런타임 타입 제거, 기본형 사용 불가, instanceof 검사 불가

📚 참고자료

profile
말하는 고구마

0개의 댓글