The Debugging Chronicles : "코드의 미학"
Mentor JAVA - section17. 람다식 본문
람다식
- 함수의 이름이 없는 익명 함수(anonymous function)를 만들기 위한 표현식이다.
- 함수만을 구현하고 실행할 수 있는 함수형 프로그래밍을 사용하여, 함수를 하나의간결한 식으로 표현한 것을 말한다.
- 식별자 없이 실행 가능한 함수를 말한다.
람다식 문법
- 메서드의 이름과 반환 타입을 제거하고 화살표 기호(→)를 사용해 구현한다.
· 소괄호 생략하기
매개변수자료형을 생략할 수 있으며, 매개 변수가 한 개인 경우에는 소괄호도 생략이 가능하다.
· 중괄호 생략하기
함수의 구현 내용이 한 문장이거나 return이 없다면 중괄호 { }도 생략 가능하다.
· return 생략하기
중괄호 안의 구현 코드가 return문만 존재할 때 중괄호와 return을 모두 생략 가능하다.
함수형 인터페이스
- 람다식은 Java에서 인터페이스를 사용할 때 상속하는 것을 생략할 수 있다.
- 단, 람다식을 이용해 인터페이스를 사용할 경우, 인터페이스는 하나으 ㅣ기능만을 정의할 수 있다.
- 오직 하나의 추상 메서드가 선언된 인터페이스만이 람다식의 타겟 타입이 될 수 있으며, 이러한 인터페이스를 함수형 인터페이스라고 한다.
- 람다식은 메서드명이 없는 익명 함수로 구현하기 때문에 여러 개의 메서드가 있을 경우 구분이 모호해 진다.
- 함수형 인터페이스 선언
· 자바 인터페이스를 이용해 선언한다.
public interface CompareNumber {
int comparteTo(int num01, int num02);
}
· 두 개 이상의 메서드를 추가하는 오류를 방지하기 위해 에노테이션을 부여해 제한할 수 있다.
@FunctionalInterface
public interface CompareNumber {
int comparteTo(int num01, int num02);
}
- 람다식 사용하기
· Java에서 해당 인터페이스를 클래스로 구현하지 않고 사용하려면 다음과 같이 익명 객체로 선언한 후 사용해야된다.
public interface CompareNumber {
int comparteTo(int num01, int num02);
}
//인터페이스 객체 선언 시 람다식을 이용해 함수를 구현
CompareNumber compare =
(num01, num02) -> {return num01 > num02 ? 1 : num01 < num02 ? -1 : 0;};
- 람다식과 외부변수의 관계
· 람다식을 사용할 때 외부에서 정의된 지역변수를 사용할 경우 그 지역변수는final로 선언되어야 한다.
· 지역 변수는 메모리 영역에 생성되고, 람다식의 경우 익명 객체를 만들기 때문에 Heap 영역에 생성되어 서로 생성 위치가 다르므로
간섭이 불가능하다. 그러므로 값을 그대로 사용하는 것만이 가능하고 수정은 불가능 하다.(variable capture)
'JAVA > Mentor JAVA' 카테고리의 다른 글
Mentor JAVA - section19. 파일 입출력 (0) | 2024.07.30 |
---|---|
Mentor JAVA - section18. 스레드 (0) | 2024.07.29 |
Mentor JAVA - section16. 컬렉션 프레임 워크 (0) | 2024.07.27 |
Mentor JAVA - section15. 기본 API 클래스 (0) | 2024.07.27 |
Mentor JAVA - section14. 예외 처리 (0) | 2024.07.25 |