제네릭 : 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 됨 

   컬렉션, 람다식, 스트림, 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

+ Recent posts