로컬 변수 타입 추론(Local Variable Type Inference)
✒️ 2025-05-23 20:05 내용 수정
참고 자료 : Oracle Help Center Local Variable Type Inference, Geeksforgeeks Local Variable Type Inference or LVTI in Java 10
예약된 타입 이름을 표시하는 식별자
- JDK 10 이후 버전부터 지역 변수를
var식별자로 초기화할 수 있다.- 메서드, 초기화 블록,
for문, 그 외의 블록 스코프 내에서 사용하는 지역 변수에서 사용 가능하다.
- 메서드, 초기화 블록,
- Compiler는
var로 선언된 지역 변수를 만나면 오른쪽의 초기화 표현식을 분석하여 변수의 타입을 결정한다.- 오른쪽의 초기화 표현식을 분석해야 하기 때문에 초기화 표현식이 반드시 필요하다.
String a = "test";
var a = "test";
- 컴파일 타임 때 타입이 지정되며, 런타임때는 타입이 남아있지 않는다.
Q. 그럼 var를 사용해서 보안 처리를 위한 타입 숨김 처리가 가능할까?
A. 런타임 상에서 타입을 숨기는 용도론 사용하지 않는다.
장점
var사용 시 중복된 타입 선언을 제거하여 코드 가독성이 향상되고 유지 보수에도 용이하다.
List<Interger> list = new ArrayList<>();
var list = new ArrayList<Integer>();
단점
- 초기화 표현식만으로 변수의 타입을 명확히 표현하기 어려울 경우엔 코드 이해도가 떨어질 수 있다.
var test = fn(); // 어떤 타입인지 바로 알기 어려움
null로 초기화한 변수에는 사용할 수 없다.
var test = null; // error!
사용할 수 없는 상황
- 클래스 필드
class Test {
var a; // error!
}
- 초기화 표현식이 없는 지역 변수
class Main {
public static void main(String[] args) {
var a; // error!
}
}
- 메서드 매개변수
class Test {
public void print(var a) {} // error!
}
- 반환 타입
class Test {
public var print() {} // error!
}