콜백 패턴(callback pattern)
콜백 함수의 대표적인 사용처는 이벤트 핸들러이지만, 일반적인 자바스크립트 처리 로직 중에서도 이러한 콜백 패턴을 이용해서 해당 함수의 호출이 끝나고 난 뒤에 처리할 수 있도록 활용할 수 있습니다.
비동기 처리가 많은 자바스크립트에서 다양하게 응용할 수 있습니다. 특히 하나의 공통 라이브러리를 이용할 때 콜백 함수를 넘겨주는 것은 라이브러리의 확장성을 높입니다.
적용예시
ajax() 함수를 공통으로 사용하기 위해 콜백 패턴이 사용되었습니다. 이 함수는 XMLHttpRequest가 빈번하게 일어나기 때문에 이를 효율적으로 호출하려고 정의되었습니다. 예시와 같이 XMLHttpRequest의 순서가 보장되어야 할 때가 콜백 함수를 활용하기 가장 좋은 예입니다.
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="userInfo"></div>
<script>
(function () {
function ajax(method, url, data, callback) {
let xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = function () {
if (xhr.status === 200) {
callback.call(this, xhr.responseText);
}
}
xhr.send(data);
}
ajax("POST", "/login", "id=hello&password=word", function (responseText) {
if (responseText === "Success") {
console.log("Success to login!");
ajax("GET", "/userInfo", "id=hello", displayUserInfo);
} else {
console.log("Failed to login");
}
});
function displayUserInfo(responseText) {
document.getElementById("userInfo").innerHTML = responseText;
}
}());
</script>
</body>
</html>
특히 많이 사용되는 곳은 바로 Node.js와 같은 서버 환경입니다. 왜냐하면 Node.js와 같은 서버는 비동기 non-blocking으로 서버가 동작하며, 파일을 하나 읽을 때나 비동기 처리를 할 때 항상 콜백 패턴을 이용하기 때문입니다.
//Node.js의 파일 시스템에서 파일을 읽을 때의 콜백 함수 처리 부분
fs.readFile("/sample.txt", function(err, data) {
console.log(data);
});
4단계 이상의 콜백 함수가 겹치면 소스를 읽는 것 자체가 불가능할 정도로 복잡해지므로 적당하게 함수명을 따로 분리해서 소스를 정리하느 것이 콜백 패턴의 가장 주의할 점입니다.
#
참고 도서 : 속깊은 자바스크립트
이전글 :
2021/02/10 - [Study Note/Javascript] - javascript #디자인패턴 - 폼 검증을 위한 데커레이터 패턴(decorator pattern)
2021/02/10 - [Study Note/Javascript] - javascript #디자인패턴 - 객체 기반 데커레이터 패턴(decorator pattern)
2021/02/10 - [Study Note/Javascript] - javascript #디자인패턴 - 함수 기반 데커레이터 패턴(decorator pattern)
2021/02/10 - [Study Note/Javascript] - javascript #디자인패턴 - Init-time branching 패턴
2021/02/12 - [Study Note/Javascript] - javascript #디자인패턴 - Self-defining function 패턴
2021/02/13 - [Study Note/Javascript] - javascript #디자인패턴 - 메모이제이션 패턴 (memoization pattern)
2021/02/13 - [Study Note/Javascript] - javascript #디자인패턴 - Self-invoking constructor 패턴
'Study Note > Javascript' 카테고리의 다른 글
javascript #DOM reflow 시 자원 소모 최소화 방법 (0) | 2021.02.14 |
---|---|
javascript #디자인 패턴 - 커링 패턴(currying pattern) (0) | 2021.02.13 |
javascript #디자인패턴 - Self-invoking constructor 패턴 (0) | 2021.02.13 |
javascript #디자인패턴 - 메모이제이션 패턴 (memoization pattern) (0) | 2021.02.13 |
javascript #디자인패턴 - Self-defining function 패턴 (0) | 2021.02.12 |
댓글