알수 없는 변수를 받을 때 앞에서는 Object 클래스를 쓴다고 했는데, Object 클래스를 받을 때 주의 사항이 있다.
바로, 변수를 받는 건 좋지만 호출할때 실재하는 자료형으로 다운캐스팅 해주어야 한다는 단점이다.
이를 보다 간단하게 받는 방법이 제네릭이다.
제네릭은 간단하다.
class Data<T>{
T value;
}
public static void main(String[] args) {
Data<String>data=new Data<>();
data.value="문자열";
System.out.println(data.value);
위의 클래스에서는 자료형을 선언하지 않았음에도 main 함수 내에서 클래스를 호출할때, 마찬가지로 <>(꺽쇠)를 열어 선언하고 있다.
제네릭을 짤 때 주의할 점이,
꺽쇠에 들어갈 변수와 선언할 변수가 달라서는 안된다는 점이다.
문자열 말고도 다른 자료형도 선언이 가능하다.
그러나 문자열과 다르게 int는 오류가 난다. 왜냐하면, 제네릭은 반드시 call by reference 형태의 자료형만 받기 때문이다.
이를 위해서 자바에서는 래퍼(Wrapper)클래스를 제공한다. 이 클래스는 일반 자료형들을 주소를 받는 클래스 자료형으로 변경할 수 있다.
Wrapper class 의 문법은 다음과 같다.
byte | Byte |
int | Integer |
long | Long |
char | Char |
float | Float |
double | Double |
short | Short |
boolean | Boolean |
이 Wrapper class를 <> 내에 넣어보자.
다음처럼 오류가 나지 않는다.
Data<Integer>data2=new Data<>();
data2.value=10;
System.out.println(data2.value);
제네릭은 두 개를 설정할 수도 있다.
class Str<K,V>{
K k;
V v;
}
Str<String,String>s=new Str<>();
s.k="비밀번호";
s.v="bitc5600";
System.out.println(s.k);
System.out.println(s.v);
두개는 마찬가지로 ,(콤마)로 동시에 넣을 수 있는데, 이 때 우항의 꺽쇠는 비워도 무방하다.
반응형
'JAVA' 카테고리의 다른 글
13. 접근지정자 (0) | 2020.04.06 |
---|---|
JAVA 실습 8. 객체 지향, 제네릭과 컬렉션을 이용한 커피숍 만들기. (0) | 2020.04.03 |
12. 컴포지션 (0) | 2020.04.03 |
11. 인터페이스 (0) | 2020.03.31 |
10. 추상 클래스/추상 매서드 (0) | 2020.03.31 |