본문 바로가기
JAVA

var 키워드 사용예제(2), 제약 사항 [코딩백과 with JAVA]

by GangDev 2024. 12. 21.

var 키워드 사용 제약 사항

Java에서 var 키워드를 사용할 때 몇 가지 중요한 제약 사항이 있습니다. 이러한 제약 사항들은 언어의 안정성과 명확성을 유지하기 위한 것입니다.

  1. 로컬 변수 선언에만 사용 가능

var는 오직 메서드 내부의 로컬 변수 선언, 생성자, 그리고 초기화 블록에서만 사용할 수 있습니다.

public class MyClass {
    // 에러: var는 클래스 레벨에서 사용할 수 없음
    private var myField;

    public void myMethod() {
        // 올바름: 메서드 내부에서 var 사용
        var localVar = 10;
    }
}

클래스 필드, 메서드 매개변수, 또는 반환 타입에 var를 사용할 수 없습니다.

  1. 초기화 필수

var로 선언된 변수는 반드시 선언과 동시에 초기화해야 합니다.

public void initRequired() {
    // 올바름
    var initializedVar = 5;

    // 에러: 초기화 없이 var 사용
    var uninitializedVar;
}

초기화 없이 var 변수를 선언하면 컴파일 오류가 발생합니다.

  1. 단일 할당만 허용

var로 선언된 변수는 한 번에 하나의 값만 할당받을 수 있습니다.

public void singleAssignment() {
    // 올바름
    var singleAssign = 10;

    // 에러: 여러 값 할당
    var multiAssign = 20, anotherVar = 30;
}

여러 변수를 동시에 선언하고 초기화하려면 각각 별도로 선언해야 합니다.

  1. null 할당 금지

var로 선언된 변수에 직접 null을 할당할 수 없습니다.

public void noNullAssignment() {
    // 에러: var에 직접 null 할당
    var notAllowed = null;

    // 올바름: 명시적 타입으로 null 할당
    String allowed = null;
}

null을 할당해야 하는 경우에는 명시적 타입을 사용해야 합니다.

  1. 배열 선언 제한

var를 사용하여 배열을 선언할 수 없지만, 배열을 참조하는 변수를 선언할 수 있습니다.

public void arrayDeclaration() {
    // 에러: var로 배열 선언 불가
    var[] array = {1, 2, 3};

    // 올바름: var로 배열 참조 선언 가능
    var intArray = new int[]{1, 2, 3};
}

배열을 직접 선언하려면 명시적 타입을 사용해야 합니다.

  1. 람다 매개변수 제한

var를 사용하여 람다 표현식의 매개변수를 선언할 수 없습니다.

public void lambdaParameters() {
    // 에러: var로 람다 매개변수 선언 불가
    Consumer<String> consumer = (var s) -> System.out.println(s);

    // 올바름: 명시적 타입으로 람다 매개변수 선언
    Consumer<String> validConsumer = (String s) -> System.out.println(s);
}

람다 매개변수의 경우에는 명시적 타입을 사용해야 합니다.

  1. 필드와 메서드 매개변수에서의 사용 금지

클래스 필드나 메서드 매개변수로 var를 사용할 수 없습니다.

public class User {
    // 에러: var를 필드로 사용할 수 없음
    private var name = "Sue";

    public void setName(var name) {
        this.name = name;
    }
}

이 코드는 컴파일 오류가 발생합니다. var는 메서드 내부의 로컬 변수 선언에만 사용 가능합니다.

  1. 초기화 없는 선언 금지

변수를 선언할 때 초기화를 하지 않으면 컴파일러가 타입을 추론할 수 없어 오류가 발생합니다.

public class VarInitializationExamples {

    public static void main(String[] args) {
        // 1. 스위치 문에서 초기화
        int dayOfWeek = 3;

        // 에러: 초기화 없이 var 사용
        // var greeting;
        // switch (dayOfWeek) {
        //     case 1: greeting = "Monday"; break;
        //     case 2: greeting = "Tuesday"; break;
        //     default: greeting = "Other day";
        // }

        // 올바른 방법: 초기화와 함께 선언
        String greeting = "";
        switch (dayOfWeek) {
            case 1: greeting = "Monday"; break;
            case 2: greeting = "Tuesday"; break;
            default: greeting = "Other day";
        }
        System.out.println(greeting);

        // 2. 조건부 연산자 사용
        boolean isWeekend = false;

        // 에러: 초기화 없이 var 사용
        // var message;
        // message = isWeekend ? "It's weekend!" : "Not weekend yet";

        // 올바른 방법: 초기화와 함께 선언
        String message = isWeekend ? "It's weekend!" : "Not weekend yet";
        System.out.println(message);
    }
}

편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111