Java 10에서 var
라는 Local Variable Type-Inference 가 추가되었다. 그 전에도 Generic 과 Lambda 를 사용할 때 타입 추론
이라는 단어를 사용하는 것을 들었다.
타입 추론이란 코드 작성 당시 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것이다.
Generic
자바 10부터 타입 추론을 지원하는 var
키워드가 추가되었다. 이 키워드는 local variable
이면서 선언과 동시에 initializer
가 필수적으로 요구된다.
// java 9 이하
String message = "data";
// java 10 이상
var message = "the initializer present on the right-hand side";
> We don't provide the data type of message. Instead, we mark the message as a var, and the compiler infers the type of message from the type of the initializer present on the right-hand side.
* "컴파일러는 오른쪽에 초기화 값으로 제공되는 것을 통해 타입을 유추한다."
// 컴파일러가 타입을 유추할 수 있는 정보가 없다.
var messages = new ArrayList<>();
가독성에 있어, 다른 개발자가 읽을때 가독성이 좋을지 고민해야할 것 같다. 다른 사람의 코드를 읽는 경우는 IDE 상에서 코드를 받아 보는 경우도 많겠지만, PR 이 올라와서 github 이나 bitbucket 웹 상으로 보는 경우도 많은 것 같다. 아래 두 경우가 있는데,
해당 위치만 보고 message 에 어떤 타입의 데이터가 할당될지 알 수 있는 경우
var message = "문자열 입니다.";
예시에서는 바로 아래 메소드가 있었지만, 다른 클래스 파일에 있는 경우 두 군데 이상의 파일을 조회해야 한다. 그런데 getMessage() 정도는 충분히 코드를 읽는데 방해가 되는 것 같지도 않다. 호불호인것 같기도하고, 네이밍을 잘하면 커버할 수 있는 단점이라고 생각되기도 한다.
public void some() {
var message = getMessage();
}
public Message getMessage() {
// ...
return new Message("객체입니다.", MessageType.SOME);
}