자바스크립트에서 화살표 함수(Arrow Function)는 무엇인가요?
_____A1: 화살표 함수는 ES6(ECMAScript 2015)에서 도입된 간결한 함수 표현식입니다. 일반 함수 선언보다 문법이 짧고, 함수 내 `this` 바인딩 동작이 달라서 주로 콜백 함수나 메서드 내에서 자주 사용됩니다.
---
Q2: 화살표 함수의 기본 문법은 어떻게 되나요?
A2: 기본 문법은 다음과 같습니다.
```javascript
// 매개변수 1개일 때 괄호 생략 가능
const func = param => expression;
// 여러 매개변수일 때는 괄호 필요
const func = (param1, param2) => {
// 여러 구문 작성 가능
return param1 + param2;
};
// 반환문이 하나인 경우 중괄호와 return 키워드 생략 가능
const add = (a, b) => a + b;
```
---
Q3: 화살표 함수의 차이점은 무엇인가요?
A3:
- `this` 바인딩: 화살표 함수는 자신만의 `this`를 가지지 않고, 상위 스코프의 `this`를 그대로 사용합니다.
- `arguments` 객체 미지원: 화살표 함수는 자체 `arguments` 객체가 없으며, 대신 rest 파라미터(...)를 사용해야 합니다.
- constructor 불가: `new` 키워드와 함께 생성자로 사용할 수 없습니다.
- `prototype` 프로퍼티가 없습니다.
---
Q4: 화살표 함수에서 `this`가 어떻게 작동하나요?
A4: 화살표 함수 내부의 `this`는 주변 렉시컬 환경의 `this`를 그대로 가리킵니다. 즉, 함수가 선언된 위치의 `this`를 캡쳐하여, 이벤트 핸들러나 콜백 함수에서 `this` 문제를 해결할 때 유용합니다.
---
Q5: 화살표 함수는 생성자 함수로 사용할 수 있나요?
A5: 아닙니다. 화살표 함수는 `new` 키워드로 호출할 수 없으며, `constructor`로 사용할 수 없습니다. 생성자가 필요하다면 일반 함수나 클래스를 사용해야 합니다.
---
Q6: 화살표 함수가 `arguments` 객체를 지원하지 않는 이유는 무엇인가요?
A6: 화살표 함수는 `arguments` 객체에 대한 독립적인 바인딩이 없고, 주변 함수의 `arguments`를 참조하지도 않습니다. 따라서 함수 매개변수를 동적으로 처리할 때는 rest 파라미터 `(…args)` 문법을 사용하는 것이 권장됩니다.
---
Q7: 언제 화살표 함수를 사용하는 게 좋은가요?
A7:
- 간단한 표현식을 리턴할 때
- 콜백 함수 작성 시
- `this` 바인딩 문제를 회피하고 싶을 때
- 메서드 내부에서 내부 함수가 상위 `this`를 참조해야 할 때
하지만 메서드 자체로 사용할 때 `this`가 필요하면 일반 함수를 권장합니다.
---
Q8: 화살표 함수에서 중괄호 `{}`를 사용할 때와 생략할 때 차이는 무엇인가요?
A8:
- 중괄호를 생략하면 표현식의 결과가 자동으로 반환됩니다.
- 중괄호를 사용하면 여러 문장을 작성할 수 있지만, `return` 키워드를 명시적으로 써야 합니다.
예:
```javascript
const f1 = x => x * 2; // 반환 자동
const f2 = x => { return x * 2; }; // 명시적 반환
```
---
Q9: 화살표 함수를 객체 리터럴과 함께 쓸 때 주의할 점은?
A9: 객체 리터럴을 반환하려면 중괄호를 괄호 `()`로 감싸야 합니다. 그렇지 않으면 함수 몸체로 인식되어 오류가 납니다.
예:
```javascript
const getObj = () => ({ name: 'Alice', age: 25 });
```
---
Q10: 화살표 함수의 단점은 무엇인가요?
A10:
- `this`를 자신만의 컨텍스트로 사용할 수 없음
- `arguments` 객체 없음
- 생성자로 쓸 수 없음
- 메서드 정의용으로 적합하지 않을 수 있음 (특히 클래스 메서드나 프로토타입 메서드)
---
요약하면, 화살표 함수는 함수 작성 시 문법을 간결하게 하고, 상위 스코프의 `this`를 자연스럽게 사용할 수 있도록 도와주는 ES6 기능입니다. 다만, 모든 상황에 적합한 건 아니므로 용도에 맞게 선택해야 합니다.
5)에서 도입된 함수 표현식의 한 형태입니다.
화살표 함수는 기존의 함수 선언 방식과 비교하여 더 간결하고 직관적인 문법을 제공하며, 특히 `this` 키워드의 동작 방식이 다르기 때문에 많은 개발자들에게 선호되고 있습니다.
기본 문법 화살표 함수의 기본 문법은 다음과 같습니다: ```javascript const 함수이름 = (매개변수1, 매개변수2, ...) => { // 함수 본문 return 결과값; }; ``` 매개변수가 하나일 경우 괄호를 생략할 수 있으며, 함수 본문이 하나의 표현식일 경우 중괄호와 `return` 키워드를 생략할 수 있습니다.
예를 들어: ```javascript const 더하기 = (a, b) => a + b; const 제곱 = x => x * x; ``` 특징 1. 간결한 문법 : 화살표 함수는 코드가 더 간결해지며, 특히 짧은 함수의 경우 가독성이 높아집니다.
2. `this` 바인딩 : 화살표 함수는 자신만의 `this` 값을 가지지 않습니다.
대신, 외부 컨텍스트의 `this` 값을 lexically(어휘적으로) 바인딩합니다.
이는 특히 콜백 함수나 메서드에서 `this`를 사용할 때 유용합니다.
```javascript function Person() { this.age = 0; setInterval(() => { this.age++; // 'this'는 Person 객체를 가리킴 console.log(this.age); }, 1000); } const p = new Person(); ``` 위의 예제에서 `setInterval` 안의 화살표 함수는 `Person` 객체의 `this`를 참조하므로, `age` 속성을 올바르게 증가시킵니다.
3. `arguments` 객체 없음 : 화살표 함수는 `arguments` 객체를 가지지 않습니다.
만약 `arguments`가 필요하다면, 일반 함수 표현식을 사용해야 합니다.
대신, 나머지 매개변수(rest parameters)를 사용할 수 있습니다.
```javascript const 함수 = (...args) => { console.log(args); }; ```
4. 생성자 함수로 사용 불가 : 화살표 함수는 생성자 함수로 사용할 수 없습니다.
즉, `new` 키워드와 함께 사용할 수 없으며, `prototype` 속성을 가지지 않습니다.
5. 메서드로 사용 시 주의 : 객체의 메서드로 화살표 함수를 사용할 경우, `this`가 객체를 참조하지 않기 때문에 주의해야 합니다.
```javascript const obj = { value: 42, method: () => { console.log(this.value); // undefined } }; obj.method(); ``` 사용 예시 화살표 함수는 주로 배열의 메서드와 함께 사용됩니다.
예를 들어, `map`, `filter`, `reduce` 등의 메서드에서 간결한 콜백 함수를 작성할 때 유용합니다.
```javascript const 숫자들 = [1, 2, 3, 4, 5]; const 제곱들 = 숫자들.map(num => num * num); console.log(제곱들); // [1, 4, 9, 16, 25] ``` 결론 화살표 함수는 자바스크립트에서 함수 표현식을 작성하는 데 있어 매우 유용한 도구입니다.
간결한 문법과 `this`의 lexically 바인딩 특성 덕분에 많은 개발자들이 선호합니다.
하지만, 화살표 함수의 특성을 잘 이해하고 적절한 상황에서 사용하는 것이 중요합니다.
이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.
작성자:
박재윤 [비회원]
| 작성일자: 1년 전
2024-09-10 08:36:55
조회수: 148 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 148 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.