코딩테스트/자바 스터디

Main.java uses unchecked or unsafe operations. 경고 대처법

승요나라 2024. 11. 8. 23:07

BFS 문제를 푸는 과정에서 uses unchecked or unsafe operations 경고가 떴다.

경고를 발생시킨 코드는 아래와 같다.

// 각 노드의 연결 관계를 저장할 리스트 배열 생성 (1부터 n까지 사용)
        LinkedList<Integer>[] linkedLists = new LinkedList[n+1];
        for (int i = 1; i <= n; i++){
            linkedLists[i] = new LinkedList<>();
        }

 

 

uses unchecked or unsafe operations 경고의 대표적인 원인은 이러하다.

  • 제네릭 타입 미지정: 제네릭 타입을 명시하지 않은 경우 컴파일러가 타입 안전성을 보장할 수 없다고 판단한다.
  • 제네릭 배열 생성: 예를 들어 LinkedList<Integer>[]와 같은 제네릭 배열은 Java에서 안전하지 않다고 간주되어 경고를 발생시킨다.

 

따라서, 해당 경고는 주로 제네릭(Generic) 타입을 제대로 사용하지 않았거나, 제네릭 타입의 배열 생성에서 발생하는 문제라고 할 수 있다.

 

 

해결 방법

방법 1: 제네릭 타입 명시하기 (추천⭐)

제네릭 타입을 명확히 지정하면 경고를 피할 수 있다. 예를 들어, 아래와 같이 제네릭을 명시하면 된다.

List<String> list = new ArrayList<>(); // 타입 지정
 
 
 

방법 2: @SuppressWarnings("unchecked") 어노테이션 사용

제네릭 배열 생성 시 경고가 발생한다면 @SuppressWarnings("unchecked")를 사용해 경고를 무시할 수 있다. 다음과 같이 사용하면 된다.

@SuppressWarnings("unchecked")
List<Integer>[] linkedLists = new LinkedList[n+1];
for (int i = 1; i <= n; i++) {
    linkedLists[i] = new LinkedList<>();
}
 
 

 

요약

unchecked or unsafe operations 경고는 Java가 타입 안정성을 중요하게 생각하기 때문에 발생하는 경고이다.

제네릭 타입을 명시하는 방법을 우선으로 하여 코드를 수정하고, 정말 불가피한 경우에만 @SuppressWarnings 어노테이션을 사용하는 것이 좋겠다.