1. 문제
public class ResponseDTO {
private List<T> data; // T가 무엇인지 정의되어 있어야 함
}
위와 같이 작성하니까 에러가 발생한다.
에러 메세지는 'cannot find symbol'인데 왜 발생하는 걸까?
2. 문제 원인
자바의 제네릭(Generic) 문법에서 <T>는 타입 파라미터(parameterized type)를 선언하는 것이다. 이 선언은 컴파일러에게 T가 어떤 타입으로 사용될지를 알려주는 역할을 한다.
만약 위와 같이 public class ResponseDTO처럼 <T>를 생략하면, T는 선언되지 않은 정의되지 않은 심볼(symbol) 이 되기 때문에 다음과 같은 에러가 발생한다.
위는 매개변수 없이 함수 내부에서 x를 쓰는 것과 같은 오류라고 한다.
3. 문제 해결
public class ResponseDTO<T> {
private String error;
private List<T> data;
}
제네릭을 사용하고 싶다면 반드시 클래스 정의부에 <T>를 선언해야 한다.
public class ResponseDTO {
private String error;
private List<Object> data; // 또는 List<String>, List<SomeDTO> 등 명시적으로 작성
}
만약 제네릭이 필요 없다면 T 대신 명시적인 타입을 지정해야 한다.
[결론] 타입 파라미터에 Generic 타입을 사용할 경우 클래스 정의부에 <T>를 선언하자.
'Error > Java' 카테고리의 다른 글
[Java] 이클립스 Lombok 설치 되었는데도 못 알아 먹을 때, ~ is undefined for the type TodoEntity 오류 (0) | 2025.05.10 |
---|---|
[Lombok] @Builder 어노테이션을 사용한 객체 생성 방식 (0) | 2025.01.29 |
[Getter] Boolean, Boolean Getter 메서드 이름 규칙 (0) | 2024.12.02 |
cmd, console "has been compiled by a more recent version" 에러 (0) | 2024.02.04 |