js deep dive [12 함수 part 01]
함수란 무엇일까 ?
input 에 대하여 어떠한 행동을 한 뒤에 result 를 반환하는 녀석을 뜻한다.
function add(a, b) {
return a + b;
}
와 같은 함수가 있다고 가정 하자 .
이함수는 들어온 입력 a, b 에 대해 더한값을 리턴 해주는 녀석을 뜻한다.
여기서 참 재미 있는 점은.
그냥 함수라고 표현하는 것이 아니라. add를 함수의 이름, (a, b) 를 함수의 매개변수
return (a + b)의 (a + b) 를 반환값 이란 이름을 통해서 정의 하고 있다.
왜 이렇게 정의를 하는 것일까?
이유는 앞에서 사용했던 것과 같이 객체는 mutable 한 것 이기 때문에 변화 할 수 있기 때문이다.
내부의 값이 변화 할 때도 사실 실질적인 값이 변화하는 것이 아니라 매개변수의 변화를 이용해서
같은 명령을 반복을 통해 다른 결과를 반환 하는 것이다.
여기서 함수에 대해서 공부하다 보면,
함수 리터럴 과 같은 말을 한다. 여기서
리터럴에 대해서 알아볼 필요성이
있었다.
리터럴이란. 데이터의 집합체로, 변화하지 않는 고정된 데이터 라고 설명 할 수 있을듯 하다.
보다보면, 이게 원시값과 비슷하지 않은가 라는 생각이 든다.
확신 할 수는 없지만. 비슷한 내용의 이야기를 말하는듯 하다.
여기서 함수를 선언할때 자바스크립트의 경우
익명함수와 기명함수로 구조가 나뉘는데
그렇다면 익명함수는 무엇이고 기명함수는 무엇일까.
익명함수란 var p_func = function () {
};
처럼 함수의 이름이 없고 이를 변수에 할당해서 사용하는 방식과 같이 사용한다.
그렇다면 기명함수는 무엇일까
평범하게 우리가 function func_name() {
}
과 같이 선언을 하는 녀석, 즉 함수의 이름이 정해진 녀석들을 의미한다고 볼 수 있다.
그렇다면 왜 두가지를 구분하게 된 것 일까 ?
내 생각은 javascript가 만들어진 이유에 있다고 생각한다.
javascript 의 경우 실시간으로 인터랙티브 한 녀석들을 동작하는게 목적이 된 언어 였기 때문에
프로세스가 실행중일때 동작되는 녀석과 처음 빌드 되고 실행 되는 녀석이 달라질수 있다.
이때 익명 함수의 경우 실제 프로세스가 런타임이 되는 시간에서 동적으로 선언이 되기 떄문에
이를 이용해서 특정한 로직을 추가하여 사용 가능하다 .
func();
var func = function(){
console.log("익명 함수 실행");
}
func();
function func () {
console.log("선언식 함수 실행");
}
와 같은 식으로 가능한 것을 확인 할 수 있다.
이때
처럼 func 가 변경 되는 것을 확인 할 수 있다.