코딩 스쿨 JavaScript

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP
▶ JavaScript Tutorial
JavaScript HOME
JavaScript Introduction
JavaScript Where To
JavaScript Output
JavaScript Statements
JavaScript Syntax
JavaScript Comments
JavaScript Variables
JavaScript Let
JavaScript Const
JavaScript Operators
JavaScript Arithmetic
JavaScript Assignment
JavaScript Data Types
JavaScript Functions
JavaScript Objects
JavaScript Object Properties
JavaScript Object Methods
JavaScript Object Display
JavaScript Object Constructors
JavaScript Events
JavaScript Strings
JavaScript String Methods
JavaScript String Search
JavaScript String Templates
JavaScript Numbers
JavaScript BigInt
JavaScript Number Methods
JavaScript Number Properties
JavaScript Arrays
JavaScript Array Methods
JavaScript Array Search
JavaScript Array Sort
JavaScript Array Iteration
JavaScript Array Const
JavaScript Dates
JavaScript Date Formats
JavaScript Date Get Methods
JavaScript Date Set Methods
JavaScript Math
JavaScript Random
JavaScript Booleans
JavaScript Comparisons
JavaScript If Else
JavaScript Switch
JavaScript Loop For
JavaScript Loop For In
JavaScript Loop For Of
JavaScript Loop While
JavaScript Break
JavaScript Iterables
JavaScript Sets
JavaScript Set Methods
JavaScript Maps
JavaScript Map Methods
JavaScript Typeof
JavaScript Type Conversion
JavaScript Destructuring
JavaScript Bitwise
JavaScript RegExp
JavaScript Precedence
JavaScript Errors
JavaScript Scope
JavaScript Hoisting
JavaScript Strict Mode
JavaScript this Keyword
JavaScript Arrow Function
JavaScript Classes
JavaScript Modules
JavaScript JavaScriptON
JavaScript Debugging
JavaScript Style Guide
JavaScript Best Practices
JavaScript Mistakes
JavaScript Performance
JavaScript Reserved Words

JavaScript Arrow Function

JavaScript Arrow Function: 화살표 함수의 이해와 활용

  • *JavaScript 화살표 함수(Arrow Function)**는 ES6(ECMAScript 2015)에서 도입된 새로운 함수 정의 방식입니다. 간결한 구문동일한 문맥에서 this를 상속하는 특징을 가지며, 기존의 함수 표현식보다 더 짧고 직관적으로 코드를 작성할 수 있게 도와줍니다. 화살표 함수는 주로 콜백 함수나 간단한 연산에 자주 사용됩니다.

이 가이드는 화살표 함수의 기본 문법동작 원리, 그리고 사용 시 주의할 점을 설명합니다.


1. 화살표 함수의 기본 문법

화살표 함수는 기존 함수 표현식보다 더 간결한 문법을 사용합니다. 기본적으로 매개변수, 함수의 본문을 간략하게 표현할 수 있으며, function 키워드 대신 **=>(화살표)**를 사용합니다.

1.1. 기본 화살표 함수 구문

const 함수이름 = (매개변수) => {
    // 함수 본문
    return 값;
};

1.1.1. 예시: 두 숫자를 더하는 함수

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

1.2. 매개변수가 하나인 경우

매개변수가 하나일 때괄호를 생략할 수 있습니다.

const square = x => {
    return x * x;
};
console.log(square(4));  // 출력: 16

1.3. 함수 본문이 하나의 표현식인 경우

함수 본문이 단일 표현식일 경우 중괄호({})와 return 키워드를 생략할 수 있습니다. 이 경우 결과가 자동으로 반환됩니다.

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


2. 화살표 함수의 this 바인딩

화살표 함수는 기존 함수와 달리 this를 바인딩하지 않으며, 상위 스코프에서 this를 상속받습니다. 즉, 화살표 함수는 **this가 자신을 감싸고 있는 함수나 객체의 this**와 동일하게 동작합니다.

2.1. 예시: 화살표 함수에서의 this

const person = {
    name: "Alice",
    greet: function() {
        setTimeout(() => {
            console.log(`Hello, ${this.name}`);  // this는 상위 스코프(person)를 참조
        }, 1000);
    }
};

person.greet();  // 출력: Hello, Alice

위 예시에서 화살표 함수는 상위 함수인 greet 메서드의 **this**를 그대로 상속받습니다. 즉, 화살표 함수 내부의 thisperson 객체를 가리킵니다.

2.2. 일반 함수에서의 this와의 차이점

기존 함수(일반 함수)에서는 this가 호출된 방법에 따라 동적으로 바뀌지만, 화살표 함수에서는 this동적으로 바뀌지 않고 상위 스코프this를 사용합니다.

2.2.1. 예시: 일반 함수에서의 this

