제네릭스
: 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능.
객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
장점
- 타입 안정성을 제공.
- 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
용어정리
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 |