chapter 13 제네릭(generic)
: type parameter
ArrayList : generic type
라고 부르지만 사용하다보면 명칭생각 안하고 사용하게 될거 같아용
collection : 다른객체를 담고 있는 객체
p13.notgeneric
Ex01
참조타입은 변환에서 크기 유무 상관 X
getItem은 Object로 리턴 받았으니깐 String으로 사용하려면 강제 형변환 해야됨
결과값
스트링으로 리턴 받은 "html"을 Integer로 형변환하려고 하면 ClassCastException 일어남
Integer 는 String 이 아니니깐
p01generic;
Class Ex01
private Object item; // 모든 객체를 받게 하려고
Object가 ClassCastException 안나오도록 타입을 정해주고 싶었어
class Box { // T가 타입이 정해져 있지않음 <> 안에 다른 알파벳 가능 근데 관습상 Tyte의 약자 T를쓰긴함
private T item;
}
클래스를 정의할 때 타입이 정해져 있지 않은데
main에서 사용할때 내가 타입을 정해줄 수있다
관습상 하나의 대문자를 씀
타입이 여러개 일 경우 T를 중심으로 알파벳 순서대로 쓰긴함
<> 사용하면 강제 형변환을 안해도 되고 코드가 간결해짐
Class Box에 get,set메서드 만들면 (notgeenric에서 Object가 T로 바뀜)
생성할때도 타입명칭을 넣어줘야함
genericEx01 다 표현 되있는것
예를 들어 보면
ex) Interface Comparable
T가 나중에 결정 된다.
p01generic;
class Ex02
타입T 는 T로 타입U, U로 아래그림은 예시
class Container<T,U> 에 get,set 메서드 만들고
main에서 사용 할때 명시
아래그림은 setItem1 은 String 받고 setItem2는 Integer 받는걸 보여줌
생성과 동시에 선언 가능
생성자에도 사용 가능하다.
Container<String,Integer> c1; //두줄로 표현
c1 = new Container<String,Integer>();
Container<Double, int[]> c2 = new Container<Double, int[]>(); //한줄로 표현
타입 파라미터가 복잡해서 타입파라미터가 추정될수 있으면 생략이 가능
import java.util.List;
Container를 생성할떄 newContainer<>(); 으로 사용 가능
Container<Double, int[]> c2 = new Container<Double, int[]>();
Container<Double, int[]> c2 = new Container<>(); // 같다고 추정되어서 생략 가능 한 경우
이런경우도 있다는걸 맛만 보자 (나중에 배울것)
'Java 공부 > 자바 공부 (baek)' 카테고리의 다른 글
2021-09-16 (0) | 2021.09.16 |
---|---|
2021-09-15 15장 컬렉션 프레임워크01 (0) | 2021.09.15 |
2021-09-14 (0) | 2021.09.14 |
2021-09-13_01 (0) | 2021.09.13 |
2021-09-13 (0) | 2021.09.13 |