Promise와 async/await, 클로저

JungHoon Han·2023년 4월 20일
0

CS 지식

목록 보기
8/9

Promise

Javascript에서 비동기 프로그래밍을 위해 사용하는 중요한 기능 중 하나가 Promise이다.
Promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체로, then()과 catch() 메소드를 사용하여 성공 또는 실패 시 수행할 작업을 지정할 수 있다.

  • 장점 : 비동기 작업을 쉽게 처리할 수 있음

  • 단점 : 코드가 복잡해지면 콜백 지옥에 빠질 수 있음

// Promise 예시
const myPromise = new Promise((resolve, reject) => {
  setTimeOut(() => {
    resolve('Success');
  }, 1000);
})

myPromise.then((value) => {
  console.log(value); // 1초 후 'Success' 문자열 반환
}).catch((error) => {
  console.log(error);
})

async/await

Promise를 좀 더 쉽게 사용할 수 있도록 도와주는 문법으로, async 함수 내에서 await 키워드를 사용하여 Promise가 완료될 때까지 기다리고 결과를 반환한다.

  • 장점 : 코드의 가독성이 좋아짐

  • 단점 : try/catch 문을 사용하여 에러처리를 해야 함

// async/await 예시
async function getData() {
  try {
  	const response = await fetch('https://api.example.com/data'); 
    const data = await response.json();
    console.log(data);
  } catch (error) {
  	console.log(error);
  }
}

getData();

Promise와 async/await은 서로 보완재며 함께 사용된다. Promise를 사용하여 비동기 작업을 처리하고, async/await을 사용하여 코드의 가독성을 높일 수 있다.


클로저(Closure)

프로그래밍 언어에서 사용되는 기술로, 첫 번째 클래스 함수를 가진 언어에서 어휘적 범위 이름 바인딩을 구현하는데 사용되고, 운영적으로 클로저는 함수와 환경을 함께 저장하는 레코드이다.

  • 환경은 함수의 각 자유 변수(지역적으로 사용되지만 둘러싼 범위에서 정의된 변수)와 클로저가 생성될 때 이름이 바인딩된 값 또는 참조를 연결하는 매핑이다.
  • 클로저는 일반 함수와 달리 함수가 클로저의 값 또는 참조의 복사본을 통해 캡처된 변수에 접근할 수 있도록 허용하며, 이는 함수가 범위 외부에서 호출될 때에도 가능하다.
function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

let add5 = makeAdder(5);
let add10 = makeAdder(10);

console.log(add5(2)); // 7
console.log(add10(2)); // 12

makeAdder 함수는 클로저를 반환하고 이 클로저는 x의 값을 캡처하고 y의 값을 더한다.
add5add10은 각각 makeAdder 함수에 다른 인수를 전달하여 생성된 클로저다.

profile
Node.js 주니어 개발자

0개의 댓글