Java - 제네릭

이새봄·2022년 9월 4일

Java

목록 보기
7/11

이 글은 이것이 자바다를 참고하여 작성되었습니다.

제네릭 타입(class<T>, interface<T>)

  • 제네릭 타입 : 타입을 파라미터로 가지는 클래스와 인터페이스.
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}

제네릭 메소드(<T,R> R method(T t))

  • 제네릭 메소드 : 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드.
    public <타입파라미터,...> 리턴타입 메소드명(매개변수,...) {...}
  • 리턴 타입 앞에 <> 기호를 추가하고 타입 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다.

제네릭 메소드를 호출하는 방법

  • 리턴타입 변수 = <구체적 타입> 메소드명(매개값);
    // 명시적으로 구체적 타입을 지정
  • 리턴타입 변수 = 메소드명(매개값);
    // 매개값을 보고 구체적 타입을 추정

제한된 타입 파라미터

(<T extends 최상위타입>)

public (T extends 상위타입) 리턴타입 메소드(매개변수,...){...}

  • 상위타입은 클래스뿐만 아니라 인터페이스도 가능하다.
  • 인터페이스라고 해서 implements를 사용하지 않는다.
  • 타입 파라미터에 지정되는 구체적인 타입은 상위 타입이거나 상위 타입의 하위 또는 구현 클래스만 가능하다.
  • 메소드의 중괄호 {} 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)로 제한된다. 하위 타입에만 있는 필드와 메소드는 사용할 수 없다.

와일드카드 타입

(<?>, <? extends ...>, <? super...>)

코드에서 ?를 일반적으로 와일드카드(wildcard)라고 부른다.

  • 제네릭타입<?> : Unbounded Wildcards (제한 없음)
  • 제네릭타입<? extends 상위타입>
    : Upper Bounded Wildcards (상위 클래스 제한)
  • 제네릭타입<? super 하위타입>
    : Lower Bounded Wildcards (하위 클래스 제한)

제네릭 타입의 상속과 구현

public class ChildProduct<T,M,C> extends Product<T,M>{...}

  • 자식 제네릭 타입은 추가적으로 타입 파라미터를 가질 수 있다.
  • 제네릭 인터페이스를 구현한 클래스도 제네릭 타입이 된다.

0개의 댓글