앞의 아티클에서 람다식에서 정의하는 '함수적 인터페이스'의 기본 정의에 대해서 살펴보았습니다. 이때 추상 메서드는 단 한 개만 정의가 가능하다는 점도 배웠습니다. 그런데, 이렇게 정의된 하나의 추상 메서드의 선언 형태(파라미터, 리턴 값...)에 따라서 람다식 작성 방법이 달라진다는 사실을 기억해야 합니다. 해당 메서드의 선언 형태에 따라 달라지는 람다식 사용 방식에 대해서 하나씩 살펴보겠습니다.
○ 파라미터 / 리턴 값이 모두 없는 람다식
파라미터와 리턴 값이 모두 없는 추상 메서드가 선언되었을 경우의 사용 예시를 살펴보겠습니다. 사실 파라미터와 리턴 값이 없으므로 특이 사항은 없습니다. () -> { ... } 형태로 인터페이스를 구현해 주면 됩니다. 실제 예제를 통해서 살펴보겠습니다.
public interface MyFunctionalInterface {
public void method();
}
우선 위와 같이 MyFunctionalInterface 인터페이스가 선언되었습니다. 추상 메서드는 void 타입의 method()가 선언되었습니다. 이 인터페이스를 람다식으로 구현을 진행해 보겠습니다. () -> { ... }를 이용해, 간단하게 추상 메서드 method()를 반복하여 재정의 해 사용해 보겠습니다.
public class ExampleMain {
public static void main(String[] args) {
MyFunctionalInterface fi ;
fi = () -> {
String str = "method calling 1";
System.out.println(str);
};
fi.method();
fi = () -> {
System.out.println("method calling 2");
};
fi.method();
fi = () -> {
System.out.println("method calling 3");
};
fi.method();
}
}
인터페이스 타입 변수 fi를 선언하고, fi에 람다식을 이용해 MyFunctionalInterface에 대한 익명의 구현 클래스를 생성했습니다. 함수적 인터페이스의 경우 추상 메서드가 단 한 개라는 것을 기본으로 전제하기 때문에, 메서드 재정의 시점에 별도의 메서드 명 표시가 필요하지 않다는 것도 확인할 수 있습니다.
○ 파라미터가 있는 람다식
이번에는 MyFunctionalInterface 인터페이스의 추상 메서드에, 파라미터가 존재하는 경우를 산정해 보겠습니다. 리턴 값은 없다고 가정합니다.
@FunctionalInterface
public interface MyFunctionalInterface {
public void method(int x);
}
이와 같은 경우도 심플하게 람다식을 사용해 줄 수 있습니다. (x) -> { ... } 형태가 되기 때문이죠. 참고로 파라미터가 단 한 개일 경우에는 x -> { ... } 처럼 파라미터 괄호를 생략할 수도 있습니다.
public class ExampleMain {
public static void main(String[] args) {
MyFunctionalInterface fi;
fi = (x) -> {
int result = x + 5;
System.out.println(result);
};
fi.method(2);
fi = (x) -> {
System.out.println(x+5);
};
fi.method(2);
fi = x -> {
System.out.println(x+5);
};
fi.method(5);
}
}
/* 출력
7
7
10
*/
파라미터가 있는 경우, 위와 같이 람다식에서 파라미터 사용을 전제로 사용해주면 됩니다. 해당 메서드를 사용할 때는 fi.method(2)와 같은 형태로 사용해 줍니다.
다음 아티클에서는 파라미터, 리턴 값이 모두 존재하는 경우를 살펴보겠습니다.
'Programming > JAVA' 카테고리의 다른 글
람다식(3) - 클래스 멤버, 로컬 변수의 사용 1 (0) | 2023.05.18 |
---|---|
람다식(2) - 람다식의 타겟 타입, 함수적 인터페이스 3 (0) | 2023.05.16 |
람다식(2) - 람다식의 타겟 타입, 함수적 인터페이스 1 (1) | 2023.05.12 |
람다식(1) - 람다식의 정의와 기본 문법 (0) | 2023.05.10 |
제네릭(6) - 제네릭 타입의 상속과 구현 (0) | 2023.05.09 |