( parameters ) -> expression body
( parameters ) -> { expression body }
() -> expression body
() -> { expression body }
( parameters ) -> expression body
- 함수에 파라메터가 있는 경우, 단일 오퍼레이션 또는 반환값만 존재할 경우
(int a, int b) -> return a+b;
( parameters ) -> { expression body }
- 함수에 파라메터가 있는 경우, 여러 오퍼레이션이 필요한 경우 중괄호로 감싼다.
(int a, int b) -> {
int c = 10;
int d = a+b * 10;
return d;
};
() -> expression body
- 함수에 파라메터가 없는 경우, 단일 오퍼레이션 또는 반환값만 존재할 경우
() -> return 10;
() -> { expression body }
- 함수에 파마메터가 없는 경우, 여러 오퍼레이션이 필요한 경우 중괄호로 감싼다.
() -> {
int a = 10;
int b = 20;
return a+b;
}
Java에서의 람다 표현식을 적극적으로 쓴다는 것은
함수형 프로그래밍을 통한 익명클래스, 익명함수의 간결한 표현이 가능
코드의 간결성, 가독성의 향상
Collection, Iterable 객체의 접근성 및 사용 편의성 증대
Java8에서 추가된 Stream API와 같이 사용함으로써 시너지 효과
등의 장점이 있다 하겠다.
Java에서 람다식으로 함수를 정의할 수 있는 방법
하나의 추상 메서드만 가지고 있는 인터페이스
인터페이스에
@FunctionInterface
어노테이션을 사용하면 단일 메서드만 정의 가능. 두개 이상 선언할 경우 컴파일 에러 발생
익명클래스의 람다 표현식
public interface Func {
public int calc(int a, int b);
}
하나의 추상메세드만 가진 인터페이스 정의
@Functionalnterface
으로 단일 메세드 선언을 강제
익명클래스로 인터페이스 구현
Func func = new Func ( ) {
public int calc(int a, int b) {
return a*b;
}
};
이렇게 람다 표현식으로 바꿀 수 있다.
Func funcLamda = (int a, int b) -> {
return a*b;
};
위의 익명클래스 구현방식과 비교해보면 바로 코드 간결성이 높아진 것을 알 수 있다.
단순 반환형 또는 단순 오퍼레이션의 함수일 경우, 조금 더 간결하게 줄일 수 있다.
Func funcLamda2 = (int a, int b) -> a*b;
최근댓글