1 λΆ„ μ†Œμš”

λžŒλ‹€ ν•¨μˆ˜κ°€ λ­”λŽ¨?

λžŒλ‹€ ν•¨μˆ˜λŠ” 읡λͺ… ν•¨μˆ˜λ₯Ό μ§€μΉ­ν•˜λŠ” μš©μ–΄μ΄λ‹€.
그럼 λžŒλ‹€ ν•¨μˆ˜λ₯Ό μ΄μš©ν•œ ν‘œν˜„μ‹μ„ λžŒλ‹€ ν‘œν˜„μ‹μ΄λΌκ³  말할 수 μžˆκ² λ‹€!

λžŒλ‹€ ν‘œν˜„μ‹

λžŒλ‹€ ν‘œν˜„μ‹μ€ κ°„λ‹¨ν•˜κ²Œ λ§ν•˜λ©΄ β€œλ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜μ˜ μ‹μœΌλ‘œ ν‘œν˜„ν•œ 것”이닀.

[λ©”μ†Œλ“œ]

int min(int x, int y) {

    return x < y ? x : y;

}

[λžŒλ‹€ ν‘œν˜„μ‹]

(x, y) -> x < y ? x : y;

[읡λͺ… 클래슀]

new Object() {

    int min(int x, int y) {

        return x < y ? x : y;

    }

}

μœ„μ˜ 예제처럼 λ©”μ†Œλ“œλ₯Ό λžŒλ‹€ ν‘œν˜„μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄, 클래슀λ₯Ό μž‘μ„±ν•˜κ³  객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
그런데 μžλ°”μ—μ„œλŠ” 클래슀의 μ„ μ–Έκ³Ό λ™μ‹œμ— 객체λ₯Ό μƒμ„±ν•˜λ―€λ‘œ, β€œλ‹¨ ν•˜λ‚˜μ˜ κ°μ²΄λ§Œμ„ 생성할 수 μžˆλŠ” 클래슀λ₯Ό 읡λͺ… ν΄λž˜μŠ€β€œλΌκ³  ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μžλ°”μ—μ„œ λžŒλ‹€ ν‘œν˜„μ‹μ€ 읡λͺ… ν΄λž˜μŠ€μ™€ κ°™λ‹€κ³  ν•  수 μžˆλ‹€.

읡λͺ…(Anonymous) ν•¨μˆ˜, ν΄λž˜μŠ€λž€?

자꾸 읡λͺ…, 읡λͺ… ν•˜λŠ”λ° 읡λͺ… 클래슀, 읡λͺ… ν•¨μˆ˜κ°€ λ„λŒ€μ²΄ 뭘까 μ‹Άμ—ˆλ‹€.

읡λͺ… ν•¨μˆ˜
읡λͺ… ν•¨μˆ˜λŠ” 말 κ·ΈλŒ€λ‘œ 이름이 μ—†λŠ” ν•¨μˆ˜μ΄λ‹€.
κ³΅ν†΅μ μœΌλ‘œ 일급 객체λ₯Ό 가지고 μžˆλ‹€.
일급 κ°μ²΄λž€, 일반적으둜 λ‹€λ₯Ό 객체듀에 적용 κ°€λŠ₯ν•œ 연산을 λͺ¨λ‘ μ§€μ›ν•˜λŠ” 개체λ₯Ό λ§ν•œλ‹€.
읡λͺ… 클래슀
읡λͺ… ν•¨μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 이름이 μ—†λŠ” 클래슀λ₯Ό λ§ν•œλ‹€.
클래슀의 μ„ μ–Έ 객체의 생성을 λ™μ‹œμ— ν•˜κΈ° λ•Œλ¬Έμ— 단 ν•œλ²ˆλ§Œ μ‚¬μš©λ  수 μžˆλ‹€.
μ‰½κ²Œ 말해, 였직 ν•˜λ‚˜μ˜ 객체만 생성할 수 μžˆλŠ” 일회용 클래슀λ₯Ό λ§ν•œλ‹€.

λžŒλ‹€ ν‘œν˜„μ‹ μž‘μ„±λ²•

java8λΆ€ν„° λžŒλ‹€ ν‘œν˜„μ‹μ„ μ§€μ›ν•œλ‹€.
λžŒλ‹€ ν‘œν˜„μ‹μ„ μž‘μ„±ν•˜λŠ” 방법은 ν™”μ‚΄ν‘œ(->)λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•  수 μžˆλ‹€.

[문법]

(λ§€κ°œλ³€μˆ˜λͺ©λ‘) -> { ν•¨μˆ˜λͺΈμ²΄ }
  1. λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ„ μΆ”λ‘ ν•  수 μžˆλŠ” κ²½μš°μ—λŠ” νƒ€μž…μ„ μƒλž΅ν•  수 μžˆλ‹€.
  2. λ§€κ°œλ³€μˆ˜κ°€ ν•˜λ‚˜μΈ κ²½μš°μ—λŠ” κ΄„ν˜Έ(())λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
  3. ν•¨μˆ˜μ˜ λͺΈμ²΄κ°€ ν•˜λ‚˜μ˜ λͺ…λ Ήλ¬Έλ§ŒμœΌλ‘œ 이루어진 κ²½μš°μ—λŠ” μ€‘κ΄„ν˜Έ({})λ₯Ό μƒλž΅ν•  수 μžˆλ‹€. (μ΄λ•Œ μ„Έλ―Έμ½œλ‘ (;)은 뢙이지 μ•ŠμŒ)
  4. ν•¨μˆ˜μ˜ λͺΈμ²΄κ°€ ν•˜λ‚˜μ˜ return 문으둜만 이루어진 κ²½μš°μ—λŠ” μ€‘κ΄„ν˜Έ({})λ₯Ό μƒλž΅ν•  수 μ—†λ‹€.
  5. return λ¬Έ λŒ€μ‹  ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 있으며, μ΄λ•Œ λ°˜ν™˜κ°’μ€ ν‘œν˜„μ‹μ˜ κ²°κ³Όκ°€ λœλ‹€. (μ΄λ•Œ μ„Έλ―Έμ½œλ‘ (;)은 뢙이지 μ•ŠμŒ)

예제

μΈν”„λŸ° - κΉ€μ˜ν•œ κ°•μ‚¬λ‹˜μ˜ κ°•μ˜ 쀑 λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•œ 경우의 일뢀뢄이닀.

[원본]

ContextV2 context = new ContextV2();
        context.execute(new Strategy() {
            @Override
            public void call() {
                log.info("λΉ„μ¦ˆλ‹ˆμŠ€ 둜직1 μ‹€ν–‰");
            }
        });


[λžŒλ‹€ ν‘œν˜„μ‹ 적용]

ContextV2 context = new ContextV2();
        // λžŒλ‹€μ‹μœΌλ‘œ λ³€ν˜•ν•˜λ €λ©΄, option + enter λˆ„λ₯΄κΈ°
        context.execute(() -> log.info("λΉ„μ¦ˆλ‹ˆμŠ€ 둜직1 μ‹€ν–‰"));

μœ„μ˜ 예제λ₯Ό 보면, execute()의 ν•¨μˆ˜μ—μ„œ λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” 객체인 Strategy의 본체인 log.info()λ₯Ό ν™”μ‚΄ν‘œ(->)λ₯Ό μ‚¬μš©ν•˜μ—¬ 가리킨닀.

참고자료

https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95
http://www.tcpschool.com/java/java_lambda_concept
https://mindols.tistory.com/103

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°