본문 바로가기
Javascript/javascript

자바스크립트 화살표 함수를 이용한 간결한 코드 작성하기!

by 노마드 산코디 2023. 8. 22.
728x90

자바스크립트 화살표 함수를 이용한 간결한 코드 작성하기!

 

 

안녕하세요!

 

오늘은 자바스크립트의 화살표 함수에 대해 깊이 있는 내용을 포스팅하려고 합니다. 이전 포스팅에서는 기본 함수에 대한 내용을 다뤘는데, ES6부터 도입된 화살표 함수는 기존의 함수와는 사용 방법과 기능의 차이를 가지고 있습니다. 이러한 차이점을 잘 이해하고 화살표 함수와 기본 함수를 조화롭게 사용한다면, 개발의 확장성을 더욱 높일 수 있을 것입니다.

자바스크립트의 화살표 함수는 함수 선언 방식과 특성 등을 통해 기존의 함수와는 다른 접근을 제공합니다. 이번 포스팅에서는 화살표 함수의 정확한 사용법과 특징을 다루며, 기본 함수와의 차이점을 명확하게 정리해 보겠습니다. 

 

 

 


화살표 함수의 기본 개념

자바스크립트의 화살표 함수(Arrow Function)는 ES6(ECMAScript 2015)에서 도입된 새로운 함수 선언 방식입니다. 이전의 기본 함수 선언 방식보다 간결하고 강력한 특성을 가지며, 주로 익명 함수(Anonymous Function)을 사용할 때 유용하게 활용됩니다. 아래는 화살표 함수의 기본 개념에 대한 정리입니다:

 


1. 간결한 문법

화살표 함수는 매우 간결한 문법을 가지고 있습니다. 화살표 함수의 구조는 (매개변수) => 표현식 또는 (매개변수) => { 문장 } 형태로 표현됩니다.

2. 함수 선언

일반 함수와 달리 function 키워드를 사용하지 않습니다. 화살표(=>)를 사용하여 함수를 선언합니다.

3. 매개변수

화살표 함수는 하나의 매개변수를 가질 때 괄호(())를 생략할 수 있습니다. 하나 이상의 매개변수가 있는 경우에는 괄호를 사용해야 합니다.

4. 표현식의 평가

화살표 함수의 본문이 단일 표현식인 경우, 중괄호({})를 생략하고 표현식의 결과가 암묵적으로 반환됩니다.

5. this 바인딩

화살표 함수는 자신만의 this를 가지지 않습니다. 대신, 함수가 선언된 컨텍스트의 this를 그대로 사용합니다. 이로 인해 this의 혼란을 줄여주는 장점이 있습니다.

6. 익명 함수

주로 콜백 함수나 간단한 함수를 익명으로 작성할 때 활용됩니다.

 

 

예시 코드

// 일반 함수 선언
function add(a, b) {
    return a + b;
}

// 화살표 함수 선언
const addArrow = (a, b) => a + b;

화살표 함수는 코드의 가독성을 높이고 간결한 문법으로 표현력을 향상시켜줍니다. 다만, 모든 상황에서 사용할 수 있는 것은 아니므로 사용 시 주의가 필요합니다.

 

 

 


화살표 함수의 장점

 

1. 간결한 문법

화살표 함수는 함수 선언을 간단하게 만들어줍니다. 단일 표현식은 중괄호 및 return 키워드 없이도 자동으로 반환됩니다.

2. 짧은 함수 정의

간단한 연산이나 반환을 위한 작은 함수를 간편하게 만들 수 있습니다.

3. this 바인딩의 해결

일반 함수 내에서의 this는 함수가 호출되는 문맥에 따라 결정됩니다. 화살표 함수는 자신만의 this를 가지지 않고 외부 스코프의 this를 사용하므로 this 바인딩 관련 문제를 해결해 줍니다.

4. 메서드 작성 간소화

객체의 메서드로 사용할 때, this가 외부 스코프로 유지되기 때문에 객체의 메서드를 정의할 때 유용합니다.

5. 클로저에서의 사용 편리

클로저 내부에서 사용될 때, 외부 스코프의 변수를 화살표 함수로 간단하게 캡처할 수 있습니다.

6. 가독성 향상

간결한 문법으로 인해 코드의 가독성이 향상되며, 함수의 목적을 명확하게 전달할 수 있습니다.

7. 반복적인 코드 간소화

반복적으로 사용되는 함수나 콜백 함수를 간결하게 표현하여 코드를 더 간소화할 수 있습니다.

8. 함수의 렉시컬 스코프

화살표 함수는 자신을 둘러싼 렉시컬 스코프 내에서 변수를 참조하므로, 클로저에서 예상치 못한 동작을 방지할 수 있습니다.

 


