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 |