hoonii2

[Java] 07. Lambda Expression 본문

개념 공부/(개발) 01. Java

[Java] 07. Lambda Expression

hoonii2 2022. 12. 9. 18:00

1. Lambda Expression
람다는 익명 함수이자 ( Anonymous Class 유사 ) 함수를 정의하는 간단한 방법으로 다른 함수에 인자를 전달하고 처리하는 방식을 정의할 있다.
 

 

2. Anonymous Class vs Lambda Expression
- Anonymous Class
인스턴스 생성을 하지만 , Lambda 매번 생성되지 않고 Heap Permanent 영역에 저장된다
- Anonymous Class
내에 데이터가 저장되어 밀접하게 동작하지만, Lambda 데이터와 별개로 동작


3. Shadowing


[ Anonymous Class ]

public class 둘러싼Class {
  private String firstName = "first";

  public void 메소드() {
    함수형인터페이스<String, String> AnonymousInstance = new 함수형인터페이스<String, String>() {
      @Override
      public String 함수형메소드(String subName) {
          // this.firstName 으론 불가능 , this 는 익명Class 인스턴스를 의미
        return 둘러싼Class.this.firstName + subName;
      }
    }
  }
}


[ Lambda ]

public class 둘러싼Class {
  private String firstName = "first";

  public void 메소드() {
    함수형인터페이스 <String,String> 인스턴스 = subName -> {
      return firstName + subName; // this 는 둘러싼 Class 를 의미, 그냥 firstName 과this.firstName 과 동일
    }
  }
}

 

4. 문법
- 람다는 익명의 코드 블록이다.
-
아래 2 코드는 동일하게 동작한다.

Array.sort(numbers, (o1,o2) -> o1.compareTo(o2));
Compator<Integer> com = (o1,o2) -> o1.compareTo(o2);
Array.sort(numbers, com);

- 함수형 인터페이스는 언제든 람다로 교체 가능

Interface 함수형인터페이스 {
  리턴타입 메소드 (매개변수);
}

(매개변수) -> { body }
매개변수 -> { body }

- Return 타입은 컴파일러에서 유추할 있기에 생략 가능
-
매개변수가 하나라면 괄호 생략 가능
 

Comments