람다 표현식 종류

  1. ( parameters ) -> expression body

  2. ( parameters ) -> { expression body }

  3. () -> expression body

  4. () -> { 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 어노테이션을 사용하면 단일 메서드만 정의 가능. 두개 이상 선언할 경우 컴파일 에러 발생


익명클래스의 람다 표현식

@FunctionalInterface
public interface Func {
   public int calc(int a, int b);
}
  • 하나의 추상메세드만 가진 인터페이스 정의

  • @Functionalnterface으로 단일 메세드 선언을 강제


익명클래스로 인터페이스 구현

Func func = new Func ( ) {
   @Override
   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;

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기