개발자

js callback함수란?

2023년 10월 02일조회 57

fs.readFile(파일명,'utf8', function(err, data){}) 이런식의 비동기함수를 처리하는 callback함수가 있다고 할때 질문이 두가지가 있습니다. 1. 첫번째는 error고 두번째는 무조건 data가 오도록 한건 fs.readFile을 만든 개발자 마음인거죠? 이건 제가 변경할 수 없죠? 2. 위의 함수는 파일이 제대로 읽어질때까지(파일이 없다면 안읽어질때까지) 기다렸다가 callback 함수가 실행될텐데요. 대체 내부적으로 어떻게 구현이 되어있길래. 기다려주는건가요? 당연히 setTimeout을 쓰진 않겠지만, 내부적으로 setTimeout처럼 뭔가를 기다려주게 코드를 짜놓은건가요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

김인후님의 프로필 사진

1번은 맞습니다. 매개 변수명을 변경할 수는 있으나 첫번 째에 에러를 두번째에 결과값을 담는 것은 고정 입니다. 2번에서는 콜백 함수란 함수에 파라미터로 함수를 넘기는 겁니다. 즉 저희가 작성한 함수가 결과를 받아서 실행하는 것처럼 보이지만 정확하게는 받은 콜백 함수를 fs.reasFile에서 자기 로직이 끝나면 에러가 났을 경우 받은 함수 첫번째 파라미타로 에러를, 에러가 안 나오면 결과값을 두번째로 넘겨서 받은 콜백 함수를 실행 시키는 겁니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 10월 02일

1. 예, `fs.readFile` 함수의 콜백 함수는 첫 번째 파라미터로 에러 객체를 받고 두 번째 파라미터로 데이터를 받게 되어 있습니다. 이 구조는 Node.js에서 정해진 규칙으로 변경할 수 없습니다. 이 패턴은 "Error-first Callback"이라고 불리며, Node.js에서 비동기 작업을 다룰 때 널리 사용됩니다. 2. 자바스크립트는 싱글 스레드 언어입니다. 따라서 기본적으로 하나의 작업이 완료될 때까지 대기하는 것은 불가능합니다(그렇게 되면 아무것도 못하게 됩니다). 따라서 자바스크립트는 이벤트 드리븐 모델을 갖고 있습니다. 파일 읽기 작업을 시작하면 Node.js는 그 작업을 OS에 위임한 후, 바로 다음 태스크를 실행합니다(Node.js는 Non-Blocking I/O 모델을 따릅니다). 그래서 프로그램은 계속 진행될 수 있습니다. OS가 파일 읽기 작업을 마치면 Node.js에 알려줍니다(이벤트를 발생시킵니다). 여기서 Node.js의 Event Loop가 동작하는데, 이벤트 큐에 있는 작업들(여기선 파일 읽기 완료 이벤트)을 하나씩 꺼내어 콜백 함수를 호출합니다. 따라서 `fs.readFile`이 내부적으로 '기다리는' 것은 아니라, OS가 작업을 완료하면 알려주는 방식입니다. 이런 처리 방식 덕분에 Node.js는 비동기 작업을 효율적으로 다룰 수 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!