동기(Synchronous)와 비동기(Asynchronous)는 코드 실행 방식의 두 가지 주요 접근 방식이다.
동기는 직렬적으로 태스크를 수행하는 방식으로, 이전 태스크가 완료되어야 다음 태스크를 수행할 수 있다. 한 작업이 실행하는 동안, 다른 작업은 실행을 기다린다. 다시 말해, 코드의 실행이 순차적으로 일어나기에 이전 작업이 완료되지 않으면 다음 작업을 수행할 수 없다.
이 방식은 코드가 실행될 때 보통 호출한 함수가 반환될 때까지 기다릴 필요가 있을 때 사용된다. 만약, 동기 방식에서 순차적으로 실행되는 코드에서 문제가 발생하면 전체 애플리케이션이 멈추거나, 느려지는 문제가 발생할 수 있다. 자바스크립트는 기본적으로 동기적인 방식으로 실행되지만, 동기적인 실행방식의 단점이 있기 때문에 비동기적으로 프로그래밍한다.
비동기는 병렬적으로 태스크를 수행하는 방식으로, 이전 태스크의 완료 여부와 관계없이 다음 태스크를 수행할 수 있다. 한 작업이 완료되기를 기다리는 대신, 다른 작업을 실행한다. 다시 말해, 코드가 실행되는 동안 다른 태스크가 실행될 수 있으며, 완료 여부를 기다리지 않아도 된다. 비동기적 방식은 작업을 실행하는 동안 코드 실행이 차단되지 않기에 효율적으로 작동할 수 있다.
자바스크립트에서 비동기적인 코드 실행 방식은 대개 콜백 함수나 Promise 객체, async/await 문법을 사용한다. 콜백 함수는 비동기적인 코드 실행 방식에서 가장 오래된 방식으로, 코드의 실행 순서를 예측하기 어렵고 콜백 지옥(callback hell)이라는 문제가 발생할 수 있다. Promise 객체는 ES6에서 콜백 지옥을 해결하기 위해 도입된 객체로, 코드의 구조가 간결해지고 오류를 처리하기도 쉽다. async/await 문법은 Promise 객체를 기반으로 하는데, 비동기적인 코드를 동기적인 코드처럼 작성할 수 있어서 코드의 가독성이 좋아지고 오류 처리도 쉬워진다.
'개발기초' 카테고리의 다른 글
개발 방법론 (Development Methodology)에 대해서 (0) | 2023.04.19 |
---|---|
데이터베이스와 ORM (0) | 2023.04.18 |
[자바스크립트] 비동기적 처리를 돕는 '콜백 함수' (0) | 2023.04.13 |
[자바스크립트] 비동기적 처리를 위한 '이벤트 루프'에 대해 알아보자 (1) | 2023.04.13 |
객체 지향 설계 5원칙(SOLID) - 의존 역전 원칙 DIP [핵심간단] (0) | 2023.02.22 |
댓글