Generic in java, what is the raw type?


IT Story/프로그래밍이야기 2013. 10. 18. 11:34




Generic in Java


Generic이란 단어의 의미를 찾아보면 '포괄적인/추상적인'이란 뜻을 마주하게 됩니다. 

Generic programming이 Java에 들어오게 된건 J2SE 5.0 (2004년도) 부터입니다.


Generic Programming은 단어의 의미와 같이 '추상적인'형태로 표현을 하는 프로그래밍 기법입니다. 

자바에서는 이를 위해 제네릭 타입과 메소드를 제공하며 C++의 그것과 유사한점이 있지만 차이점도 많이 가지고 있습니다. 


제네릭 프로그래밍을 씀으로써 얻어지는 장점(C++ 템플릿과 비교하여)은, 


 컴파일 시 타입체킹이 가능하다. 

 하나의 컴파일 된 코드를 생성한다. 

 컴파일된 라이브러리만 존재하면 동작이 가능하다. 


세가지로 이야기를 할 수 있습니다.


제네릭 클래스, 인터페이스, 메소드는 < > 를 이용해서 표현합니다. 


class GenericTest<T>

   {

      

   }


위와 같이 <T>로 표현하는 T는 다른 형식으로 변환이 가능한 포멀 파라미터 타입 (Formal Parameter Type)이라고 부릅니다. 


위와 같이 정의 된 제네릭 클래스를 생성해서 사용할 수 있으며 실제로 제네릭타입의 GenericTest클래스를 사용할때에는 

 GeneriTest<Integer> 등 원하는 타입을 넣어서 만들 수 있습니다. 


이 때 실제적으로 호출할 때 T안에 들어가는 타입을 Actual Type Argument라고 부릅니다. 


 안드로이드에서 가끔 generic type이라는 lint를 볼 수 있는데, 이 때 말해지는 generic type은 "제네릭 클래스에서 타입파라미터를 사용하지 않는 것을 rawType"이라고 합니다. 

 Java document에서는 Raw Types에 대한 정의를

 

 * generic type으로 선언되어 있는데, actual type parameter가 없이 선언이 되어있을 경우 


public class MyType<E> {
    class Inner { }
    static class Nested { }

    public static void main(String[] args) {
        MyType mt;          // warning: MyType is a raw type
        MyType.Inner inn;   // warning: MyType.Inner is a raw type

        MyType.Nested nest; // no warning: not parameterized type
        MyType<Object> mt1; // no warning: type parameter given
        MyType<?> mt2;      // no warning: type parameter given (wildcard OK!)
    }
}

위와 같이 generic class인 MyType에서 

 MyType mt 와 MyType.Inner 는 Actual type parameter가 없기 떄문에 rawType의 경고가 뜨게 됩니다. 

 하지만 generic안에서 static으로 선언되어 있는 변수는 MyType.Neested로 접근을 해도 경고가 뜨지 않습니다. 

 -> static 변수는 rawType이 아닌 이유는, static을 선언한 것들은 class를 load할 때 이미 메모리에 올라가있습니다. instance를 생성하는 generic Type이 아니라 이미 메모리에 올라가 있기 때문에, rawType이 아니게 됩니다.


 

삼성전자 갤럭시 S20 플러스 자급제폰, 코스믹 그레이, 256GB Apple 에어팟 프로 (노이즈캔슬링 방수 블루투스 5), MWP22KH/A, 단일 색상 삼성전자 갤럭시탭S6 10.5 128G WIFI, SM-T860N, 마운틴 그레이

WRITTEN BY
ShakeJ

트랙백  0 , 댓글  0개가 달렸습니다.
secret