화살표 함수는 다양한 상황에서 코드를 더 직관적이고 간결하게 작성할 수 있도록 도와주며, 특히 this 바인딩 관련 문제를 해결하여 코드의 안정성을 높여줍니다.

 

 


화살표 함수의 활용

 

1. 단일 표현식 함수

화살표 함수는 단일 표현식의 결과를 자동으로 반환합니다. 이를 이용하여 간단한 계산 또는 값 반환이 필요한 함수를 간결하게 작성할 수 있습니다.

2. 함수 표현식으로 활용

화살표 함수는 함수 표현식으로 사용되기에, 다른 함수의 매개변수로 전달하거나 변수에 할당하여 사용할 수 있습니다.

3. 객체의 메서드로 활용

화살표 함수는 자신만의 this 컨텍스트를 가지지 않기 때문에, 객체의 메서드로 사용할 때 외부 스코프의 this를 사용하게 됩니다. 이를 이용하여 객체의 메서드를 간단하게 정의할 수 있습니다.

4. 콜백 함수로 사용

배열 메서드(map, filter, reduce 등)의 콜백 함수로 화살표 함수를 사용하면 코드가 간결해지며 가독성이 향상됩니다.

5 .클로저와 함께 사용

클로저 내에서 화살표 함수를 사용하면 외부 스코프의 변수를 간단하게 캡처하여 사용할 수 있습니다.

6. 명시적인 반환 생략

단일 표현식 함수에서는 return 키워드를 생략할 수 있어 코드가 더 간결해집니다.

7. 간결한 코드

함수를 간단하게 작성할 수 있기 때문에 코드가 더 직관적이고 가독성이 좋아집니다.

8. 이벤트 핸들러

이벤트 핸들러 등 다양한 상황에서도 화살표 함수를 사용하여 코드를 간결하게 작성할 수 있습니다.

 


화살표 함수는 기존의 함수와는 다른 사용 방법과 특징을 가지고 있어, 적절한 상황에서 적극적으로 활용하면 코드의 가독성을 높이고 개발 생산성을 향상할 수 있습니다.

 


화살표 함수의 문법과 사용법

 

화살표 함수 문법

(parameters) => expression
(parameters) => { statements }

 

(parameters)

매개변수들의 목록을 나타냅니다. 매개변수가 하나인 경우 괄호(())를 생략할 수 있습니다. 여러 매개변수가 있는 경우 괄호를 사용합니다.

 

expression

단일 표현식을 나타내며, 해당 표현식의 결과가 암묵적으로 반환됩니다.

 

{ statements }

중괄호 내에 여러 문장을 작성하고 결과를 return 키워드로 명시적으로 반환해야 합니다.

 


화살표 함수의 사용법

 

1. 매개변수 없는 함수

const greet = () => "Hello!";

 

2. 매개변수 있는 함수

const add = (a, b) => a + b;

 

3. 중괄호를 사용하여 여러 문장 작성

const multiply = (a, b) => {
    const result = a * b;
    return result;
};

 

4. 단일 매개변수 사용 시 괄호 생략

const square = x => x * x;

 

5. 객체 리터럴 반환

const createPerson = (name, age) => ({ name: name, age: age });

 

6. 콜백 함수로 사용

const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(num => num * 2);

 

7. this 바인딩

화살표 함수는 자신만의 this를 가지지 않고, 외부 컨텍스트의 this를 그대로 사용합니다. 이로써 this 바인딩 문제를 해결할 수 있습니다.

 

 

화살표 함수는 간결하고 명료한 문법을 제공하여 코드 작성을 편리하게 해 줍니다. 하지만 모든 상황에서 사용할 수 있는 것은 아니며, 메서드나 생성자 함수 등의 특별한 상황에서는 일반 함수를 사용하는 것이 좋습니다.

 

 


화살표 함수의 사용 시 주의할 점

 

1. this 바인딩

화살표 함수는 자체적인 this 컨텍스트를 가지지 않고, 외부 스코프의 this를 사용합니다. 따라서 객체의 메서드로 사용할 때 주의해야 하며, 생성자 함수로는 사용할 수 없습니다.

2. 생성자 함수로 사용 불가

화살표 함수는 생성자 함수로 사용할 수 없습니다. new 키워드와 함께 호출하면 에러가 발생할 수 있습니다.

3. arguments 객체 사용 불가

화살표 함수 내에서 arguments 객체를 사용할 수 없습니다. 화살표 함수 내에서 함수의 매개변수를 사용하거나 나머지 매개변수(rest parameters)를 활용하는 것이 좋습니다.

