-
14주차 과제: 제네릭 #14JAVA 기본 2021. 3. 1. 01:47728x90
목표
자바의 제네릭에 대해 학습하세요.
학습할 것 (필수)
- 제네릭 사용법
- 제네릭 주요 개념 (바운디드 타입, 와일드 카드)
- 제네릭 메소드 만들기
- Erasure
포괄적인, 일반적인
클래스 내부에서 사용할 데이터타입을 나중에 생성하는것
class Person<T>{
public T info;
}
Person<String> p1 = new Person<String>();
class선언할때 데이터 타입을 임의로T로 만들고
실제로 인스턴스화 할때 String을 넣어서 사용
왜 사용하는가?
타입이 안전하지 않을때 오류가 남 ==
클래스에 데이터 타입이 일치하지 않아도 컴파일 되는 경우가 있다
그럴 경우 오류가 발생하지만 컴파일 타입에서 확인이 불가함
그래서 제네릭을 사용하여 나중에 데이터 타입을 정의 하는것
복수의 제네릭
여러개의 데이터 타입을 정의 하지 않을때
기본 데이터 타입은 올수 없고 참조 데이터 타입만 와야함
기본 데이터 타입이 올려면 레퍼클래스 사용
+wrapper class란
기본데이터 타입을 마치 객체인것처럼 만드는 것
int는 integer
double은 Double
class Person<T, S>{
public T info;
public S id;
Person(T info, S id){
this.info = info;
this.id = id;
}
}
public static void main(String[] args) {
integer id = new integer(1);
Person<EmployeeInfo, integer> p1 = new Person<EmployeeInfo, integer>(new EmployeeInfo(1), id);
}
제네릭의 생략
생성자의 매개변수를 통해서 제네릭을 사용하지 않아도 자바는 테이터 타입을 알수 있다.
Person<EmployeeInfo, integer> p1 = new Person<EmployeeInfo, integer>(new EmployeeInfo(1), id);
== Person p1 = new Person(e, i);
제네릭 메소드 만들기
public <U> void printinfo(U, info){
System.out.println(info);
}
메소드 안에서 u로 지정된 타입이 메소드의 타입이 된다.
사용
p1.<EmployeeInfo>printInfo(e)
==p1.printinfo(e)
생략 가능
제네릭의 제한
제네릭 바운디드 타입
자식 클래스의 데이터 타입으로 부모클래스의 데이터 타입만 오고 싶으면 extends 를 사용
class Person<T extends Info>{
public T info;
Person(T info){ this.info = info; }
}
제네릭 와이드 카드
<? extends T> : 와일드카드의 상위타입을 제한하는 것으로 T의 하위 타입 클래스만 사용 가능
<? suepr T> : 와일드카드의 하위타입을 제한하는 것으로 T의 상위 타입 클래스만 사용 가능
<?> : 모든 타입이 가능한 것을 말한다.
Erasure
Erasure란 타입 파라미터를 컴파일 타임에만 검사하고, 런타임 시에는 해당 타입 정보를 알 수 없게 하는 것을 말한다.
'JAVA 기본' 카테고리의 다른 글
Servlet의 기본구성 (0) 2021.05.02 15주차 과제: 람다식 #15 (0) 2021.03.05 13주차 과제: I/O #13 (0) 2021.02.28 12주차 과제: 애노테이션 #12 (0) 2021.02.28 11주차 과제: Enum #11 (0) 2021.02.28