JavaScript 함수 기초


함수 (Function)

함수는 일련의 연관성있는 명령어들을 사용하기 쉽게 포장해 놓은 것이에요.

함수는 보통 믹서기에 비유를 많이해요. 예를들어, 믹서기라는 함수에 당근과 토마토라는 값을 넣으면 당근 토마토 주스라는 결과를 우리에게 돌려주는 mixer() 라는 함수를 정의하면 아래처럼 할 수 있어요.

// mixer 함수 정의하기
function mixer(items) {
  // 명령어들의 모음
}

// mixer 함수 사용하기
mixer(['carrot', 'tomato']);
//=> 'carrot tomato juice'

우리는 믹서기 내부에서 어떠한 원리로 주스를 만드는지는 몰라요. 하지만 당근 토마토 주스라는 결과를 우리에게 주죠. 이게 함수를 사용하는 방식이에요.

함수를 사용하는 방식은 함수명 바로 뒤에 소괄호를 붙여서 사용해요. 이렇게 함수를 사용하는 것을 함수를 호출한다(call)고 해요.

mixer();

만약 함수에 어떠한 입력값을 주고싶다면 괄호 내부에 입력값을 적어 줄 수 있어요. 이때 괄호 내부에 적어주는 입력값을 인수 (arguments) 라고 부르고, 함수가 돌려주는 결과값을 반환값(return value) 리턴값 등으로 불러요.

함수 정의하기

함수는 이미 만들어져 있는 함수를 사용할 수도 있지만, 개발자가 직접 함수를 만들어서 사용하기도 해요. 이렇게 함수를 만드는 것을 함수를 정의한다 혹은 선언한다고 해요.

우리가 프로그래밍을 하기 위해서는 함수를 사용하는 방법 뿐아니라 함수를 정의하는 방법도 알아야해요.

function sum(a, b) {
  return a + b;
}

함수는 function 키워드를 사용해서 정의해요. 그 뒤에 함수명을 적고 함수의 인수로 사용할 파라미터를 소괄호에 적어줍니다. 그리고 중괄호 블록 내부의 코드가 함수가 처리하는 코드가 되요.

함수의 이름은 변수명과 비슷하게 camelCase로 작성해요. 변수명은 주로 명사를 이용해 만든다면 함수이름은 동사로 시작하는 경우가 많아요. getName() , createServer() 이런 식이죠.

함수명의 소괄호 내부에는 필요한 경우, 함수에서 사용할 인자(parameter)가 와요. 함수를 호출할 때 사용했던 값들을 대신하는 대명사와 비슷하죠. 즉 변수와 비슷하고, 그래서 매개변수라고도 불려요.

함수의 내부에 return 으로 시작하는 문장을 적어주게 되면 이는 함수의 반환값이 되요. 함수 내부에 return 이 없으면 반환값이 없는 것이 아니라 undefined 를 반환해요. 그리고 함수 내부의 코드가 실행되다가 return 문을 만나면 리턴문의 결과를 함수의 반환값으로 돌려주고 함수는 종료되요. 만약 리턴문 이후에 어떠한 코드가 있더라도 이는 실행되지 않는거죠.

함수 사용하기

함수를 호출하려면 함수 이름 뒤에 소괄호를 사용하고, 필요하다면 소괄호 내부에 인수를 사용해 호출하게 되요.

sum(2, 3);  //-> 5

위의 sum() 함수는 인자로 받은 두 숫자의 합을 구하는 함수에요. 여기서 함수에 넘겨주는 인자를 arguments 라고해요.

리터럴

리터럴(Literal)은 프로그램의 코드 상에서 데이터의 값을 표현하는 방식이에요.

숫자 리터럴, 함수 리터럴과 같이 사용하게 되는데, 예를 들어 숫자 리터럴은 아래와 같이 데이터의 값 자체를 뜻해요.

숫자 리터럴 : 0, 0xfff, 3.14, 2e2

함수 리터럴

함수를 정의할 때는 함수 리터럴로 정의할 수도 있어요. 위의 sum() 함수를 리터럴로 선언해봅시다.

var sum = function(a, b) {
  return a + b;
};

상단의 함수 선언과 달리 함수를 변수에 대입하는 형식입니다. 이때 함수 자체에는 이름이 없으므로 익명함수라고 불리구요.

함수를 사용하는 이유

동일한 작업을 반복해야 할 경우, 이러한 작업을 함수로 만들어 두면 함수 호출만으로 동일한 작업을 여러번 반복할 수 있어요. 또한 중복되는 코드의 양을 줄임으로써 코드를 읽고 이해하기 쉽게 만들어 주며, 수정시 해당하는 함수만 수정하면 되므로 유지보수가 편리해지는 장점이 있어요.

즉 함수를 사용하면 반복작업을 줄이고, 코드의 재사용성을 늘리고, 유지보수가 편리해집니다.