티스토리 뷰

반응형

목차

  1. 제네릭 메소드 : <T,R> R method(T t)
  2. 제한된 타입 파라미터 : <T extends 최상위타입>
  3. 와일드카드 타입 : <?>, <? extends ...>, <? super ...>
  4. 제네릭 타입의 상속과 구현

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

* 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드

 

* 제네릭 메소드 선언 방법

- 리턴 타입 앞에 "<>"기호 추가 ➡️ 타입 파라미터 기술

- 타입 파라미터를 리턴 타입과 매개변수에 사용

public<타입파라미터,...> 리턴타입 메소드명(매개변수, ...){...}

public<T> Box<T> boxing(T t){...}

 

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

리턴타입 변수 = <구체적타입> 메소드명(매개값);
Box<Integer> box = <Integer> boxing(100);	//타입 파라미터를 명시적으로 지정
리턴타입 변수 = 메소드명(매개값);
Box<Integer> box = boxing(100);	//매개값100을 보고, 구체적 타입을 Integer로 추정

제한된 타입 파라미터 : <T extends 최상위타입>

* 타입 파라미터에 지정되는 구체적인 타입 제한할 필요가 있음 

- 숫자를 연산하는 제네릭 메소드는 매개값으로 : Number / Byte, Short, Integer, Long, Double만 가져야 함

 

* 상속 및 구현 관계 이용해 타입 제한

- 상위 타입은 클래스 뿐만 아니라 인터페이스도 가능 (implements 사용X)

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

 

* 타입 파라미터를 대체할 구체적인 타입

- 상위 타입이거나 하위 또는 구현 클래스만 지정 가능

- 메소드의 { } 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)만 가능

- 하위 타입에만 있는 필드, 메소드는 사용 X


와일드카드 타입 : <?>, <? extends ...>, <? super ...>

* 와일드카드(wildcard)  : 코드에서 '?'를 부를때 사용

* 제네릭타입<?> : 제한 없음

- 타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있다.

- Course<?> 모든 타입이 될 수 있음 : Person, Worker, Student, HighStudent

 

* 제네릭 타입<? extends 상위타입>  : 상위 클래스 제한

- 타입 파라미터를 대치하는 구체적인 타입으로 상위 타입이나 하위 타입만 올 수 있다.

-Course<? extends Student> : Student, HighStudent : Student를 상속받는 클래스와 자기 자신만 넣을 수 있음

 

* 제네릭 타입<? extends 하위타입>  : 하위 클래스 제한

- 타입 파라미터를 대치하는 구체적인 타입으로 하위 타입이나 상위 타입이 올 수 있다.

- Course<? super Worker> : Worker, Person  : Worker의 부모 클래스와 자기 자신만 넣을 수 있음


제네릭 타입의 상속과 구현

* 제네릭 타입을 부모 클래스로 사용할 경우

- 타입 파라미터는 자식 클래스에도 기술해야 함

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

 

- 추가적인 타입 파라미터를 가질 수 있음

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

 

* 제네릭 인터페이스를 구현할 경우

- 제네릭 인터페이스를 구현한 클래스도 제네릭 타입

반응형
댓글