자바스크립트에서의 람다는 무엇이며, 일반함수와 익명함수의 차이를 이해하고 익명함수를 포함하는 람다 함수를 비교하는 시간!
람다함수
람다 함수(=람다 식)은 프로그래밍 언어에서 사용되는 개념
그 전에, 우선 일반 함수
와 익명 함수
를 알아야 한다.
일반 함수 기본형
function 함수명() {
함수로직
}
익명 함수 기본형
function() {
함수로직
}
위의 일반 함수와 익명 함수를 비교해 보면 함수 명의 유무의 차이인 것 을 알 수 있다.
익명이라는 이름과 같이 메모리를 차지하지 않는다.
따라서 람다로 코딩을 하면 메모리가 사용되지 않으므로 재 사용하지 않고 일회용으로 많이 사용된다.
이러한 이유 때문에 익명 함수는 아래와 같이 변수에 담아서 많이 사용된다.
const 변수 = function() {
함수로직
}
위와 같이 익명함수를 변수에 저장하는 방식을 리터럴 방식이라 한다.
리터럴은 코드 상에서 데이터를 표현하는 방식(ex. let ey = 123)으로,
변수를 선언함과 동시에 그 값을 저장(대입)해주는 방식
//일반 function
function happy(){
console.log("hi");
}
//익명 function
const happy = function (){
console.log("hi");
}
일반 함수는 함수에 이름을 붙여준 것이고, 익명함수의 경우 변수에 저장된 것 이다.
이때 익명함수는 호이스팅 시 위로 올라가지 않고 익명 함수를 저장한 변수만 올라가게 된다.
이 말은 위의 happy변수가 호이스팅 시 선언부에서 const happy로만 올라가게 된다.
따라서 아래의 코드는 에러가 발생.
happy2()
const happy2 = function (){
console.log('happy');
}
happy2()
// 첫번째 happy2()에서 에러 발생
// ReferenceError: Cannot access 'hanpy2' before initialization
하지만 일반 함수로 실행을 하면 호이스팅이 되어 에러가 발생하지 않음.
hanpy1()
// 일반함수
function hanpy1(){
console.log("hi");
}
hanpy1()
한 번만 사용하고 쓰지 않을 함수에 대해서는 익명 함수를 사용한다면, 불필요한 메모리를 줄일 수 있다.
화살표 함수(= 람다함수)
화살표 함수의 기본형은 아래와 같다.
// 일반함수
function happy1(){
console.log('hi');
}
// 화살표함수
const happy3 = () => {
console.log('hi');
}
직관적으로 보면, 화살표 함수는 짧아서 사용하기가 쉽다.
위의 예시를 보면 화살표 함수는 함수명이 없다. 따라서 화살표 함수를 익명 함수라고 부르기도 한다.
이 말은 익명함수에서 배운 것 처럼 메모리 관리가 효율적이다.
화살표 함수가 한 줄인 경우는 아래와 같이 더 짧게 사용하는 것도 가능.
// 화살표함수
const happy3 = () => console.log('hi');
화살표 함수에서의 this
다음의 예시를 통해서 위의 이해를 높여보자. 우선은 일반함수
target = 'global happy';
function test(){
console.log(this.target);
}
const object = {
target: 'local happy',
action: test
}
object.action();
결과 값은 ‘local happy’가 발생한다.
첫 번째 줄의 target은 전역 변수로 설정을 한 것.
화살표 함수는
target = 'global happy';
const test = () => {
console.log(this.target);
}
const object = {
target: 'local happy',
action: test
}
object.action();
결과 값은 ‘global happy’가 발생한다.
화살표 함수의 경우는 내부의 this는 선언한 시점에서 호출한다.
따라서 target 변수는 전역 설정한 값들이 들어오게 되는 것이다.
정리
화살표 함수와 람다 항수의 사용은 메모리 관리라고 할 수 있다.
함수의 사용방법에 따라 1회성 함수인지, 재활용 하는지에 대한 결정을 하고 사용 할 수 있으면 된다.
출처 : 구글링해서 나온 블로그!
'JavaScript' 카테고리의 다른 글
[JS] JS 생성자와 프로토타입 (0) | 2023.03.14 |
---|---|
[JS] JS 스코프(Scope) 유효범위 가볍게 이해하기 (0) | 2023.03.14 |
[JS] 콜백(Callback) 함수란? (0) | 2023.02.23 |
[JS] 일반함수와 화살표함수의 차이 (0) | 2023.02.22 |
[JS] NPM과 기본타입 살펴보기 (0) | 2023.02.21 |