람다 표현식
- 이름이 없는 함수를 간결하게 정의
Arrays.sort(list, new StringLengthComparator());
Arrays.sort(list, (s1, s2) -> s1.length() - s2.length());
->
화살표연산자()
안에 매개변수(없으면 빈괄호)()
는 매개변수 1개면 생략가능- 매개변수 타입 생략시
var
적용 - 일부만
var
적용불가능 - 표현식여러문장이면
{}
작성 - 람다 표현식은 그 표현식이 등장하는 블록 가시영역에 포함됨
- 캡처라고함
- 캡처된변수는 수정불가
- 하지만 참조변수면 객체상태는 변경가능
int num = 10; // 지역 변수
// num이 final 이거나 실질적 final 변수일때만 캡처가능
// 람다 표현식에서 num을 사용
Runnable r = () -> System.out.println("Value of num: " + num);
함수형 인터페이스
- 단일 추상 메소드만 선언되어 있는 interface
- @FunctionalInterface
@FunctionalInterface
public interface MyFunctionalInterface {
// 하나의 추상 메소드
void myMethod();
}
public class LambdaExample {
public static void main(String[] args) {
// 람다 표현식으로 함수형 인터페이스 구현
MyFunctionalInterface myFunc = () -> System.out.println("Hello, Lambda!");
// 메소드 실행
myFunc.myMethod(); // 출력: Hello, Lambda!
}
}
메소드 참조
- 정적 메소드 참조 (
ClassName::staticMethod
) - 인스턴스 메소드 참조 (
instance::instanceMethod
) - 클래스의 인스턴스를 통한 인스턴스 메소드 참조 (
ClassName::instanceMethod
) - 생성자 참조 (
ClassName::new
)
블록람다
- 3줄 이상의 블록 람다가 필요하면 해당 문장들로 함수로 정의
'Language > JAVA' 카테고리의 다른 글
[Java] 범용프로그래밍 (0) | 2024.12.03 |
---|---|
[Java] Object 클래스 (0) | 2024.12.03 |
[Java]쓰레드, 레코드 (0) | 2024.12.03 |