4. 블록 스코프가 아닌 표현식 사용

화살표 함수는 단일 표현식의 결과를 자동으로 반환하므로, 블록 스코프 내에서 여러 문장을 사용하는 경우 중괄호로 묶어야 합니다.

5. 중첩 함수 사용 시 주의

중첩 함수 내에서 화살표 함수를 사용할 때, 외부 함수의 this와 혼동될 수 있습니다. 이럴 때는 일반 함수 대신 화살표 함수를 사용할지 결정해야 합니다.

6. 가독성 고려

화살표 함수는 간결하게 코드를 작성할 수 있지만, 복잡한 로직이나 긴 함수를 정의할 때는 가독성을 위해 일반 함수를 선호할 수 있습니다.

7. 유지보수성 고려

코드베이스 내에서 화살표 함수와 일반 함수가 혼용되어 사용되는 경우, 일관성을 유지하고 팀원들과 협업할 때 유지보수성을 고려해야 합니다.

이러한 주의 사항을 숙지하고 적절한 상황에서 화살표 함수를 사용하면, 코드의 가독성과 효율성을 향상할 수 있습니다.

 

 


화살표 함수의 예제 소스 코드

화살표 함수를 사용하는 다양한 유형의 예제 소스 코드를 정리해 봤습니다.

 

1. 기본적인 화살표 함수

const add = (a, b) => a + b;
console.log(add(5, 3));  // 출력: 8

- 간결한 문법

화살표 함수는 함수의 매개변수가 여러 개인 경우 괄호로 묶어 사용할 수 있습니다. 위의 코드에서 (a, b)는 매개변수로 값을 받는 부분입니다.

- 표현식 사용

화살표 함수는 중괄호({}) 없이 한 줄로 표현식을 작성할 수 있습니다. 표현식의 결과가 암묵적으로 반환됩니다. 위의 예제에서는 a + b가 표현식으로 사용되어, 두 수의 합이 반환되고 출력됩니다.

- 명시적 반환 없이도 반환됨

중괄호가 없는 화살표 함수에서는 표현식의 결과가 암묵적으로 반환됩니다. 따라서 return 키워드를 명시적으로 사용하지 않아도 됩니다.

 


화살표 함수는 간결한 함수를 정의하고자 할 때 사용되며, 특히 한 줄로 간단하게 표현 가능한 함수의 경우에 유용합니다.

 


 

2. forEach와 함께 사용되는 화살표 함수

const numbers = [1, 2, 3, 4, 5];
numbers.forEach(num => console.log(num * 2));
// 출력: 2, 4, 6, 8, 10

- 간결한 문법

화살표 함수는 간결한 문법을 제공하며, 함수의 매개변수가 하나인 경우 괄호 없이 사용할 수 있습니다.

- 콜백 함수로 사용

forEach 메서드의 인자로 화살표 함수를 전달하여 각 요소에 대해 콜백 함수를 실행합니다. 이때, 콜백 함수 내에서 num 매개변수를 이용하여 각 요소를 처리하고, num * 2를 출력합니다.

- 암묵적 반환

화살표 함수는 중괄호({})를 사용하지 않고 한 줄로 표현할 수 있습니다. 이때는 암묵적으로 표현식의 결과가 반환됩니다. 위의 예제에서는 각 요소를 2배로 곱한 결과가 암묵적으로 반환되어 출력됩니다.

- 주변 스코프의 this 사용

화살표 함수는 주변 스코프의 this를 그대로 사용합니다. 따라서 forEach의 호출한 객체를 가리키는 this를 활용할 때 유용합니다.

화살표 함수는 주로 간결한 콜백 함수나 주변 스코프의 this를 유지하며 사용할 때 유용하며, 함수 본문이 복잡한 경우에는 일반 함수를 고려하는 것이 좋습니다.

 


 

3. 객체의 메서드로서 화살표 함수 사용

const person = {
  name: "Alice",
  greet: () => console.log(`Hello, ${this.name}!`)
};
person.greet();  // 출력: Hello, undefined!

- this 바인딩

화살표 함수는 자신만의 this를 생성하지 않습니다. 대신, 화살표 함수 내부에서의 this는 외부에 있는 함수나 블록의 this와 같습니다. 그래서 this.name은 현재 객체의 name 속성을 찾을 수 없어서 undefined가 출력됩니다.

- 메서드로 사용 시 주의

객체의 메서드로 화살표 함수를 사용하는 경우, 메서드 내부에서 this는 객체 자체가 아닌 주변 스코프의 this를 참조합니다. 따라서 메서드 내부에서 객체의 속성에 접근하는 경우에는 화살표 함수보다 일반 함수를 사용하는 것이 적합합니다.

