본문 바로가기

Languages/JAVA

Java 제네릭스(Generics)

제네릭스

 : 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능.

 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.

장점
 - 타입 안정성을 제공.
 - 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.

용어정리

Box<T> 제네릭 클래스. 'T의 Box' 또는 'T Box'라고 읽는다.

T          타입 변수 또는 타입 매개변수.(T는 타입문자)

Box       원시 타입 (row type)

 

T는 메서더의 매개변수와 유사한 면이 있다.

 

다형성

 : 제네릭 클래스의 객체를 생성할 때, 참조변수에 지정해준 제네릭 타입과 생성자에 지정해준 제네릭 타입은 일치해야 한다. 상속관계에 있어도 일치해야 한다.

 

Iterator<E>

Iterator에도 제니릭스가 적용되어 있다.

제네릭스가 도입되면서 기존의 소스에 Object가 들어간 클래스는 전부 이런 식으로 바뀌었다고 보면 된다.

 

제한된 제네릭 클래스

 : 제네릭 타입에 'extends'를 사용하면, 특정 타입의 자손들만 대입할 수 있게 제한할 수 있다.

 

클래스 Fruit의 자손이면서 eatable인터페이스도 구현해야 한다면 아래와 같이 '&'기호로 연결한다.

제네릭의 제약

 : 모든 객체에 동일하게 동작해야하는 static멤버에 타입 변수 T를 사용할 수 없다.

   T는 인스턴스변수로 간주되기 때문이다. 

   제네릭 타입의 배열을 생성하는 것도 허용되지 않는다.

 

new 연산자 때문, 이 연산자는 컴파일시 타입T가 뭔지 정확히 알아야 한다.

instancdof 연산자도 new 연산자와 같은 이유로 T를 피연산자로 사용할 수 없다.

 

 

와일드 카드

 : 제네릭 클래스 생성시, 참조변수와 생성자에 지정된 제네릭 타입은 일치해야 된다.

   제약을 자식, 부모로까지 늘려준다.

 

 

 

 

 

'Languages > JAVA' 카테고리의 다른 글

Java 쓰레드 (진행중)  (0) 2020.04.09
열거형(enum), 어노테이션  (0) 2020.04.08
컬렉션 프레임웍  (0) 2020.04.06
java.lang 클래스  (0) 2020.04.02
예외처리  (0) 2020.03.31