@SuppressWarnings( "unchecked" )
이런 처음본게 있었다
찾아보니까
@SuppressWarnings 은
컴파일러 경고를 무시하도록 지시하는 어노테이션이라고한다
generics, deprecation, unused
같은 상황에 컴파일 경고가 발생하는데
의도적으로 경고를 발생시킨것일 수도 있으니
경고를 띄우지 말라는것
unchecked는 제네릭 타입 캐스팅과 관련된 경고임
▼ ▼ ▼ ▼ ▼ ▼ ▼ 제네릭 개념 참고▼ ▼ ▼ ▼ ▼ ▼ ▼
https://dev-emma-dev.tistory.com/301
[Spring boot] Generic
제네릭이 뭐냐면 이다.가장 중요한 개념은 담을 때는 상관 없고, 꺼낼 때가 중요하다 임. Java 5 부터 사용한 기능인데예시로 보는게 이해가 빠름 ㄱㄱ 제네릭을 사용하지 않는 경우List list = new Arr
dev-emma-dev.tistory.com
제네릭 관련된 예를 들면
List list = new ArrayList(); // raw type
list.add("Hello");
List<String> strList = list; // unchecked warning
여기서 컴파일러가 "안전하지 않은 타입 변환이 일어났다(unchecked conversion)" 라는 경고를 띄우는
이때 @SuppressWarnings("unchecked")를 쓰면 이 경고를 무시할 수 있음
경고를 무시해도 되는 경우와 조심해야 하는 경우는
예를 들어보겠다
타입캐스팅 무시해도되는경우 (런타임 시점에 타입이 확실히 보장되는 경우)
@SuppressWarnings("unchecked")
public List<User> getUsers() {
return (List<User>) sqlSession.selectList("UserMapper.getUsers");
}
- MyBatis에서 selectList는 원래 List<?> 같은 걸 반환하지만, 사실상 XML 매핑으로 User 타입이 오는 게 보장됨.
- 컴파일러는 몰라서 경고를 띄우지만, 우리는 확실하다는 걸 알고 있음
조심해야하는 경우 (타입이 확실하지않아 무시하면 런타임에서 ClassCastException 이 발생할 수 있음)
@SuppressWarnings("unchecked")
List<String> list = (List<String>) (Object) Arrays.asList(1, 2, 3);
String s = list.get(0);
- 즉, 경고는 무시해도 실행은 되지만, 잘못된 타입 변환이면 런타임에서 터진다는 점은 주의
(1) Arrays.asList(1, 2, 3)
반환 타입은 List<Integer> 임.
ex. [1, 2, 3]와 같은 List<Integer>
(2) (Object) Arrays.asList(1, 2, 3)
강제로 List<Integer> 를 Object로 업캐스팅
이제 타입 정보가 사라져버림. (Object니까 제네릭 정보 없음)
(3) (List<String>) (Object) ...
Object를 다시 List<String>으로 다운캐스팅
컴파일러는 “Object가 정말로 List<String> 맞나?”를 확인 못 함
=> 그래서 경고(unchecked cast)를 띄우지만, @SuppressWarnings("unchecked")로 무시함
근데!!!!!!!!!
내가 궁금했던건 이거다
경고라는게 실행에는 문제가없더라도 말 그대로 '경고'인데 정상적인 상태는 아니잖아?
이걸 IDE에서 알려주는건데 의도적으로 이 경고를 무시하겠다? 왜 때문..?
경고를 무시하는 이유는..
제네릭 포스팅을 보고 왔으면 알겠지만 Java 5 이전에는 제네릭이 없었고 라이브러리들 대부분이 List, Map 이런식으로
raw type을 썻었다. → 지금은 제네릭을 쓰지만 그래도 Mybatis, JPA,JSON 라이브러리들 내부적으로는 Object 기반으로 동작을해서 반환타입이 <?>로 잡힘 → 개발자 입장에서는 mapper.xml 이나 DTO 를 보고 실제 들어올 type을 알 수 있지만 컴파일러는 이걸 몰라서 경고를 발생시킨다는것 → 개발자는 이미 인지하고있는 내용이니까 경고 꺼줘도 돼! 하고 @SuppressWarnings 쓴다
'Chapter01 > Sping boot' 카테고리의 다른 글
[Spring boot] Generic (0) | 2025.08.26 |
---|---|
[ 보안 취약점 조치 ] Clickjacking 공격 (0) | 2025.06.26 |
[Spring boot ] Load balancer health Check (0) | 2025.06.13 |
[ 2Factor 인증] Google Authenticator 인증 java코드 (0) | 2025.04.25 |
[ node ] npm 명령어 (0) | 2025.01.13 |