비동기(Async) 프로그래밍이 필요한 이유
동기 프로그래밍이란 A라는 작업이 끝난뒤에 B라는 작업을 하는 프로그램을 말합니다.
일반적으로 프로그램은 코드를 위에서 아래로 읽기 때문에 위에있는 code를 실행한 뒤에 아래 code를 실행하는 것이
일반적입니다.
위와 같은 Class를 정의하고 프로그램을 실행한다면 결과는 아래와 같이 나오는 것이 당연합니다.
위와 같은 동작이 동기 프로그래밍입니다. call_1 메서드를 실행하고 실행이 끝나기 전까지는 call_2와 call_3는 실행이 되지않고 대기하고 있기 때문입니다.
그런데 만약 john의 핸드폰이 전화와 문자를 동시에 할 수 없는 기기라고 가정하겠습니다. 그런데 john은 첫 번째 전화를 하면서 메세지를 보낸다면 메세지를 보내고 싶다면 어떻게 해야 할까요?
문자를 보내는 메서드를 호풀한다면 전화를 하는 메서드가 대기해야하기 때문에
한개의 핸드폰으로는 동시에 처리할 수 없습니다
그렇다면 핸드폰을 2개를 사용하거나 전화와 문자를 동시에 할 수 있는 핸드폰으로 바꾸면 될것입니다.
위 내용이 비동기 프로그래밍의 아이디어입니다.
즉, 한 메서드를 실행하는 동안에 다른 메서드도 실행할 수 있게 하는 것입니다.
그렇게 된다면 총 실행시간도 줄어들고, 웹의 입장에서는 UI가 끊기지 않으므로 응답성이 좋아집니다.
다른 예시로 만약 게임을 하는데 4개의 캐릭터로 사냥을 하는 게임이 있고 사냥을 하면서 경험치가 쌓이고
레벨이 올라가는 시스템이 있다고 해보겠습니다.
그런데 캐릭터마다 경험치를 계산하는 시간과 복잡도가 다르다면 오래걸리는 연산을 나중에 계산하는 것이 효율적입니다. 그런데 개발자가 어떤 캐릭터가 오래걸리는지 알지 못하고 일일이 확인할 수 없을땐 어떻게 해야 할까요
각캐릭터마다 동시에 경험치를 계산한다면 이 문제가 해결될 것입니다.
위의 이유들이 비동기적 프로그래밍이 필요한 이유입니다.
요청이 많아지고, 연산량이 많은 무거운 작업들을 할때에 효율적으로 처리할 수 있는 방법입니다.
'Java' 카테고리의 다른 글
CompletableFuture 클래스 (0) | 2023.12.31 |
---|---|
Stream - Collectors (2) | 2023.12.28 |
Stream (0) | 2023.12.27 |
람다 표현식의 동작과정 (0) | 2023.12.21 |
람다 표현식 사용 (0) | 2023.12.21 |