Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- java set 저장
- java기본자료형
- java알고리즘문제풀이
- 격파르타합격후기
- java map 저장
- javaJVM
- 비전공자sqld
- 격파르타비전공자
- java list 저장
- 프로그래머스제일작은수
- java set 출력
- javaJRE
- java map
- java알고리즘
- java 자료구조 활용
- java list 출력
- 격파르타후기
- java최솟값구하기
- 프로그래머스
- 코딩부트캠프후기
- java참조자료형
- 격파르타장점
- 작은수제거하기
- 항해99후기
- 컴파일
- 항해15기
- java map 출력
- 노베이스부트캠프
- 인터프린터언어
- sqld자격증합격
Archives
- Today
- Total
코딩과 결혼합니다
231019 - 자바의 정석 chapter 12 (Generics) 본문
728x90
⭐Generics란?
- 컴파일 시 타입을 체크해 주는 기능 - JDK1.5
- 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
⭐타입 변수
- 클래스를 생성할 때, Object타입 대신 타입 변수를 선언해서 사용
- 객체를 생성 시, 타입 변수(E) 대신 실제 타입을 지정(대입)
- 타입 변수 대신 실제 타입이 지정되면, 형변환 생략가능
⭐Generics 용어
Box <T> 지네릭 클래스, 'T의 Box' 또는 'T Box'라고 읽는다.
T 타입변수 또는 타입 매개변수
Box 원시타입 (raw type)
⭐Generics 타입과 다형성
- 참조 변수와 생성자의 대입된 타입은 일치해야 한다.
ArrayList<TV> list = new ArrayList<TV>(); // ok, 일치
ArrayList<Product> list = new ArrayList<TV>(); // 에러, 불일치
- 지네릭 클래스 간의 다형성은 성립
List<TV> list = new ArrayList<TV>(); // ok, 다형성, arrayList가 list를 구현
- 매개변수의 다형성도 성립
ArrayList<Product> list = new ArrayList<Product>();
list.add(new Product());// ok
list.add(new TV()); // ok, Product의 자손 클래스도 저장 가능하다.
⭐Iterator <E>
- 클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용
⭐HashMap <K, V>
- 여러 개의 타입 변수가 필요한 경우, 콤마를 구분자로 선언
HashMap<String, Student> map = new HashMap<Sting, Student>();
map.put("자바왕", new Student("자바왕",1,1,100,100,100));
⭐제한된 제네릭 클래스
- extends로 대입할 수 있는 타입을 제한
- 인터페이스인 경우에 extends사용
Class FruitBox<T, extends Fruit> {
ArrayLisst<T> list = new ArrayList<T>();
...
}
FruitBox<Apple> appleBox = new FruitBox<Apple>();
FruitBox<Toy> toyBox = new FruitBox<Toy>(); //에러
⭐제네릭스의 제약
- 타입 변수에 대입은 인스턴스별로 다르게 가능
- static 멤버에 타입 변수 사용 불가
- 배열 생성할 때 타입 변수 사용 불가. 타입 변수로 배열 선언은 가능
T[] itemArr; //ok
T[] to Array(){
T[] tmpArr = new T[itemArr, length]; //에러
...
⭐와일드카드 <?>
- 하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능
⭐제네릭 메서드
- 제네릭 타입이 선언된 메서드(타입 변수는 메서드 내에서만 유효)
- 클래스의 타입 매개변수 <T>와 메서드의 타입 매개변수 <T>는 별개
- 메서드를 호출할 때마다 타입을 대입해야 한다.(대부분 생략 가능)
- 메서드를 호출할 때 타입을 생략하지 않을 때는 클래스 이름 생략 불가
⭐제네릭 타입의 형변환
- 제네릭 타입과 원시 타입 간의 형변환은 바람직하지 않다.(경고 발생)
- 와일드카드가 사용된 제네릭 타입으로는 형변환 가능
⭐제네릭 타입의 제거
- 컴파일러는 제네릭 타입을 제거하고, 필요한 곳에 형변환을 넣는다.
- 제네릭 타입의 경제를 제거
- 제네릭 타입 제거 후에 불일치하면, 형변환을 추가
- 와일드카드가 포함된 경우, 적절한 타입으로 형변환 추가
'2세 > Java' 카테고리의 다른 글
[자바의 정석] chapter 13 : 쓰레드 (0) | 2023.10.27 |
---|---|
231020 - 자바의 정석 chapter 12 (열거형, 애너테이션) (0) | 2023.10.20 |
231015 - 자바의 정석 chapter 11 (컬렉션 프레임워크2) (0) | 2023.10.15 |
231014 - 자바의 정석 chapter 11 (컬렉션 프레임워크) (2) | 2023.10.14 |
230926 - 자바의 정석 chapter 10 (날짜와 시간 & 형식화) (0) | 2023.09.27 |