Ch02. 람다식 표현

2024. 6. 18. 18:20Java/모던 자바 인 액션

기본

  • 람다식을 사용하려면, 메소드를 하나(=추상메소드) 가진 인터페이스가 필요하다.

  • A인터페이스를 구현한 클래스를 통해, A인터페이스 객체를 생성할 수 있다.
  • A인터페이스를 구현한 클래스를 만들지 않고도, 익명내부클래스를 통해 A인터페이스 객체를 생성할 수 있다.
  • 람다표현식으로도 A인터페이스 객체를 생성할 수 있다.
  • A a3 = () -> { System.out.println("난 람다식이네!"); }
  • 아래 코드는 모두 동일한 결과를 갖는다.
a1.m();
a2.m();
a3.m();
  • 추상 메소드는 총 4가지의 종류를 갖는다. 즉, 람다식으로 사용할 수 있는 메소드의 형태는 총 4가지이다.

  • 람다식을 통해 위 4가지 인터페이스에 대한 객체를 모두 생성해보자.

  • 첫번째 경우(파라미터가 없고, 구현 부분이 한줄인 경우), 아래처럼 간소화할 수 있다.
A a = () -> System.out.println("A");

  • 두번째 경우(파라미터가 한개이고, 구현 부분이 한줄인 경우), 아래처럼 간소화할 수 있다.
B b = str -> System.out.println(str);
  • 세번째 경우(파라미터가 없고, 구현 부분이 return으로 이루어진 한줄인 경우), 아래처럼 간소화할 수 있다.
C c = () -> "C";
  • 네번째 경우(파라미터가 있고, 구현 부분이 return으로 이루어진 한줄인 경우), 아래처럼 간소화할 수 있다.
D d = (x, y) -> x + y;
  • 또한, 람다식을 사용한 인터페이스에는 아래처럼 @FuntionalInterface 를 붙여준다. 이렇게 하면, 이 인터페이스에는 추상메소드 외에 다른 메소드를 추가할 수 없다.


FunctionalInterface (java.util.function패키지 내 존재하는 FunctionalInterface)

  • 간략하게 몇몇 FunctionalInterface를 살펴보도록 하겠다.

Interface 추상 메소드 형태

Consumer 매개변수 O, 리턴값 X
Supplier 매개변수 X, 리턴값 O
Function 매개변수 O, 리턴값 O
Operator 매개변수 O, 리턴값 O
Predicate 매개변수 O, 리턴값 O
  • 람다식을 사용할 메소드의 형태가 리턴값이 x, 매개변수가 하나면, Consumer라고 끝나는 인터페이스 중 하나를 선택하면 된다.
Consumer<Integer> consumer = x -> System.out.println(x);
consumer.accept(5);

-- 결과
5출력
  • 람다식을 사용할 메소드의 형태가 리턴값이 O, 매개변수가 하나면, Supplier라고 끝나는 인터페이스 중 하나를 선택하면 된다.
Supplier<Integer> supplier = () -> new Random().nextInt(10);
System.out.println(supplier.get());

-- 결과
0부터 9사이의 숫자가 랜덤하게 출력

FunctionalInterface의 추상메소드가 내가 구현한 람다식과 동일한 기능을 한다면?

class A implements IntConsumer{

	static void mA(int x){
		System.out.println(x);
	}
}
IntConsumer intConsumer = x -> System.out.println(x);

IntConsumer인터페이스에 x를 출력하는 추상메소드가 있다고 해보자.

또, 내가 구현한 람다식은 IntConsumer의 추상메소드와 동일한 기능이라고 가정하자.

만약 그렇다면, 아래처럼 간소화할 수 있다.

IntCousumer intConsumer = x -> A.mA(x);

이를 한번 더 간소화할 수 있다.

IntCousumer intConsumer = A::mA;
// 구현부분이 어떤 클래스의 메소드를 호출하는 형태라면 :: 사용가능!

 

  • 람다식을 통해 위 4가지 인터페이스에 대한 객체를 모두 생성해보자.

'Java > 모던 자바 인 액션' 카테고리의 다른 글

Ch04. 스트림 소개  (0) 2024.06.25
Ch01. 동적 파라미터화 코드 전달  (0) 2024.06.12