var 키워드란
Java 10에서 도입되어 변수를 선언할 때 타입을 생략할 수 있음
컴파일러가 변수에 대입되는 값을 통해 타입추론
컴파일 단계에서 추론하는 것이기 때문에 런타임 환경에서 추가 연산을 하지 않아 성능에 영향을 주지는 않음
지역 변수에만 사용가능하며 컴파일러가 추론하기 어려운 경우 컴파일 에러 발생
예시 코드
var str = "Hello World";
var 활용
java 10이전에는 변수를 생성할 때 항상 타입을 명시해야 했음
java 10부터는 var로 타입 선언 없이 문자열 선언 가능
예시 코드
// java 10 이전
String str = "Hello World";
// java 10 이후
var str = "Hello World";
if(str instanceof String) {
System.out.println("This is a String: " + str);
}
// 아래와 같이 작성한 경우 List<Object> list = ArrayList<>();와 같음
var list = new ArrayList<>();
if(list instanceof ArrayList) {
System.out.println("This is a ArrayList");
}
// 반복문에서의 사용
int[] arr = {1, 2, 3};
for(var i : arr) {
System.out.println("n: " + i);
}
var 제약 사항
지역 변수에만 적용이 가능
기본적으로 지역 변수에만 사용이 가능
클래스의 맴버 변수(클래스 전역 변수)에는 사용할 수 없음
예시 코드
// 사용 불가능 예시
public class JavaLocalVariable {
private var str = "chobolevel";
private var list = new ArrayList<>();
}
초기화 필요
Null 초기화 불가능
배열에 사용 불가능
배열에 사용할 때 배열의 타입을 알 수 없으므로 컴파일 에러 발생
예시 코드
// 사용 불가능 예시
var arr = {1, 2, 3};
// 사용 가능 예시
var arr = new int[]{1, 2, 3};
람다에서 적용 불가능
예시 코드
// 사용 불가능 예시
// 명시적인 타입을 지정하면 가능하다고 함
var f = () => {};
정리