const person = {
    name: "Bob",
    greet: function() {
        setTimeout(function() {
            console.log(`Hello, ${this.name}`);  // this는 전역 객체(window)를 참조
        }, 1000);
    }
};

person.greet();  // 출력: Hello, undefined

위 예시에서 일반 함수 내부의 **this**는 전역 객체(window 또는 global)를 참조하기 때문에 this.name이 **undefined**로 출력됩니다. 이를 해결하려면 bind(), call(), **apply()**를 사용해야 하지만, 화살표 함수는 이 문제를 자연스럽게 해결해 줍니다.


3. 화살표 함수의 주요 특징

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

화살표 함수는 생성자 함수로 사용할 수 없습니다. 즉, new 키워드로 호출할 수 없습니다. 화살표 함수는 this 바인딩을 하지 않기 때문에, 생성자 함수로 적합하지 않습니다.

const Person = (name) => {
    this.name = name;
};

const p = new Person("Alice");  // 오류: Person은 생성자로 사용할 수 없음

3.2. arguments 객체를 가질 수 없음

화살표 함수는 arguments 객체를 지원하지 않습니다. 매개변수 목록에 대한 접근이 필요한 경우에는 rest 파라미터(...args)를 사용해야 합니다.

const sum = (...args) => {
    return args.reduce((acc, val) => acc + val, 0);
};

console.log(sum(1, 2, 3));  // 출력: 6

3.3. 메서드로 사용 시 주의사항

객체 메서드를 정의할 때 화살표 함수를 사용하면 this상위 스코프this를 참조하므로, 의도한 대로 동작하지 않을 수 있습니다. 객체의 메서드를 정의할 때는 일반 함수를 사용하는 것이 좋습니다.

const person = {
    name: "Charlie",
    greet: () => {
        console.log(`Hello, ${this.name}`);  // this는 전역 객체를 참조
    }
};

person.greet();  // 출력: Hello, undefined

위 예시에서 greet 메서드는 화살표 함수로 정의되었기 때문에 this전역 객체를 참조하게 됩니다. 따라서 name 속성에 접근할 수 없습니다.


4. 화살표 함수의 활용 사례

화살표 함수는 주로 콜백 함수간단한 연산에 유용하게 사용됩니다. 특히, this 바인딩 문제를 해결하는 데 효과적입니다.

4.1. 배열 메서드에서의 화살표 함수

화살표 함수는 배열 메서드(map(), filter(), reduce() 등)와 같은 고차 함수에서 콜백 함수로 자주 사용됩니다.

4.1.1. map()에서 사용

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

4.2. 이벤트 핸들러에서의 화살표 함수

화살표 함수는 이벤트 핸들러에서 this가 의도하지 않게 바뀌는 문제를 방지하는 데 유용합니다.

const button = document.getElementById("myButton");
button.addEventListener("click", () => {
    console.log(this);  // this는 상위 스코프의 this (전역 객체)를 상속
});

4.3. 간단한 표현식 처리

화살표 함수는 단순한 계산이나 연산을 처리할 때 간결한 구문을 제공해 코드를 더 읽기 쉽게 만듭니다.

const double = x => x * 2;
console.log(double(4));  // 출력: 8


5. 화살표 함수 사용 시 주의사항

5.1. 객체 메서드로 정의할 때 주의

객체의 메서드를 정의할 때는 일반 함수를 사용하는 것이 권장됩니다. 화살표 함수는 this를 상속하기 때문에, 객체 내부에서 사용할 경우 this가 예상과 다르게 동작할 수 있습니다.

const person = {
    name: "Daisy",
    greet: function() {
        console.log(`Hello, ${this.name}`);  // 정상적으로 동작
    }
};
person.greet();  // 출력: Hello, Daisy

5.2. 생성자 함수로 사용할 수 없음

화살표 함수는 생성자 함수로 사용할 수 없습니다. 객체를 생성하는 용도로는 일반 함수클래스를 사용해야 합니다.


요약

  • 화살표 함수는 간결한 문법을 제공하며, this 바인딩 문제를 해결하는 데 유용합니다.
  • 화살표 함수는 **상위 스코프의 this*를 상속받으며,

이를 통해 함수 호출 시 동적으로 this가 바뀌지 않습니다.

  • 화살표 함수는 new 키워드를 사용할 수 없고, arguments 객체를 지원하지 않으므로 필요한 경우 rest 파라미터를 사용해야 합니다.
  • 객체 메서드생성자 함수로는 사용하지 않는 것이 좋으며, 주로 콜백 함수, 간단한 표현식 처리에 자주 활용됩니다.

화살표 함수는 간결한 코드 작성예측 가능한 this 동작을 제공하므로, 적절한 상황에서 활용하면 코드 가독성유지보수성을 크게 향상시킬 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com