Java 10,11 var 타입추론
Java 10에서 도입된 var
는 변수를 선언할 때 타입을 생략할 수 있으며, 컴파일러가 타입을 추론합니다. (Local-Variable Type Inference)
다음과 같이 변수를 선언하면 컴파일러가 String 타입을 추론하여 변수에 타입을 지정해 줍니다. Kotlin과 같이 타입 추론을 지원하는 언어를 사용해보신 분이라면 이런 표현이 익숙할 것입니다.
컴파일 타임에 추론하는 것이기 때문에, Runtime에 추가 연산을 하지 않아 성능에 영향을 주지는 않습니다.
Java에서 var는 지역 변수에서만 사용할 수 있습니다. 또한 컴파일러가 타입을 추론할 수 없는 애매한 상황일 때 컴파일 에러가 발생합니다.
var으로 변수 선언
Java 9 이하에서는 문자열을 선언할 때 다음과 같이 타입을 명시적으로 선언해야 했습니다.
Java 10에서는 다음과 같이 var로 타입 선언 없이 문자열을 선언할 수 있습니다.
Output:
다른 클래스들도 var로 변수를 선언할 수 있습니다.
다음은 ArrayList 객체를 선언하는 코드입니다. 여기서 list는 ArrayList<String>
타입으로 선언됩니다.
Output:
만약 var list = new ArrayList();
로 선언하면 타입은 ArrayList<Object>
가 됩니다.
반복문
var은 반복문에서 사용할 수도 있습니다.
Output:
제약 사항
다음과 같은 경우에 타입 추론을 할 수 없어 컴파일 에러가 발생합니다. 이런 경우, 명시적으로 타입을 지정해줘야 합니다.
1. 지역 변수에서만 사용
var는 지역 변수를 선언할 때만 사용할 수 있습니다. 클래스의 멤버 변수를 선언할 때 사용할 수 없습니다.
2. 초기화 필요
초기화를 하지 않으면 어떤 타입인지 추론할 수 없기 때문에 컴파일 에러가 발생합니다.
3. null로 초기화할 수 없음
어떤 객체든 null이 할당될 수 있기 때문에, 타입 추론을 할 수 없으며 컴파일 에러가 발생합니다.
4. 배열에 사용할 수 없음
배열을 사용할 때도 타입 추론을 못하기 때문에 명시적으로 타입을 정해줘야 합니다.
5. Lambda에 사용할 수 없음
Lambda에도 사용할 수 없습니다.
var 키워드 특징
var 키워드는 지역 변수 타입 추론을 허용한다.
형식 변수 선언 및 메서드의 반환 유형, 멤버 변수 또는 필드 선언, 생성자 형식 변수 또는 다른 종류의 변수 선언에는 사용할 수 없다.
var 키워드 적용 이후로도 Java는 여전히 정적 언어이며 지역 변수 타입 추론하기에 충분한 정보가 있어야 한다. 그렇지 않으면 컴파일러에서 오류가 발생한다.
Java 11에서는 람다 표현식에 var를 사용할 수 있다. 즉 var 타입을 지정함으로 인해 어노테이션을 추가할 수 있다.
Last updated
Was this helpful?