함수(function)은 자바스크립트에서 가장 중요한 핵심 개념입니다.
또 다른 중요한 개념들(스코프, 객체, this 등)과도 매우 밀접한 연관이 되어있고, 코드를 작성하는데 있어서도 효율적으로 만들어주기에 아주 중요한 개념이라고 할 수 있습니다.
오늘은 중요한 개념인 함수(function)에 대해 자세히 알아봅시다.
작업을 수행하거나 값을 계산하기 위해 호출할 수 있는 하나의 코드 블록
대부분의 사람들은 학창시절 수학에서 함수에 대한 개념을 접해보았기에 많이 익숙할 것입니다. 어떠한 x 값을 수식에 대입하여 y값을 구하는...
프로그래밍에서의 함수도 크게 다르지 않습니다. 수학에서 함수는 숫자를 라는 범위에 한정 되어있던 것이라면, 프로그래밍에서는 이것이 조금 더 넓은 범위로 확장된 것이라고 생각하면 쉽습니다.
한 함수가 어떠한 기능을 수행한다고 했을 때, "입력"에 대해 원하는 "결과값"을 가져오도록 하는 내용을 모아둔 집합체, 그리고 수행하도록 설계된 명령들의 묶음이라고 생각하면 됩니다.
함수를 사용하면 동일한 내용을 반복적으로 사용하지 않아도 되게 됩니다.
다시말해 코드의 불필요한 반복을 줄일 수 있어 효율성을 높일 수 있게 됩니다.
// 코드 재사용성의 예시
function sum(A, B){
return A + B;
}
console.log(sum(10,20));
console.log(sum(20,30));
console.log(sum(30,40));
함수를 통해 비슷하거나 하나로 묶을 수 있는 기능의 작은 단위로 나눌 수 있습니다. 이를 통해 프로그램을 하나의 거대한 함수에서 여러 모듈들의 집합으로 만들어 조금 더 관리하기가 편리해집니다.
function calculateArea(width, height) {
return width * height;
}
function calculatePerimeter(width, height) {
return 2 * (width + height);
}
모듈화된 코드는 유지보수가 용이합니다. 프로그램에서 사용자의 요청사항이 생기거나, 버그로 인해 특정 기능을 변경해야 할 때가 생깁니다. 이때 함수를 통해 모듈화를 진행해 둔다면 특정 함수의 일부분만 수정하면 되기 때문에 유지보수에 큰 도움이 됩니다.
함수를 사용하여 코드를 명확하게 분리함으로써, 코드의 가독성을 높일 수 있습니다.
함수 단위로 코드를 나누면, 각 기능을 독립적으로 테스트가 가능합니다. 단위 테스트가 용이해져 프로그램의 안정성을 높일 수 있습니다.
순수함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 함수 외부의 어떤 상태도 변경하지 않는 함수를 순수함수라고 합니다. 이러한 특성 덕분에 순수함수는 예측 가능하고 테스트하기 쉬워, 함수형 프로그래밍에서 중요한 개념으로 여겨집니다.
이는 함수를 다른 변수에 할당할 수 있고, 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있는 함수를 의미합니다.
자바스크립트에서 함수는 일급 객체로 취급됩니다. 일급 함수의 개념은 고차 함수를 가능하게 하여, 자바스크립트 프로그래밍을 더욱 유연하고 표현력 있게 만듭니다. 예를 들어, 함수를 인자로 받아 해당 함수에 특정 작업을 추가한 후 새로운 함수를 반환하는 고차 함수를 쉽게 구현할 수 있습니다.
function greet() {
return "안녕하세요!";
}
function saySomething(getGreeting, name) {
console.log(`${getGreeting()} ${name}님`);
}
saySomething(greet, "뤼튼"); // 출력: 안녕하세요! 뤼튼님
함수를 선언하는 방법은 크게 두 가지가 있습니다: 함수 선언식과 함수 표현식입니다. 이 두 방식의 주요 차이점 중 하나는 호이스팅(hoisting)에 있습니다. 함수 선언식으로 정의된 함수는 코드의 어느 곳에서든 호출할 수 있지만, 함수 표현식으로 정의된 함수는 선언된 이후에만 호출할 수 있습니다.
함수 표현식은 함수를 변수에 할당하는 방식입니다. 이 방식은 함수가 호이스팅되지 않기 때문에, 함수 표현식이 코드상에서 선언되기 전에는 해당 함수를 호출할 수 없습니다.
const square = function(number) {
return number * number;
};
console.log(square(5)); // 출력: 25
함수 선언식은 function 키워드를 사용하여 함수의 이름과 함께 선언합니다. 함수 선언식으로 정의된 함수는 호이스팅되어 코드의 어디에서든지 호출할 수 있습니다.
function square(number) {
return number * number;
}
console.log(square(5)); // 출력: 25
ES6에서 도입된 화살표 함수는 함수를 더 짧고 간결하게 표현할 수 있게 해줍니다. 화살표 함수는 특히 this 바인딩이 일반적인 함수와 다르게 작동하는 것이 특징입니다.
const square = number => number * number;
console.log(square(5)); // 출력: 25
참고
hanamon.kr