Skip to content

Latest commit

ย 

History

History
86 lines (69 loc) ยท 2.53 KB

File metadata and controls

86 lines (69 loc) ยท 2.53 KB

Lambda - Variable Test

public class Main {

    private int instanceVar; //์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

    private static int classVar; //ํด๋ž˜์Šค ๋ณ€์ˆ˜

    public static void main(String[] args) {
        method(0);
    }

    public static void method(int parameter) {
        int localVar; //์ง€์—ญ ๋ณ€์ˆ˜
        Runnable r = (() -> {
            localVar = 1;
            instanceVar = 1;
            classVar = 1;
            parameter = 1;
        });
        r.run();
    }
}

์œ„์˜ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ, ์ง€์—ญ๋ณ€์ˆ˜์™€, ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฒฝ์šฐ
"Variable used in lambda expression should be final or effectively final" ์˜ค๋ฅ˜ ๋ฐœ์ƒ
์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ, "Non-static field 'instanceVar' cannot be referenced from a static context" ์˜ค๋ฅ˜ ๋ฐœ์ƒ

public class Main {

    private String instanceVar; //์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

    private static String classVar; //ํด๋ž˜์Šค ๋ณ€์ˆ˜

    public static void main(String[] args) {
        method("Hi");
    }

    public static void method(String parameter) {
        String localVar; //์ง€์—ญ ๋ณ€์ˆ˜
        Runnable r = (() -> {
            localVar = "Hello";
            instanceVar = "Hello";
            classVar = "Hello";
            parameter = "Hello";
        });
        r.run();
    }
}

String์œผ๋กœ ํ…Œ์ŠคํŠธ ํ–ˆ์„ ๊ฒฝ์šฐ, intํ˜•๊ณผ ๋™์ผํ•˜๊ฒŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

public class Main {

    private List<String> instanceVar; //์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

    private static List<String> classVar; //ํด๋ž˜์Šค ๋ณ€์ˆ˜

    public static void main(String[] args) {
        method(Arrays.asList("a", "b", "c"));
    }

    public static void method(List<String> parameter) {
        List<String> localVar; //์ง€์—ญ ๋ณ€์ˆ˜
        Runnable r = (() -> {
            System.out.println(Thread.currentThread().getName());
            localVar.add("d");
            instanceVar.add("d");
            classVar.add("d");
            parameter.add("d");
        });
        r.run();
    }
}

List๋กœ ํ•˜์˜€์„ ๊ฒฝ์šฐ, ์ง€์—ญ๋ณ€์ˆ˜๋Š” "Variable 'localVar' might not have been initialized" ์˜ค๋ฅ˜ ๋ฐœ์ƒ
์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” "Non-static field 'instanceVar' cannot be referenced from a static context" ์˜ค๋ฅ˜ ๋ฐœ์ƒ

๊ฒฐ ๋ก 

์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ๋žŒ๋‹ค ๋‚ด์—์„œ๋Š” final๋กœ ๊ฐ„์ฃผ๋˜์–ด ์ˆ˜์ • ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ, ๋‹จ ReferenceType์˜ ๊ฒฝ์šฐ initialized ๋œ ๊ฐ’์ด๋ผ๋ฉด ์ˆ˜์ • ๊ฐ€๋Šฅ, ์‹ค์ œ value๋Š” Heap์˜์—ญ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ์ถ”๋ก ํ•œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์˜๊ฒฌ์ด๋‚˜ ์ด์˜ ์‚ฌํ•ญ ์žˆ์œผ์‹œ๋‹ค๋ฉด ์ˆ˜์ • ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค