자바 var

greenTea·2023년 11월 15일
0

자바 var

Java에서 var 키워드는 Java 10부터 도입된 지역 변수 형식 추론 기능입니다. var를 사용하면 Java 컴파일러가 변수의 타입을 초기화 식(expression)에서 유추할 수 있게 해줍니다.

var의 주요 특징

  1. 지역 변수에만 사용: var는 오직 지역 변수에서만 사용할 수 있습니다. 클래스의 필드, 메소드의 매개변수, 반환 타입에서는 사용할 수 없습니다.

  2. 타입 추론: 변수의 타입은 초기화 시에 컴파일러에 의해 결정됩니다. 변수에 할당된 값의 타입을 기반으로 컴파일러가 타입을 추론합니다.

  3. 명확한 초기화 필요: var로 선언된 변수는 반드시 초기화되어야 합니다. 컴파일러는 초기화 식을 통해 타입을 추론하기 때문에, 초기화 없이는 타입을 결정할 수 없습니다.

  4. 불변성이 아님: var로 선언된 변수는 final이나 불변(immutable) 타입이 아닙니다. 변수의 값은 변경할 수 있지만, 다른 타입의 객체를 재할당할 수는 없습니다.

var 사용 예시

	@Test
    void t8() {
        // 1
        var number = 42;
        var message = "Hello, Java!";

        // 2
        var list = new ArrayList<String>();
        list.add("Apple");
        list.add("Banana");

        // 3
        var map = new HashMap<String, Integer>();
        map.put("Apple", 5);
        map.put("Banana", 10);
        
        //4
        int[] arr = new int[]{1,2,3};
        for (var i : arr) {
            
        }

        
    }

기존에는 직접 int,List<>등 직접 타입을 명시해주어야 했다면 var를 이용할 경우 컴파일 시점에 알아서 타입을 추론하기에 위와 같이 코드를 적용할 수 있습니다.

주의사항

1. null 초기화 불가능
var str = null;

var를 사용할 경우 null로 초기화가 불가능합니다.

  1. 초기화는 필수
    var str;
    var를 사용할 경우 초기화 값을 넣어줘야 합니다. 대입된 값을 보고 타입을 추론하기에 초기화 없이 사용이 불가능합니다.

3.배열에는 사용 불가능

var arr = {1,2,3}; // 불가능
var arr = new int[]{1,2,3}; // 가능

배열에는 직접적으로 사용이 불가능합니다.
아래와 같이 new int[]{}로 생성한 경우에는 사용이 가능합니다.

4.람다에 사용 불가능

var lamda = () => {};
  1. 코드 가독성 향상?
    var를 사용하다고 해서 코드의 가독성이 무조건 좋아지는 것은 아닙니다.(저의 경우에도 익숙치 않아서 그런지 가독성이 좋아졌다는 느낌은 받지 못하였습니다...)
    Java에서 var 키워드를 사용할 때 가독성이 향상되거나 저하될 수 있는 예시를 들어보겠습니다.

가독성이 향상된 예시

// 복잡한 제네릭 타입 사용 예
Map<String, List<Map.Entry<String, Integer>>> complexMap = new HashMap<>();
// 'var' 사용
var complexMap = new HashMap<String, List<Map.Entry<String, Integer>>>();

이 경우, var를 사용함으로써 복잡한 제네릭 타입을 간결하게 표현할 수 있습니다.

가독성이 저하된 예시

var f2 = f.logic1(i -> {
                    //...로직
                }).logic2(i -> {
                    //...로직
                }).logic3(i -> {
                    //...로직
                });

위와 같이 복잡한 코드가 있다고 가정한 경우
var를 사용하면 해당 코드의 반환 타입이 무엇인지 코드만으로는 명확하지 않습니다. 이럴때는 직접 타입을 명시적으로 선언하는 것이 오히려 더 좋습니다.

결론

var는 코드를 간결하게 만들 수 있지만, 항상 그런 것은 아닙니다. 가독성을 유지하면서 var를 사용하는 것이 중요합니다. 복잡한 타입이나 반복되는 타입 선언에서 var를 사용하는 것은 유용하지만, 반환 타입이 명확하지 않은 메서드 호출의 결과나, 타입이 코드의 문맥에서 중요한 경우에는 var 사용을 피하는 것이 좋습니다.

var의 도입으로 Java에서의 타입 선언이 더 유연하고 간결해졌으며, 특히 복잡한 타입 표현을 간단하게 만들어 줍니다. 그러나, 가독성과 명확성을 유지하는 것이 중요하므로 적절한 상황에서 적절하게 사용해야 합니다.

profile
greenTea입니다.

0개의 댓글