제네릭 : 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 됨
컬렉션, 람다식, 스트림, NIO 에서 널리 사용.
클래스와 인터페이스, 메소드 정의할 때 타입을 파라미터로 사용할 수 있도록 함
1. 컴파일 시 강한 타입 체크 할 수 있음
: 자바 컴파일러는 코드에서 잘못 사용된 타입때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크 함
실행 시 타입 에러 나는 것보다 미리 타입을 강하게 체크해서 에러 사전에 방지
2. 타입 변환(casting)을 제거 : 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 성능 저하
ex) List list = new ArrayList();
list.add("hello");
String src = (String) list.get(0); //casting 해야 함
-> List list = new ArrayList();
list.add("hello");
String str = list.get(0); //casting 안함
* 제네릭 타입 사용하면 같은 타입의 데이터 타입을 클래스 내에서 쓰면 굳이 타입 정함 필요없이 자유롭게 쓸 수 있어서
- 제네릭 타입(class, interface)
: 타입을 파라미터로 가지는 클래스와 인터페이스. <> 부호 안에 파라미터 위치
- 파라미터 : 변수명과 동일한 규칙 따라 작성 할 수 있지만, 일반적으로 대문자 알파벳 한 글자로 표현
- 멀티 타입 파라미터(class<K,V...), interface<K,V..>) : 제네릭은 두 개 이상의 멀티 타입의 파라미터 사용. ,로 구분
ex) public class Product<T,M> {
private T kind;
private M model; ......
}
main() -> Product<Tv, String>
- 제네릭 메소드 (<T,R> R method(T t))
: 매개 타입과 리턴 타입으로 타입 파라미터 갖는 메소드를 말함.
리턴 타입 앞에 <> 추가해 타입 파라미터를 기술하여, 리턴 타입과 매개 타입으로 타입 파라미터 사용
ex) class Util{
public static Box boxing(T t){
Box box = new Box();
box.set(t);
return box;
}} -> 호출 : main() Box box1 = Util.boxing(100);
int intValue = box1.get();
- 제한된 타입 파라미터 ()
: 타입 파라미터에 지정되는구체적인 타입을 제한할 필요가 종종 있음.
예를 들어 숫자 연산할 때 Number or 하위 클래스 타입만 들어가야함
- 와일드카드 타입 :
<?> : 제한 없음. 타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있음
<? extends ...> : 상위 클래스 제한. 타입 파라미터를 대치하는 구체적인 타입으로 상위 타입이나 하위 타입만 올 수 있음
<? super...> : 하위 클래스 제한. 타입 파라미터를 대치하는 구체적인 타입으로 하위 타입이나 상위 타입이 올 수 있음
- 제네릭 타입의 상속 : public class ChildProduct<T,M> extends Product<T,M> {...}
- 제네릭 타입의 구현 : public interface Storage {..}
public class StorageImple implements Storage{...}
* 제네릭 타입 구현으로 클래스 배열 만들어 클래스 객체 생성하기 가능
-<이것이 자바다1>. 한빛 미디어
'JAVA' 카테고리의 다른 글
제네릭 예제_제네릭 클래스 (0) | 2019.06.20 |
---|---|
제네릭 예제 (0) | 2019.06.20 |
멀티 스레드 예제_ATM(Synchronized) (0) | 2019.06.20 |
멀티 스레드 예제_priority (0) | 2019.06.20 |
멀티 스레드 예제_yield (0) | 2019.06.20 |