[DEV] J-Jay

동기와 비동기 본문

Back-end/MSA

동기와 비동기

J-Jay 2023. 5. 14. 22:30
728x90
Caller와 Callee
  • 함수가 다른 함수를 호출하는 상황
  • Caller : 호출하는 함수
  • Callee: 호출 당하는 함수

Caller와 Callee

함수형 인터페이스
  • 함수형 프로그래밍을 지원하기 위해 java 8부터 도입
  • 1개의 추상 메서드를 가지고 있는 인터페이스
  • 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능하다 (1급 객체)
  • Fuction, Consumer, Supplier, Runnable 등이 있다
  • 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능하다
A (동기)
  • main은 getResult() 메소드의 결과에 관심이 있고, getResult() 결과를 이용해 다음 코드를 실행한다
public class A {
    public static void main(String[] args) {
        System.out.println("Start main");
        var result = getResult();
        var nextValue = result + 1;
        assert nextValue == 1;
        System.out.println("Finish main");
    }

    private static int getResult() {
        System.out.println("Start getResult");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        var result = 0;
        try {
            return result;
        } finally {
            System.out.println("Finish getResult");
        }
    }


}
B(비동기)
  • main은 getResult() 메소드의 결과에 관심이 없고, getResult() 결과를 이용해서 함수형 인터페이스를 실행한다
public class B {
    public static void main(String[] args) {
        System.out.println("Start main");
        getResult(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                var nextValue = integer + 1;
                assert nextValue ==1;
            }
        });
        System.out.println("Finish main");
    }

    private static void getResult(Consumer<Integer> cb) {
        System.out.println("Start getResult");
        try {
            Thread.sleep(1000);
        }catch (InterruptedException e){
            throw new RuntimeException(e);
        }

        var result = 0;
        cb.accept(result);
        System.out.println("Finish getResult");
    }
}

A(동기) 와 B(비동기)

결론
동기 비동기
Caller는 Callee의 결과에 관심이 있다 Caller는 callee의 결과에 관심이 없다
Caller는 결과를 이용해서 action을 수행한다 Callee는 결과를 이용해서 Callback을 수행한다

'Back-end > MSA' 카테고리의 다른 글

MSA 분해로 인해 생긴 문제 해결 방법  (0) 2024.04.25
MSA 분해로 생긴 문제들  (1) 2024.04.25
ExecutorService  (0) 2024.03.04
Future  (0) 2024.03.04
Blocking vs Non-Blocking  (1) 2024.02.26