재밌고 어려운 IT를 이해해보자~!
Section 17. 람다식 본문
01. 람다식(Lambda expression)
람다식은 함수의 이름이 없는 익명 함수를 만들기 위한 표현식이다.
함수를 하나의 간결한 식으로 표현한 것이 람다식. 즉, '식별자 없이 실행 가능한 함수'를 말한다.
02. 람다식 문법
int add(int x, int y) {
return x + y;
}
(x, y) -> {return x = y;}
매개변수 함수구현
메서드의 이름과 반환 타입을 제거한다.
X -> {return X*X}
매개변수 1개일때 소괄호 ( ) 생략가능
(x,y) -> System.out.println(x+y);
(x,Y( -> x > y ? 1 : 0;
void형 함수는 중괄호 { } 생략 가능
중괄호 안에 return문만 존재하면 return과 중괄호 생략가능
03. 함수형 인터페이스
객체 지향 프로그램에서 인터페이스를 사용하려면 클래스에 상속 시킨 뒤 내용을 구현해야한다.
림다식은 이를 생략할 수 있다. 단, 람다식을 이용해 인터페이스를 사용할 경우, 인터페이스는 하나의 기능만을 정의할 수있다.
인터페이스 안에 오직 하나의 추상 메서드가 선언되어 있으면 함수형 인터페이스를 만들 수 있다.
함수형 인터페이스 선언
@FunctionalInterface
public interface CompareNumber{
int compareTo(int num01, int num02);
}
람다식으로 구현한 인터페이스에 2개이상의 메서드를 추가하는걸 방지하기 위해 어노테이션을 부여해 제한할 수 있다. @FunctionalInterface
public static void main(String{} args) {
CompareNumber compare = new CompareNumber() {
@override
public int compareTo(int num01, int num02) {
return num01 > num02 ? 1 :0;
}
};
int num01 =10;
int num02 =20;
int result = compare.compareTo(num01,num02);
}
익명함수를 이용한 함수형 인터페이스 사용
public static void main(String{} args) {
// 인터페이스 객체 선언 시 람다식을 사용해 함수를 구현
CompareNumber compare = (num01, mum02) -> {num01 > num02 ? 1 :0;};
int num01 =10;
int num02 =20;
int result = compare.compareTo(num01, num02);
}
람다식과 외부변수 관계
public static void main(String{} args) {
int a =0;
CompareNumber compare = (num01, mum02) -> {
a = num01; // 지역변수를 람다식에서 재정의하면 에러발생
num01 > num02 ? 1 :0;
};
int num01 =10;
int num02 =20;
int result = compare.compareTo(num01, num02);
}
지역변수는 stack 메모리 영역에 생성, 람다식 or 익명클래스 의 경우 익명 객체를 만들기 떄문에 Heap 영역에 생성. 서로 위치가 다르기 떄문에 간섭할 수 없다. 그대로 사용은 가능하지만, 수정은 불가.
람다식 or 익명클래스에서 지역변수를 사용할 경우, 지역변수 앞에 final 키워드가 자동으로 붙는다.
'JAVA Book Study' 카테고리의 다른 글
Section 19. 파일 입출력 (0) | 2024.01.17 |
---|---|
Section 18. 스레드 (0) | 2024.01.02 |
Section 16. 컬렉션 프레임워크 (1) | 2024.01.01 |
Section 15. 기본 API 클래스 (2) | 2024.01.01 |
Section 14. 예외 처리 (0) | 2023.12.31 |
Comments