[JAVA] 제네릭(Generic) 정리

2020. 8. 3. 14:59Programming Language/JAVA

반응형

제네릭(Generic)

다양한 타입의 객체에 재사용을 높일 수 있는 기법으로 클래스에서 사용할 타입을 외부에서 설정하는 것


제네릭 타입

제네릭 타입은 원하는 데로 지정해도 되지만, 암묵적인 약속처럼 공통적으로 자주 사용하는 타입인자

타입 인자 의미
E Element
K Key
N Number
T Type
V Value
R Result

※ 특징 3가지

1. 객체 생성이 가능한 타입에 대해서만 제네릭 사용이 가능하다.

18행 : Wrapper 클래스인 Interger 클래스를 제네릭 타입으로 지정하면 에러가 발생하지 않는다.

21행 : 기본 자료형인 int형으로 제네릭 타입으로 지정하면 에러가 발생한다. 

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com


2. 객체의 타입을 컴파일 시점에서 체크하기 때문에 타입 안정성을 높이고, 형변환의 번거러움을 줄인다.

1) 비교를 위해 두 클래스 준비

  • 제네릭 클래스
  • Object 클래스형 인스턴스 변수를 갖는 클래스

2) 비교 작업

35행 : 제네릭 타입이 String 형이기 때문에 Integer형 데이터를 입력하면 에러가 발생한다.

38행 : 제네릭의 경우 강제 형변환을 하지 않아도 된다.

43행 : set 메서드를 통해 obj는 String 형으로 형태가 정해진다.

45행 : get 메서드를 통해 obj를 반환하여 String 형태로 변환할 경우 강제 형변환(다운캐스팅)이 필요하다. 

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com


3. 와일드 카드<?> 제한 

표현 설명
<?> 타입 제한이 없다. <? extends Object>와 동일 기능
<? extends T> T 와 T를 상속받는 하위 클래스만 사용 가능
<? super T> T 와 T의 부모 클래스만 사용 가능

21행 : 파라미터로 제네릭 타입이 Object 이거나 Object의 자식 클래스는 모두 지정 가능

22행 : 파라미터로 제네릭 타입이 Pet 형 이거나 Pet의 자식 클래스는 모두 지정 가능

23행 : 파라미터로 제네릭 타입이 Dog 형 이거나 Dog의 부모 클래스는 지정 가능

 

※ 상세설명은 main 메서드의 내용 참고

 

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com

반응형