개발/자바

Java 10의 var 타입 정리

피터JK 2025. 2. 10. 14:08
728x90

1. var란?

var는 Java 10에서 도입된 지역 변수 타입 추론 (Local Variable Type Inference) 기능입니다.
즉, 변수를 선언할 때 명시적으로 타입을 지정하지 않아도, 컴파일러가 타입을 자동으로 추론해 줍니다.

기존 방식 (명시적 타입 선언)

String message = "Hello, Java!";

var를 사용한 방식

var message = "Hello, Java!";

컴파일러가 message의 타입을 String으로 자동 추론합니다.


2. var의 주요 특징

타입을 자동으로 추론하여 코드가 간결해짐
지역 변수에서만 사용 가능 (클래스 필드 및 메서드 파라미터에서는 사용 불가)
Java 10 이상에서만 사용 가능
한 번 타입이 정해지면 변경 불가


3. var 사용 예시

(1) 기본적인 변수 선언

var number = 10;        // int
var text = "Hello";    // String
var pi = 3.14;         // double
var list = List.of(1, 2, 3); // List<Integer>

(2) 향상된 for문에서 사용

var numbers = List.of(1, 2, 3, 4, 5);
for (var num : numbers) {
    System.out.println(num);
}

(3) 제네릭 타입과 함께 사용

var map = new HashMap<String, Integer>();
map.put("A", 10);
map.put("B", 20);

➡ HashMap<String, Integer> 타입을 자동으로 추론합니다.

(4) try-with-resources에서 사용

try (var reader = new BufferedReader(new FileReader("test.txt"))) {
    System.out.println(reader.readLine());
} catch (IOException e) {
    e.printStackTrace();
}

➡ reader는 BufferedReader 타입으로 자동 추론됩니다.


4. var 사용이 불가능한 경우

🚫 클래스 필드 선언에서는 사용 불가

class Person {
    var name = "John"; // ❌ ERROR
}

🚫 메서드의 매개변수 및 반환 타입으로 사용 불가

void print(var message) { // ❌ ERROR
    System.out.println(message);
}

var getNumber() { // ❌ ERROR
    return 100;
}

🚫 null로 초기화하면 타입 추론 불가능

var value = null; // ❌ ERROR: 타입을 알 수 없음

🚫 Lambda 표현식과 함께 사용 불가

var func = (x, y) -> x + y; // ❌ ERROR: 타입을 알 수 없음

5. var vs 명시적 타입 비교

비교 항목 var 명시적 타입
코드 간결성 ✅ 간결함 ❌ 다소 길어질 수 있음
타입 명확성 ❌ 가끔 명확하지 않음 ✅ 타입을 바로 알 수 있음
유지보수성 ❌ 타입이 애매할 수도 있음 ✅ 명확한 타입 지정 가능
사용 가능 범위 지역 변수에서만 사용 가능 어디서든 사용 가능

6. var 사용 시 주의할 점

  • 가독성이 떨어질 수 있음➡ 명시적 타입이 더 나을 수도 있음:
  • String data = process();
  • var data = process(); // ❓ process()의 반환 타입이 무엇인지 모름
  • 너무 긴 제네릭 타입을 줄이는 데 유용➡ 명시적으로 작성하면 매우 길어짐:
  • HashMap<String, List<Integer>> map = new HashMap<>();
  • var map = new HashMap<String, List<Integer>>();

7. var를 사용하면 좋은 경우

반복문에서 간결한 코드 작성
제네릭 타입이 긴 경우
명확한 타입 추론이 가능한 경우


8. 결론

  • var는 코드를 간결하게 만들지만, 가독성을 해칠 수도 있음
  • 무조건 사용하는 것이 아니라, 상황에 맞게 사용해야 함
  • Java 10 이상에서만 지원됨

타입이 명확한 경우에는 var를 사용하고, 애매한 경우에는 명시적 타입을 쓰는 것이 좋습니다!

728x90

'개발 > 자바' 카테고리의 다른 글

Java의 Assert 문: 디버깅을 위한 강력한 도구  (0) 2025.02.11
Java Bean vs Spring Bean  (0) 2025.02.10
UUID v7: 시간 기반의 차세대 UUID  (0) 2025.02.10
Java UUID란?  (0) 2025.02.08
Java 8 Optional 개요  (0) 2025.02.01