var 키워드
Java SE 10부터 도입된 var
키워드는 로컬 변수 선언 시 사용할 수 있는 타입 식별자입니다. 이를 통해 개발자는 변수의 실제 타입을 컴파일러에게 결정하게 맡길 수 있습니다. 한 번 생성된 후에는 이 타입을 변경할 수 없습니다.
주요 특징
- 타입 추론:
var
를 사용하면 변수의 타입을 명시적으로 지정할 필요 없이, 할당된 값의 타이을 기반으로 자동으로 타입이 결정됩니다.- 예:
var message = "Hello world!";
에서message
는String
타입으로 추론됩니다.
- 로컬 변수 전용:
var
는 메서드 내부의 로컬 변수 선언에만 사용 가능합니다.- 클래스 필드나 속성, 매개변수 등에는 사용할 수 없습니다.
- 초기화 필수:
var
로 선언된 변수는 선언과 동시에 초기화해야 합니다.- 예:
var x;
와 같이 선언만 하고 초기화를 하지 않으면 컴파일 오류가 발생합니다.
- 재선언 불가능:
- 이미 선언된
var
변수를 다시 선언할 수 없습니다. - 예:
var x = 5; var x = "hello";
는 컴파일 오류입니다.
- 이미 선언된
사용 예제
// 기본 데이터 타입
var number = 42;
var isTrue = true;
// 컬렉션
var list = new ArrayList<String>();
list.add("Apple");
list.add("Banana");
// 람다 표현식
var calculator = (int x, int y) -> x + y;
System.out.println(calculator.apply(5, 7));
// 스트림 연산
var numbers = List.of(1, 2, 3, 4, 5);
var sum = numbers.stream().reduce(Integer::sum).orElse(0);
System.out.println(sum);
// 제네릭 타입
var map = new HashMap<String, Integer>();
map.put("one", 1);
map.put("two", 2);
// 배열
var array = new String[] {"red", "green", "blue"};
// 메서드 참조
var stringLength = String::length;
System.out.println(stringLength.apply("Hello"));
장점
- 코드의 가독성 향상: 특히 복잡한 타입을 다룰 때 변수 선언이 간결해집니다.
- 리팩토링 시 유연성: 변수의 타입을 변경할 때 이름만 수정하면 됩니다.
- 새로운 타입 사용 시 편리함: 익숙하지 않은 타입을 다룰 때 유용합니다.
주의사항
- 오버엔지니어링 피하기: 너무 자주 사용하면 코드의 가독성이 오히려 떨어질 수 있습니다.
- 명확성을 위해 적절히 사용: 변수의 타입이 명확하지 않을 경우 명시적 타입 선언을 고려하세요.
- 디버깅 어려움: IDE의 도움 없이 변수의 실제 타이을 파악하기 어려울 수 있습니다.
성능 영향
var 키워드는 런타임 성능에 영향을 미치지 않습니다. 컴파일 시점에 실제 타입으로 변환되므로 실행 중에는 차이가 없습니다.
var 키워드 사용 예제
- 리스트 처리
var list = List.of("one", "two", "three", "four");
for (var element : list) {
System.out.println(element);
}
이 예제에서는 두 가지 방법으로 var
를 사용했습니다:
list
변수 선언:var list
는List.of()
메서드의 반환값을 기반으로List<String>
타입으로 추론됩니다.- 이렇게 하면 복잡한 제네릭 타입을 직접 입력할 필요가 없어 코드가 간결해집니다.
- for-each 루프 내부의
element
변수:var element
는 리스트의 요소 타입인String
으로 추론됩니다.- 이 방식을 사용하면 루프 변수의 타입을 명시적으로 지정할 필요가 없어집니다.
- 파일 처리
var path = Path.of("debug.log");
try (var stream = Files.newInputStream(path)) {
// 파일 처리 로직
}
이 예제에서도 var
를 두 가지 상황에서 사용했습니다:
path
변수 선언:var path
는Path.of()
메서드의 반환값을 기반으로Path
타입으로 추론됩니다.Path
클래스는 자바의 NIO 패키지에 포함되어 있어 복잡한 경로 작업을 수행할 수 있습니다.
- try-with-resources 문 내부의
stream
변수:var stream
은 Fils.newInputStream()메서드의 반환값을 기반으로
InputStream` 타입으로 추론됩니다.- try-with-resources 문을 사용하면 자동으로 리소스가 닫혀 안전한 파일 처리가 가능합니다.
'JAVA' 카테고리의 다른 글
자바 연산자 소개, 대입 연산자 [코딩백과 with JAVA] (0) | 2024.12.21 |
---|---|
var 키워드 사용예제(2), 제약 사항 [코딩백과 with JAVA] (0) | 2024.12.21 |
배열 다루기(2) [코딩백과 with JAVA] (0) | 2024.12.21 |
배열 다루기(1) (1) | 2024.12.21 |
배열 복사 [코딩백과 with JAVA] (0) | 2024.12.21 |