Java

[Java] 제네릭 메서드 / 제한된 파라미터 / 와일드카드

devkmee 2021. 7. 18. 19:48

2021-06-30

kr.or.ddit.basic /T03_GenericMethodTest


1. 제너릭 메서드

  • 선언 방법 :  pulic <  >  리턴타입  메서드명  (매개변수=파라미터)
  • 제너릭 클래스가 아니어도(일반클래스) 제너릭 메서드 사용 가능

 

▶ 제너릭 메서드 사용 예시

 

 


2. 제한된 파라미터 타입

  • 제네릭에 extends 를 지정해서 해당 클래스/메서드 + 그 자손만 올 수 있도록 제한을 건다
  • super는 불가능. 상속만.

>> Number 혹은 Number의 자식 클래스라면,  doubleValue() 를 사용 할 수 있을테니까  extednds Number라고 설정한 것.

 

>> Util2.Compare() 는 Number 혹은 그 자손만 쓸 수 있음

>> String 클래스는 Number를 상속받지 않았으므로 여기 올 수 도없고, doubleValue()도 없음


3. 와일드카드

  • Why? : 타입이 일치하지 않아도 객체 / 변수 / 메서드를 사용 할 수 있다
  • When? : 제너릭 클래스 or 메서드 or 인터페이스 선언 할 때 전달인자(Argument)로 사용

 

▶ 종류

  • <? extends T> --> 와일드 카드의 상한 제한. T와 그 자손들만 가능
  • <? super T> ----> 와일드 카드의 하한 제한. T와 그 조상들만 가능  少
  • <?> ------------> 허용 가능한 모든 타입 가능. <? extends Object>

 

▶ 사용 예시

>> 부모 클래스 Fruit  와 상속받은 Grape  / Apple 클래스

 

 

 

>> 부모 클래스 객체인 과일상자엔 자식(사과/포도) 담기 가능

>> 형제 클래스 객체인 사과상자엔 포도 불가능

 

 

extends ?  extedns T 차이점 (제너릭 T / 와일드카드 차이점)

  • T는 제너릭 클래스를 생성(선언) 할 때 반드시 타입을 알려줘야 함
  • ?는 사용 할 때도 아직 모름 (제너릭한 객체를 생성 할 때 알려줌)
  • ---> 컴파일 에러만 막아줌
  • ---> 어떤 타입을 꺼내야 할지 모르기 때문에 이 상태로는 실행 불가

 

▶extends T

>> 리턴타입 : 과일을 상속받은 T

>> 파라미터 : 과일을 상속받은 T를 담은 과일상자(List)