스택큐힙리스트

자바 var 키워드 활용법과 주의점 본문

개발

자바 var 키워드 활용법과 주의점

스택큐힙리스트 2025. 7. 7. 16:54
반응형

1. var는 무엇인가?

  • 지역 변수 타입 추론(Local-Variable Type Inference) 기능입니다. var msg = "hello";처럼 선언하면 컴파일러가 오른쪽 값을 보고 타입을 확정합니다. 런타임 오버헤드는 없고, 한 번 결정된 타입은 바꿀 수 없습니다.
  • JDK 10에 도입됐고, JDK 17·21에서도 동일하게 동작합니다.

2. 쓸 수 있는 곳 · 못 쓰는 곳

  • 가능: 메서드·생성자·블록 내부의 지역 변수, 향상된 for-loop, try-with-resources.
  • 불가능:
    • 필드(멤버 변수)
    • 메서드 매개변수와 반환 타입
    • 제네릭 타입 매개변수
    • 초기값이 없거나 null인 변수
    • 배열 리터럴 {…} 표현(단 new int[]{…}는 가능)

3. 왜 사용할까? — 장점 3가지

 

1. 보일러플레이트 제거긴 제네릭 선언을 줄이면 코드 리뷰 난이도가 확 줄어듭니다.

Map<String, List<Map.Entry<String, Integer>>> complex = new HashMap<>();
var complex = new HashMap<String, List<Map.Entry<String, Integer>>>();

 

2. 의미 있는 변수명 강제
타입이 사라지니 변수명이 자연히 구체적이어야 읽기 쉽습니다.

 

3. IDE 리팩터링 부담 감소
클래스명을 바꿔도 좌변을 고칠 필요가 없습니다.


4. 코딩 예시 — 이렇게 쓰면 깔끔하다

// 1) 빌더 패턴 결과 받기
var user = User.builder()
               .name("Alice")
               .age(20)
               .build();

// 2) 스트림 파이프라인 중간 처리
var total = orders.stream()
                  .filter(o -> o.isPaid() && !o.isCanceled())
                  .mapToInt(Order::getPrice)
                  .sum();

// 3) 리소스 자동 닫기
try (var in = Files.newBufferedReader(path)) {
    // …
}

예제와 같이 우변만 봐도 타입이 분명한 경우라면 var가 가독성을 높입니다.


5. 주의해야 할 함정

  • 타입이 모호하면 쓰지 말 것
var result = service.execute(); // 반환형이 바로 안 보이면 독이 됩니다
  • 람다·메서드 참조 남용
    var func = integer -> true; 는 컴파일 안 됩니다. 람다 파라미터에 애노테이션을 달려면 (var x) ->처럼 괄호를 써야 합니다. 
  • 스트림 체인이 길어질 때
    중간 결과를 var로 받으면 타입 추적이 어려워집니다. IDE 도움 없이도 이해되는 길이를 넘어가면 명시 타입으로 바꿔 주세요.
  • 초기화·null 규칙
    var n; 또는 var s = null; → 컴파일 오류. 반드시 값이 있어야 타입을 추론할 수 있기 때문입니다.

6. 스타일 가이드 한 줄 요약

“타입이 명확할 때만 var를 쓰고, 그 외에는 명시 타입을 유지하라.”
Velog·Tistory 고수들의 공통된 결론입니다. 자바는 여전히 정적 타입 언어이므로 가독성 ↔ 간결성 균형이 핵심입니다.

반응형
Comments