티스토리 뷰
13.1 제네릭이란?
- 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구제적인 타입으로 대체시키는 기능
- 타입 파라미터는 클래스 및 인터페이스만 가능 -> int가 아니라 Integer를 사용하는 이유
public class BoxDemo {
public static void main(String[] args) {
// 실제로 사용할 때 어떤 타입으로 사용할지 지정
Box<String> boxString = new Box<>();
boxString.content = "문자열";
//동일한 타입으로 호출할 경우에는 생성자 호출 시 타입 생략 가능
Box<Integer> boxInt = new Box<>();
boxInt.content = 100;
}
}
// 클래스 선언시에는 어떤 타입을 사용할지 정하지 않는다
class Box<T> {
public T content;
}
13.2 제네릭 타입
- 타입 파라미터는 일반적으로 대문자 알파벳 한 글자로 표현
- 외부에서 제네릭 타입을 사용하려면 타입 파라미터에 구체적인 타입을 지정해야 한다.
- 지정하지 않으면 Object타입이 암묵적으로 사용됨 -> Object가 가지고 있는 메소드 사용 가능
13.3 제네릭 메소드
- 타입 파라미터를 가지고 있는 메소드
- 리턴 타입 앞에 < > 기호를 구하아여 정의한 뒤, 리턴 타입과 매개변수 타입으로 사용 가능
public <T..> 리턴타입 메소드명(매개변수..) { }
13.4 제한된 타입 파라미터
- 타입 파라미터를 대체하는 구체적인 타입을 제한할 필요가 있음
- 특정 타입과 자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터를 제한된 타입 파라미터 라고 함
- 클래스 뿐만 아니라 인터페이스도 가능 -> implements를 사용하지 않음
public <T extends 상위 타입> 리턴 타입 메소드명(매개변수...) { }
13.5 와일드카드 타입 파라미터
- 어떤 타입이든 가능
리턴타입 메소드명(제네릭타입<?> 변수) { }
void register(List<?> list) { }
- 하위 타입만 가능
리턴타입 메소드명(제네릭타입<? extends ~ > 변수) { }
void register(List<? extends Number> list) { }
//Number 의 하위 타입만 가능
- 본인 혹은 상위 타입만 가능
리턴타입 메소드명(제네릭타입<? super ~ > 변수) { }
void register(List<? super Integer> list) { }
// Integer 혹은 상위 타입만 가능
'도서 및 강의 > 이것이 자바다' 카테고리의 다른 글
이것이 자바다 3판 챕터 15 (0) | 2024.09.18 |
---|---|
이것이 자바다 3판 챕터 14 (1) | 2024.09.18 |
이것이 자바다 3판 챕터 12 (0) | 2024.09.18 |
이것이 자바다 3판 챕터 11 (0) | 2024.09.18 |
이것이 자바다 3판 챕터 10 (1) | 2024.09.18 |
최근에 올라온 글