자바스크립트 메소드 얘기를 하려고 메소드 연기 사진을 가져왔다 🙄
모든 프로그래밍 언어는 함수라는 특징과 문법을 가지고 있다.
자바스크립트에서 함수는 조금 독특한 성격이 있는데, 함수가 값이 될 수 있다는 것이다.
a = {
b: function() {}
}
위 코드에서 a라는 객체는 b라는 키를 가진 프로퍼티를 갖고 있다. b라는 프로퍼티는 함수를 값으로 갖고 있는데, 자바스크립트에서는 이게 가능하다.
함수를 값으로 정의함으로써 갖는 또 하나의 특징은 함수의 매개변수나 인수(Argument)에 함수를 넣을 수 있다.
// 함수를 매개변수에 삽입
function cal(func, num) {
return func(num);
}
function increase(num) {
return num++;
}
function decrease(num) {
return num--;
}
// 함수 호출
console.log(cal(increase, 1)); // 2
console.log(cal(decrease, 1)); // 0
cal 이라는 함수에서 첫 번째 매개변수를 함수로 받았다. 그리고 해당 함수를 호출하면서 num 값을 인수로 넘겨준다.
따라서 increase 함수를 인수로 넘겨줄 때는 2라는 값이, decrease 함수를 인수로 넘겨줄 때는 0 값이 호출된다.
이 외에도 함수의 리턴값이나 배열의 값으로도 함수가 사용될 수 있다.
함수가 값이 될 수 있다는 점에서 자바스크립트에서 갖고 있는 특징과 명칭이 있다.
자바에서 메소드는 클래스 내에 메인 함수를 제외한 일반 함수를 부르는 의미로 사용된다.
자바스크립트에서 메소드는 객체 안에 함수를 갖고 있는 프로퍼티를 의미한다.
const cal = {
inc: function(num) {return num++;},
dec: function(num) {return num--;}
}
cal라는 객체는 inc와 dec라는 두 가지 키를 갖고 있고, 각 프로퍼티는 함수를 값으로 갖고 있다. 이걸 메소드라고 부른다.
(메소드 외에 함수라 하면 객체 외부에 별도로 정의된 함수를 의미한다)
콜백의 원어적 의미는 전화가 온 뒤에 부재중의 이유로 담당자가 받지 못할 경우, 대기했다가 담당자가 오면 다시 전화를 걸거나 받는 것을 의미한다.
자바스크립트에서 이 콜백을 간단하게 말하자면 볼 일이 끝난 함수가 호출되는 것을 의미한다!
콜백함수가 호출되면 인수에 함수가 들어가서 결과값이 완전히 바뀔 수 있다. 이것을 처리의 위임 이라 한다.
const addNum = function(num1, num2, callback) {
consloe.log(num1 + num2);
callback();
};
// 콜백용 함수
const finishLog = function() {
console.log('finish add function');
};
// 함수 호출
addNum(1, 2, finishLog);
// -- console --
// 3
// finish add function
위 예제에서는 addNum이라는 함수에 세 번째 인자에 finishLog 함수를 넣어서 호출했다. 콜백 함수로 넣었기 때문에 finishLog 함수의 호출로 콘솔 로그가 출력된다.
콜백 함수는 특히 자바스크립트에서 비동기 처리에 아주 유용하게 쓰인다.
함수의 인자에 콜백 함수를 넣어두면, 특정 데이터를 받아오거나 처리가 완료될 때 콜백함수를 호출하여 원 함수에서 사용할 수 있다.
다른 서버에 데이터를 요청하고 받아올 때, 해당 데이터가 처리되도록 하려면 비동기 처리를 해야한다. 이 때 콜백함수를 이용하는 방법이 쓰이는데 문제는 콜백을 너무 여러개 작성하다보면 가독성이 상당히 떨어지는 콜백지옥이 만들어진다...
비동기 처리에 대해서는 다음에 다시 다룰 예정이다. 그 때 이 콜백지옥을 다시 언급하고, 콜백지옥 대신에 쓰이는 최신 방법들에 대해서 소개하겠다.