250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

[Java 10] 자바 var (feat. 지역변수) 본문

개린이 개발자 독학노트

[Java 10] 자바 var (feat. 지역변수)

개린이9999 2022. 12. 5. 02:01
728x90

1. var

var i = 1; // int로 추론
var str = "Java"; // String으로 추론
var list = new ArrayList<String>(); // ArrayList<String>으로 추론

var는 지역변수를 선언할 때 초기값을 통하여 데이터 타입을 추론합니다.

int var = 1; // 식별자로 사용 가능

var는 예약된 타입 이름으로 키워드가 아니기 때문에 식별자로 사용할 수 있습니다

2. 사용 예제

// 기존 코드
Map<String, List<String>> countryToCity = new HashMap<>();
// ...
for (Map.Entry<String, List<String>> citiesInCountry : countryToCity.entrySet()) {
  List<String> cities = citiesInCountry.getValue();
  // ...
}

기존 코드↑

// var를 사용한 코드
var countryToCity = new HashMap<String, List<String>>();
// ...
for (var citiesInCountry : countryToCity.entrySet()) { // for each문에서 사용 가능
  var cities = citiesInCountry.getValue();
  // ...
}

var를 사용한 코드↑

var를 사용하면 위와 같이 코드 양을 줄일 수 있습니다.

var는 for each문에서도 사용할 수 있으며, C++의 auto와 비슷하게 사용 가능합니다.

Object productInfo = new Object() {
        String name = "Apple";
        int total = 30;
};
System.out.println("name = " + productInfo.name + ", total = " + productInfo.total);

↑ 익명 클래스를 만드는 경우 필드를 추가할 수 있지만, 다른 곳에서 해당 필드를 참조할 수 없으므로, 위의 코드는 5번 라인에서 에러를 발생시킵니다.

하지만, 위의 코드에서 맨 처음 Object를 var로 바꾸면 익명 클래스에 선언된 필드를 사용할 수 있으므로 에러가 나지 않습니다.

3. 주의해야 할 점****

public class VarDemo {
    // var a = 1; // var는 지역변수에서만 사용 가능
    public static void main(String[] args) {
        // var x = 1, y = 2; // ,와 함께 사용 불가능
 
        // var str = null; // null은 String에서만 사용할 수 있는 것이 아니므로 타입 추론 불가능
 
        // var err; // var를 사용할 때는 초기화를 바로 해야 함 (타입 추론이 불가능하므로)
        // err = 1;
        
        // var l = () -> {} // 람다식에서 사용 불가능
    }
    // void test(var x) {} // 메소드의 인수타입은 지역변수여도 var 사용 불가
}

public class VarDemo {
    // var a = 1; // var는 지역변수에서만 사용 가능
    public static void main(String[] args) {
        // var x = 1, y = 2; // ,와 함께 사용 불가능
 
        // var str = null; // null은 String에서만 사용할 수 있는 것이 아니므로 타입 추론 불가능
 
        // var err; // var를 사용할 때는 초기화를 바로 해야 함 (타입 추론이 불가능하므로)
        // err = 1;
        
        // var l = () -> {} // 람다식에서 사용 불가
    }
    // void test(var x) {} // 메소드의 인수타입은 지역변수여도 var 사용 불가


}

 


[JAVA] 변수종류 ( 지역변수, 전역변수, 클래스변수, 인스턴스변수 ) (tistory.com)

지역변수 참조 ↓

 

[JAVA] 변수종류 ( 지역변수, 전역변수, 클래스변수, 인스턴스변수 )

[JAVA] 변수종류 ( 지역변수, 전역변수, 클래스변수, 인스턴스변수 ) public class Test { public static void main(String[] args) { int i = 0; while(i

choseongho93.tistory.com

 

728x90