- 일반 함수와 차이점

화살표 함수는 함수 내부에서 자신만의 this를 생성하지 않고 외부의 this를 유지합니다. 이를 통해 클로저나 콜백 함수에서 this를 유지할 수 있어 유용하지만, 객체의 메서드로 사용할 때는 this 동작에 주의해야 합니다.

따라서 객체의 메서드로 사용되는 경우에는 일반 함수를 사용하는 것이 보다 적합하며, 화살표 함수는 주변 스코프의 this를 그대로 사용하는 용도로 활용하는 것이 좋습니다.

 

 


4. 클로저와 함께 사용하는 화살표 함수

function counter() {
  let count = 0;
  return () => {
    count++;
    console.log(count);
  };
}
const increment = counter();
increment();  // 출력: 1
increment();  // 출력: 2

- 클로저와 화살표 함수

counter 함수는 내부에서 화살표 함수를 반환합니다. 반환된 화살표 함수는 counter 함수 내부의 지역 변수 count에 접근할 수 있습니다. 이렇게 화살표 함수가 외부 함수의 변수를 기억하면서 사용하는 것을 클로저라고 합니다.

- 변수 유지

increment 변수는 counter 함수가 반환한 화살표 함수를 참조합니다. 이렇게 반환된 화살표 함수는 외부 함수인 counter의 변수 count를 참조하며, 함수가 호출될 때마다 count가 증가하고 출력됩니다.

- 상태 유지

화살표 함수를 사용하여 count 변수를 유지하면서 호출할 때마다 값을 변경하고 출력할 수 있습니다. 이를 통해 함수 호출 간에 상태를 유지하면서 동작하는 기능을 구현할 수 있습니다.

 


 

5. 화살표 함수와 map 메서드 사용

const numbers = [1, 2, 3, 4, 5];
const squared = numbers.map(num => num * num);
console.log(squared);  // 출력: [1, 4, 9, 16, 25]

- 화살표 함수의 구문 (num => num * num)
   - num은 함수의 매개변수입니다.
   - =>는 화살표 함수를 나타내는 표기입니다.
   - num * num은 함수의 반환값을 나타냅니다.

 

- 매개변수 생략 가능

화살표 함수에서 매개변수가 하나라면 괄호 ()를 생략할 수 있습니다. 위의 예제에서는 배열의 각 요소가 매개변수로 사용되어 num * num을 계산하게 됩니다.

- 중괄호 생략

함수의 바디가 하나의 표현식인 경우 중괄호 {}와 return 키워드를 생략할 수 있습니다. 위의 예제에서는 num * num이 반환되므로 추가적인 중괄호나 return 키워드가 필요 없습니다.

- 함수의 반환

화살표 함수는 자동으로 표현식의 결과를 반환합니다. 따라서 return 키워드를 사용하지 않아도 됩니다.

 

 


최종 정리

 

오늘은 자바스크립트 화살표 함수에 대해 알아보았습니다. 화살표 함수는 ES6부터 도입된 기능으로, 기존의 함수와는 사용 방법과 기능의 차이가 있습니다. 이번 포스팅에서는 화살표 함수의 기본 개념부터 문법, 사용법까지 자세히 살펴보았습니다.

기존의 함수 선언 방식과 달리 화살표 함수는 함수를 더 간결하게 표현할 수 있게 해 줍니다. 화살표 함수는 함수 본문을 중괄호 {}로 감싸지 않아도 됩니다. 만약 함수의 본문이 한 줄인 경우에는 return문을 생략하고 표현할 수 있어 코드의 가독성을 높여줍니다. 또한, 함수 내부에서 this의 값이 바인딩되는 방식도 다르기 때문에 주의가 필요합니다.

화살표 함수는 배열의 map, forEach와 같은 고차 함수와 함께 사용하면 매우 효과적입니다. 간결한 문법으로 배열의 요소를 변형하거나 조작할 수 있어 코드를 간소화하고 가독성을 높여줍니다. 또한, 클로저와 함께 사용하여 다양한 상황에서 유용하게 활용할 수 있습니다.

하지만 주의할 점도 있습니다. 화살표 함수는 생성자 함수로 사용할 수 없으며, 메서드로도 사용할 때 주의가 필요합니다. 또한 함수 내부에서 this를 사용하는 경우에는 주의해서 사용해야 합니다. 화살표 함수의 this는 외부 함수의 this를 그대로 사용하기 때문에 원하지 않는 동작이 발생할 수 있습니다.


그럼 다음 포스팅에도 자바스크립트의 기본적인 내용들을 주제로 정리해 보도록 하겠습니다.

 

감사합니다.

 

728x90
반응형