새소식

Java

11. Lambda

  • -

 

 

Lambda(람다)가 뭐예요

람다는 정의하자면 함수형 프로그래밍의 형태로 재사용 가능한 코드 블록이다.

이전에 정의했던 익명 함수를 지칭하는 용어이기도 하면서 대충 클래스를 선언해서 메서드를 만들고... 이게 너무 비효율적이라고 여겨서 나오게 된 거 + 코드를 간결하게 하기 위함의 이유로 나온 함수이다.

 

 

람다 왜 쓰냐

코드가 간결해진다. 

public class LambdaTest {
    public static void main(String[] args) {
        MyInterface m1 = new MyInterface() { //1.익명을 이용한 MyInterface 구현부
            @Override
            public int max(int a, int b){
                return a > b ? a : b;
            }
        };
        System.out.println(m1.max(5,10));

        MyInterface m2 = (a,b) -> { return a > b ? a : b;}; // 2.람다를 이용한 구현부
        System.out.println(m2.max(5,10));

    }
}

@FunctionalInterface // 함수형 인터페이스
interface MyInterface{
    public int max(int a, int b);
}

 

 

람다의 조건

- 인터페이스 + 추상 메서드가 하나만 있을 때 사용 가능하다.(= 함수형 인터페이스에만 사용 가능)

함수형 인터페이스인지 확인하는 방법: @FunctionalInterface 어노테이션을 이용

- 람다식은 메서드명, 변수 정보를 간략화해서 표시한다.

- 당연히 메서드가 많다면 어떤 메서드를 호출할지 모르니까 람다식이 안된다.

 

 

 

 

람다의 특징

- 결국 메서드이기 때문에 외부의 멤버 변수 접근에 별다른 제약이 없다. (그 안쪽에 구현되었기 때문이다.)

- 같은 이유로 외부 로컬 변수의 값을 바꿀 수 없다.(참조형이 매개변수면 주소값이기에 가능)

- 정확히 말하자면 heap에 있는 변수는 조회, 변경이 둘 다 가능하다.

- stack에 있는 변수는 read only이다.

- 역시나 외부 메서드에도 영향을 못 준다.

- 매개변수가 한 개면 괄호를 생략해도 된다.

- 람다식 자체를 매개변수나 반환 값으로 사용할 수 있다.

- 람다 실행문 내부에서 다른 함수 하나만 쓰는 경우 + 매개변수를 다 쓴다면

 

이런 식의 축약도 가능하다.

 

'Java' 카테고리의 다른 글

13. Exception  (0) 2024.07.28
12. Stream API  (0) 2024.07.25
10. Comparable? Comparator?  (3) 2024.07.23
9. Generic  (3) 2024.07.22
8. 추상  (1) 2024.07.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.