[Java] Generic

양정훈·2022년 8월 8일
0

특정 타입을 외부에서 사용자에 의해 지정

  • 한글자가 아니어도 됨
  • primitive type은 사용할 수 없음
  • 컴파일 시점에 타입 변환되며 기존 generic 타입들은 제거됨

일반적인 타입

  • <T> : Type
  • <E> : Element
  • <K> : Key
  • <V> : Value
  • <N> : Number

Generic Class

// 블럭 안에서만 유효함
class Foo <T> { ... }
class Foo <Bar> { ... }
class Foo <T, K> {
    T member1;
    K member2;
}

Foo<String> foo = new Foo<String>();

Generic Method

  • [접근제어자] <제네릭타입> [반환타입] [메소드명]([제네릭타입] [파라미터])
public <T> T foo(T bar) { ... }

Static Generic Method

class Foo<E> {
    // 위의 E와 다른 타입
    static <E> E bar(E bar) { ... }
}

Foo<String> foo = new Foo<String>(); // E = String
Foo.bar(1L) // E = Long
  • static method는 객체 생성 전에 메모리에 이미 올라가 있기 때문에 별도로 선언해줘야 함

extends, super, ?

extends

// T와 T의 자식 타입만 가능
<K extends T> // 정의되는 타입을 K로 지정
<? extends T> // 따로 generic 지정하지 않음

<K super T> // T와 T의 부모 타입만 가능
<?> // 모든 타입 가능 (= <? extends Object>)

0개의 댓글