java

[java] lambda를 이용해 callback 구현하기

2023. 7. 28. 17:32
목차
  1. lambda
  2. callback만들기
  3. 자주 사용되는 interface
  4. Parameter 넘기기
728x90
반응형

lambda

먼저 lambda에 대한 설명은 여기를 참고하자.

https://wouldyou.tistory.com/63

 

[java] Lambda 람다란?

람다함수 람다함수는 메소드를 하나의 식(Expression)으로 표현하는 것으로 익명함수(Anonymous function)를 생성 한다. 함수형 프로그래밍을 하고자 하며 나왔다고 한다. 자바에서는 메소드 혼자 선언

wouldyou.tistory.com

 

callback만들기

functional interface를 하나 생성해준다.

interface Testable {
void run();
}

interface를 아래와 같이 구현하면 callback처럼 사용할 수 있다.

public class Example {
// 인터페이스 Testable로 된 클래스를 실행하는 함수
public static void test(Testable test) {
// run 실행
test.run();
}
// 실행 함수
public static void main(String... args) {
// 람다식, 익명 클래스의 new의 선언도 없이 바로 run 함수를 실행할 수 있는 표현식
Testable obj = () -> {
// 콘솔 출력
System.out.println("run!");
};
// test 함수 실행
test(obj); //run!
}
}

 

 

자주 사용되는 interface

interface를 위처럼 만들어도 되지만, 이미 만들어져 있는 것을 가져다 쓸 수도 있다. 주로 Callbale과 Runnable이 많이 쓰인다.

Runnable
Callable

 

Runnable은 단순히 실행만시키고, Callable은 return을 할 수 있다.

 

public class Example {
// Runnable를 파라미터로 한 함수
public static void test1(Runnable test) {
// 함수 실행
test.run();
}
// Callable를 파라미터로 한 함수
public static <V> V test2(Callable<V> test) {
// Callable은 throws로 Exception이 설정되어 있음.
try {
// Callable에서 설정된 제네릭 값이 반환 타입이다.
return test.call();
} catch (Throwable e) {
return null;
}
}
// 실행 함수
public static void main(String... args) {
// test1를 람다식으로 설정한 예제
test1(() -> {
// 콘솔 출력
System.out.println("run!");
});
// test2를 람다식으로 설정한 예제
// Callable의 제네릭은 람다식의 return 데이터 타입에 의해 자동 설정
int data = test2(() -> {
// int형이기 때문에 test2의 반환 값을 int형으로 자동 설정된다.
return 10;
});
// 콘솔 출력
System.out.println("data - " + data);
}
// run!
// data - 10
}

 

 

Parameter 넘기기

parameter를 넘기고 싶다면 이렇게 하면 된다.

@FunctionalInterface
public interface MyCallable<V, S, V> {
V call(S param1, V param2);
}
public class Example {
public static <V, S, V> void test1(MyCallable<V, S, V> callback, S param1, V param2) {
callback.call(param1, param2);
}
// 실행 함수
public static void main(String... args) {
int res = test1((p1, p2) -> p1 + p2, 10, 20); //30
}
}
728x90
반응형

'java' 카테고리의 다른 글

[java] java 17의 새로운 점들!  (0) 2024.01.11
[java] Variable used in lambda expression should be final or effectively final, 람다 캡처링  (0) 2023.12.08
[java] 익명클래스  (0) 2023.04.05
[java] 코드 실행시간 측정하기  (0) 2023.03.31
[java] List, Map에서 유용하지만 생소한 함수 정리  (0) 2023.03.24
  1. lambda
  2. callback만들기
  3. 자주 사용되는 interface
  4. Parameter 넘기기
'java' 카테고리의 다른 글
  • [java] java 17의 새로운 점들!
  • [java] Variable used in lambda expression should be final or effectively final, 람다 캡처링
  • [java] 익명클래스
  • [java] 코드 실행시간 측정하기
우주유령
우주유령
우주유령
우주
우주유령
전체
오늘
어제
반응형
  • 분류 전체보기 (143)
    • javascript (29)
    • java (26)
    • Network,CI,CD (16)
    • React (7)
    • SQL (2)
    • Spring (20)
    • JSP (1)
    • Tools (20)
    • Vue (3)
    • publishing (2)
    • jpa (8)
    • 책 (1)
    • Test (6)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

최근 글

hELLO · Designed By 정상우.
우주유령
[java] lambda를 이용해 callback 구현하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.