728x90

1. var 키워드(LVTI)란 무엇인가?
Java 10에서 도입된 지역 변수 타입 추론(Local-Variable Type Inference, LVTI)은 개발자가 명시적으로 타입을 선언하는 대신 var라는 키워드를 사용하여 변수를 선언할 수 있게 해주는 기능입니다. 컴파일러가 우변에 위치한 초기화 식을 보고 변수의 타입을 자동으로 추론하기 때문에, 강력한 정적 타입 시스템의 장점을 유지하면서도 코드의 장황함을 획기적으로 줄여줍니다. 중요한 점은 Java가 JavaScript처럼 동적 타입 언어로 변하는 것이 아니라는 점입니다. var는 컴파일 타임에 결정되며, 한 번 결정된 타입은 절대 변하지 않습니다.
2. var를 사용할 수 있는 곳과 없는 곳
var는 모든 곳에서 만능으로 사용될 수 없습니다. 사용 가능한 범위와 제약 사항을 정확히 아는 것이 중요합니다.
| 구분 | 사용 가능 여부 | 상세 설명 |
|---|---|---|
| 지역 변수 (Local Variables) | O | 메서드 내부에서 선언 및 초기화되는 변수 |
| for-each 루프 및 일반 for 문 | O | 루프 내 변수 선언 시 사용 가능 |
| 멤버 변수 (Fields) | X | 클래스의 인스턴스/정적 변수에는 사용 불가 |
| 메서드 파라미터 및 반환 타입 | X | 입력 매개변수나 리턴 타입으로 사용 불가 |
| 초기화가 없는 선언 | X | 선언과 동시에 초기값이 반드시 할당되어야 함 |
3. var 도입 전후 비교: Sample Example
제네릭이 포함된 복잡한 컬렉션 구조에서 var의 진가가 드러납니다.
예제 1: 가독성 개선
// Java 10 이전: 타입 선언이 매우 길고 중복됨
Map<String, List<Map<Integer, String>>> complexMap = new HashMap<>();
// Java 10 이후: var를 사용하여 단순화
var simpleMap = new HashMap<String, List<Map<Integer, String>>>();
예제 2: 루프에서의 활용
var list = List.of("Apple", "Banana", "Cherry");
for (var fruit : list) {
System.out.println("과일 이름: " + fruit);
}
4. var 사용 시 주의사항과 Best Practices
남용은 독이 될 수 있습니다. var를 똑똑하게 사용하기 위한 지침입니다.
- 가독성을 최우선으로: 변수명이 타입의 의미를 충분히 전달할 때 사용하세요. 예:
var result = getResult();(X) →var userList = getUsers();(O) - 다이아몬드 연산자와 함께 쓸 때 주의:
var list = new ArrayList<>();는ArrayList<Object>로 추론되어 타입 안전성이 떨어질 수 있습니다. - 상속 관계에서의 추론:
var는 항상 선언된 실제 타입으로 추론됩니다. 인터페이스 타입을 기대한다면 명시적 선언이 나을 수 있습니다.
5. 결론: 실무에서 var는 선택이 아닌 필수?
Java 10의 var는 반복되는 보일러플레이트 코드를 줄여 로직의 핵심에 집중하게 도와줍니다. 현대적인 Java 개발 환경에서는 필수적인 요소로 자리 잡았으며, 특히 스트림 API와 결합할 때 그 간결함이 극대화됩니다. 팀 내 코딩 컨벤션을 정해 일관성 있게 사용한다면 유지보수가 훨씬 쉬운 코드를 작성할 수 있습니다.
6. 참고 문헌 및 출처
- JEP 286: Local-Variable Type Inference: openjdk.org/jeps/286
- Oracle Documentation: Local Variable Type Inference
- Baeldung: Java 10 Local Variable Type Inference
728x90
'Language > Java' 카테고리의 다른 글
| [JAVA] Java 14/16의 Record 키워드 : 데이터 클래스의 혁명 (0) | 2026.01.23 |
|---|---|
| [JAVA] Java 11 : LTS의 시작과 새로운 HTTP 클라이언트 전환점 (0) | 2026.01.23 |
| [JAVA] Java 9 모듈 시스템(Project Jigsaw) 완벽 가이드 : 거대해진 자바를 구조화하다 (0) | 2026.01.23 |
| [JAVA] Method Reference 완벽 가이드 : 코드를 예술로 만드는 방법 (0) | 2026.01.23 |
| [JAVA] Optional<T> Class를 사용하는 이유는? Null과의 전쟁을 끝내는 법 (0) | 2026.01.22 |