-
CHAPTER 12. (1) ★ 제네릭스란? ( 타입변수, 제네릭 타입 다형성 포함)java/ㄴ CHAPTER 12. 제네릭스, 열거형, 애너테이션 2020. 4. 23. 15:20
★
제네릭스Generics
- (다양한 타입의 객체)들을 다루는 메서드, 클래스 에서 컴파일 할 때 타입을 체크 해주는 기능
=> 객체 타입을 컴파일 시에 체크하기 때문에 타입 안정성 증가, 형변환 번거로움 감소
- 저장된 객체 반환 시 형변환 필요 없음
ㄴ 왜? 이미 어떤 타입 객체가 저장되어 있는지 알고 있기 때문
사용법
1. 객체, 배열 등 생성 시 저장할 객체의 타입 지정
2. 지정 타입 외에 다른 타입 객체 저장하면 오류 발생
장점
- 타입 안정성 제공
- 자동 타입 체크
- 형변환 생략 가능 (코드 간결화)
=> 같은 객체만 담겼다는 확신을 주기 때문에 타입 안정성 증가, 형변환을 해줬어야 하는 번거로움이 줄어듬
타입 변수 (타입 매개변수)
- 클래스 옆의 <> 안에 있는 요소
- 일반적으로 Type의 앞글자를 사용(T)
- 굳이 T가 아닌 다른 것을 사용해도 무방 (ex.Element 타입 변수 이름 E)
- 여러 개인 경우 콤마, 로 구분 (ex.Map<K, V>)
1. 기존에는 Object 타입 참조변수 많이 사용
2. 그로 인한 형변환 불가피
=> 이젠 원하는 타입 지정만 하면 가능
★
제네릭 타입 다형성
1. 지네릭 클래스 객체 생성시
참조변수에 지정한 지네릭 타입 과
생성자에 지정한 지네릭 타입 은 일치해야 함
ex.
ArrayList list = new ArrayList(); // 일치
ArrayList list = new ArrayList(); // 오류, 불일치
2. 클래스 간에 다형성 적용은 가능하나, 이 경우에도 지네릭 타입은 일치해야 함
ex.
List list = new ArrayList(); // 가능, 다형성, ArrayList가 List를 구현
List list = new LinkedList(); // 가능, 다형성, LinkedList가 List를 구현
3. 자손 객체만 저장하려면?
Product인 ArrayList 생성, 후에 ArrayList에 Product 자손 객체를 저장하는 식
ex.
ArrayList list = new ArrayList();
list.add(new Product());
list.add(new Tv()); // 가능
list.add(new Audio()); // 가능
ㄴ 단, 객체를 꺼낼 때 형변환 필요
Product p = list.get(0); // 본인 객체는 형변환 필요 없음
Tv t = (Tv) list.get(1); // Product 자손 객체들은 형변환 필요
HashMap<K, V>
- 데이터를 키와 값 형태로 저장하는 컬렉션 클래스
- 지정해야 할 타입 두개 (콤마,로 구분)
- K, V는 임의의 참조형 타입을 의미
ex.
HashMap<String, Student> map = new HashMap<String, Student>();
map.put("학생", new Student("학번", 100, "성적", 1));'java > ㄴ CHAPTER 12. 제네릭스, 열거형, 애너테이션' 카테고리의 다른 글
CHAPTER 12. (4) 열거형이란? (애너테이션 포함) (0) 2020.04.23 CHAPTER 12. (3) 와일드 카드란? (제네릭 메서드 포함) (0) 2020.04.23 CHAPTER 12. (2) 제한된 제네릭 클래스란? (제네릭스 제약 포함) (0) 2020.04.23