intellij 에서 java 코드를 쓰는 중간에 아래와 같은 경고가 나오는 것을 볼 수 있다.

결론

Raw Type은 작업하기 어렵고, 버그를 일으킬 수 있습니다. 가능하면 Raw Type으로 작성하는 일은 지양해야 할 것 같습니다.

Raw use of parameterized class 'List'
List is a parameterized type of interface List while List is a raw type of interface List.

List list = new ArrayList(); // raw type

List<Integer> listIntegers = new ArrayList<>(); // parameterized type

아래와 같은 예시 코드가 있습니다. 빌드 후 실행은 되는 코드 입니다. 하지만, methodB의 파라메터를 보면 List 라는 Raw Type으로 작성이 되어있습니다.
그리고 위와 같은 경고 메세지를 보게 됩니다.

@Test  
public void methodA() {  
    List<String> parameterizedList = new ArrayList<>();  
    parameterizedList.add("Hello Folks");  
    methodB(parameterizedList);  
}  

public void methodB(List rawList) { // raw type!  
    rawList.add(1);  
}}

methodB에 의해서 추가 된 List값을 불러오려고 하면 오류가 납니다. 코드가 컴파일되고(동일한 경고와 함께) 실행될 때 ClassCastException이 발생합니다. 이것은 method get(int index)String 유형의 변수에 할당할 수 없는 Integer를 반환할 때 발생합니다.

public void methodA() {
    List<String> parameterizedList = new ArrayList<>();
    parameterizedList.add("Hello Folks");
    methodB(parameterizedList);
    String s = parameterizedList.get(1);
}

public void methodB(List rawList) {
    rawList.add(1);
}

아래와 같은 methodA에서 methodB에서 실행한 값을 가져오려고 하면 에러가 발생합니다.

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

반응형

+ Recent posts