ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 지네릭 형변환
    공부/Java 2024. 4. 28. 23:49

    지네릭 형변환

     

    - 지네릭 타입과 원시 타입 간의 형변환은 가능하지만 바람직하지 않다. (경고 발생)

     

    예제

    Box<Object> objBox  = null;
    Box box = (Box)objBox;
    objBox = (Box<Object>)box;
    
    Box<String> strBox = null;
    
    //objBox = (Box<Object>)strBox;     // 에러. 대입된 타입이 다른 지네릭 타입 간에는 불가

    지네릭 타입과 넌지네릭 타입은 타입캐스팅을 통해 형변환이 가능하지만, 생략이 불가능하고 반드시 작성해야 한다.

    또한 대입된 타입이 다른 지네릭 타입 간에는 형변환이 불가능하다.

     

    - 와일드 카드가 사용된 지네릭 타입으로는 형변환이 가능하다.

     

    예제

    Box<? extends Object> wBox = (Box<? extends Object>) new Box<String>();
    Box<? extends Object> wBox = new Box<String>();		// 위 문장과 동일

    두 문장은 같은 의미다.

    Object와 그 자손이 모두 포함되기 때문에, 지네릭 타입<String>으로 형변환이 가능해진다.

     

     

    ※ 지네릭 타입의 제거

     

    - 컴파일러는 지네릭 타입을 제거하고, 필요한 곳에 형변환을 넣는다.

    1) 지네릭 타입의 경계(bound)를 제거한다.

    ※ 하위호환성을 위해서 (안정성 때문)

    2) 지네릭 타입을 제거한 후에 타입이 일치하지 않으면, 형변환을 추가한다.

    3) 와일드 카드가 포함된 경우, 적절한 타입으로 형변환을 추가한다.

     

    → 컴파일 과정에서 지네릭스는 결국 삭제된다.

        개발자의 편의를 위해 개발되었지만, 형변환은 필요하기 때문이다.

    '공부 > Java' 카테고리의 다른 글

    열거형에 멤버 추가하기  (0) 2024.04.30
    열거형(enum)  (0) 2024.04.29
    지네릭 메서드  (0) 2024.04.25
    와일드 카드  (0) 2024.04.25
    제한된 지네릭 클래스, 지네릭스의 제약  (0) 2024.04.24
Designed by Tistory.