[Java] var

고병갑·2025년 11월 12일

java study

목록 보기
10/10
post-thumbnail

Java var 키워드

Java 10 부터 var 키워드가 도입되어 사용이 가능하다.
해당 키워드는 지역 변수의 타입 추론(Type Inference)을 위한 키워드 이며
변수 선언시 타입을 생략 가능하게 함.
지역 변수에만 사용 가능하며, 다음의 경우에는 사용 불가능함:

  • 인스턴스 변수 (필드)
  • 메서드 파라미터
  • 메서드 리턴 타입

ex)

LoginResDto loginResDto = new LoginResDto(accessTokenRes, financialCodes);

var loginResDto = new LoginResDto(accessTokenRes, financialCodes);

장점

  • 가독성 향상 : 코드가 간결해지며 중복된 타입 선언을 제거해 가독성이 향상됨
  • 유지보수성 증가 : 코드 변경이 있을 때 변수의 타입을 모두 변경하지 않아도 되어 유지보수성 증가
  • 컴파일 시점에 검증 : 컴파일 시점에 에러를 잡아낼 수 있음
  • 코드 간소화

단점

  • 잘못된 타입 추론 : 컴파일러는 항상 정확하게 추론하지만,
    코드 리뷰어나 다른 개발자가 변수의 타입을 즉시 파악하기 어려울 수 있음
  • 코드 분석 : 코드 간소화로 가독성은 향상되나 분석에는 번거러움이 발생 가능

제약사항

  1. 초기화 없이 선언 불가능
var name; 
name = "John";  // (X)
var name = "John"; // (O)
  1. null 로 초기화 불가능
var data = null; // (X)
var data = getData(); // (O)
  1. 배열 초기화 시 사용 불가능
var arr = {1, 2, 3}; // (X)
var arr = new int[]{1, 2, 3}; // (O)

var 꼭 써야할까?

var 키워드에 대해 알아보니 음.. 꼭 써야하는지에 대해 의문점이 생긴다
가독성을 위해서 var 키워드를 쓰자니 타입 추론에 있어서 불편함이 생겨 무분별하게 사용하기엔 굳이 쓸 필요가 없어 보인다.
그러나 타입 이름이 길거나 정적 팩토리 메소드와 같은 메소드 호출인 경우엔 var 를 사용해 추론하여도 괜찮을 것 같습니다
ex)

// ORIGINAL
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

// GOOD
var outputStream = new ByteArrayOutputStream();


// ORIGINAL
BufferedReader reader = Files.newBufferedReader(...);
List<String> stringList = List.of("a", "b", "c");

// GOOD
var reader = Files.newBufferedReader(...);
var stringList = List.of("a", "b", "c");

결론 : 무분별하게 쓰지말고 적절한 곳에 사용해보자

참고 : 지역 변수 유형 추론 스타일 가이드
https://openjdk.org/projects/amber/guides/lvti-style-guide

profile
노력 naver 배신🔥

0개의 댓글