자바 5.0 이후로 추가된 문법이다.
자바에서 제공하는 많은 라이브러리를 활용하려면
제네릭에 대해 이해하고 있어야한다.
많은 라이브러리가 제네릭으로 이루어져있기 때문이다.
제네릭이란
매개변수가 어떤 값이 들어와도 성립하도록 그 때 그 때 바뀌게 만든
쉽게 말하면
모든 값에 대해 이루어 질 수 있게 하는 것이다.
예를 들면
AAA class로 참조 받아야하는 클래스가 있다.
이 클래스는 제네릭이 아닌 그냥 설계한다면
AAA class만 받을 수 있다.
그렇기에 BBB class에 관한 그 클래스를 만들고 싶으면
또 만들어야한다.
하지만 이 것을 제네릭으로 만들면 하나만 만들어도 된다.
그 하나가 AAA 일때는 AAA에 맞춰 생성되고
BBB일 때는 BBB에 맞춰 생성되기 때문이다.
표현 방법은
위는 과일 상자를 제네릭으로 표현한 것이다. < > 안에 T는 기호이다.
저 클래스에 AAA를 참조하려하면 제네릭 클래스 안에 표시한 T기호가 AAA로 바뀌어서 나타내어진다.
문제 21-1
FruitBox<T>클래스에 생성자를 추가해서 코드를 만들어보자.
(생성자 코드 추가)
위 코드는 생성자를 추가한 코드이다.
제네릭 표현으로 클래스 앞에 < > 기호를 쓴것과 아래 표현하고 싶은 클래스를 기호 T로 쓴것을 제외하면
일반적인 표현 방법과 다르지 않다.
제네릭의 문법은 생각보다 복잡하다.
제네릭을 직접 만들 일은 적겠지만,
대신 우리는 제네릭으로 이루어진 라이브러리를 잘 활용해야할 필요가 있다.
제네릭 표현에 제네릭 메소드도 있다.
이 메소드에 참조되는 값은 제네릭클래스와 마찬가지로 전부 올 수 있는데
이렇게 되면 Object 클래스의 메소드만 호출할 수 있게된다.
왜냐하면 모든 경우에 대비해야되기 때문에..
이런 문제점 때문에
참조변수를 제한하는 방법이 있다.
많이 사용되는 배열을 제한하는 방법으로는
ex)
public static <T> void showArrayData(T[] arr)
{ ....
}
[] 의 표현으로 들어오는 타입을 제한할 수 있고
또 추가적으로 arr의 .length라든가 배열의 메서드를 이용할 수 있게된다.
* 와일드 카드
자료형에 상관없이 FruitBox<T>의 인스턴스를 참조하려면
(* 참조 - 난 JAVA를 공부한 적이 없다구요, 윤성우)
'Programing > JAVA 일지' 카테고리의 다른 글
JAVA(14일차) - Thread(쓰레드) (0) | 2016.12.27 |
---|---|
JAVA(13일차) - Collection Framework(컬렉션 프레임워크) (0) | 2016.12.24 |
JAVA(12일차) - (1)Wrapper, BIgInteger, BigDecimal, 난수 생성 함수, 문자열 토큰 (0) | 2016.12.23 |
JAVA(11일차) - (1) 메모리 관리, Object 클래스, clone() (0) | 2016.12.22 |
JAVA(10일차) - (2) 예외처리 (0) | 2016.12.22 |