less than 1 minute read

클로저(Closure)를 응용한 간단한 예제입니다.

function interviewquestion(job) {
  let jobQuestion = "";
  if(job === 'designer') {
    jobQuestion = ', UX에 대해 설명할 수 있나요?';
  } else if(job === 'teacher') {
    jobQuestion = ', 무슨 과목을 가르치 시나요?';
  } else {
    jobQuestion = ', 무슨 일을 하십니까??';
  }
  return function(name) {
    console.log(name + jobQuestion);
  }
}

실행 코드

var designerQuestion = interviewquestion('designer');
designerQuestion('길동');

// 길동, UX에 대해 설명할 수 있나요?

interviewquestion('teacher')('아무');
// 아무, 무슨 과목을 가르치 시나요?

함수 interviewquestion(job)function(name)를 반환합니다. 이때 jobQuestion 값에 대해서는 밖에서 접근이 불가능합니다. 이것이 Closure를 이용한것인데 오직 내부함수 function(name)에서만 접근이 가능합니다.

두번째로 실행한 interviewquestion 에서는 interviewquestion('teacher')로 함수가 실행되고 다시 ('아무')값을 받아 반환된 함수가 실행되었습니다.

만약 함수를 반환하지 않았다면 에러가 납니다.

function interviewquestion2(job) {
  let jobQuestion = '';
  if (job === 'designer') {
  jobQuestion = ', UX에 대해 설명할 수 있나요?';
  } else if (job === 'teacher') {
  jobQuestion = ', 무슨 과목을 가르치 시나요?';
  } else {
    jobQuestion = ', 무슨 일을 하십니까??';
  }
  return;
  console.log(name + jobQuestion);
}

interviewquestion2('teacher')('아무');

// TypeError: interviewquestion2(...) is not a function

간단한 예제로 클로저(Closure)가 캡슐화(Encapsulation)를 한다는 것을 살펴보았습니다.

Comments