자바스크립트는 ES6 이전과 이후로 나뉜다. ES6이후 JS의 많은 부분이 바뀌었는데 함수 부분도 마찬가지이다. 먼저 이전의 함수는 생성자함수와 일반 함수의 구분이 없었다. 따라서 모든 함수는 일반함수로서 호출할 수 있으며 생성자 함수로서 new 키워드를 사용해 호출할 수 있었다.
이러한 유동성은 성능면에서도 큰 문제를 갖는다. 바로 콜백함수 또는 객체에 바인딩 된 함수 모두 cunstructor를 갖는다는 점이다. 이는 불필요한 프로토타입 객체를 생성하게 되며, 함수의 명확한 구분없이 사용되는 점은 코드의 가독성에도 큰 영향을 미친다.
따라서 ES6 이후 함수의 사용 목적에 따라 세가지 종류로 나누었다.
구분 | constructor | prototype | super | arguments |
일반함수 | O | O | X | O |
메서드 | X | X | O | O |
화살표 함수 | X | X | X | X |
※ 제너레이트 함수와 async함수는 제외하였습니다.
메서드
메서드는 함수의 한 종류이다. 이전에는 "메서드는 함수이다." 라고만 알고있었는데 메서드의 정확한 정의는 "ES6 사양에서 메서드 축약 표현으로 정의된 함수"이다. 이 때 메서드는 객체에 속한 함수이다.
메서드 축약표현이란 function 키워드를 사용하지 않고 함수를 정의하는 것을 말한다. 이렇게 생성된 메서드는 인스턴스를 생성할 수 없으며 프로토타입 또한 존재하지 않는다.
또한, 자신을 바인딩한 객체를 가리키는 내부슬롯 [[HomeObject]]를 갖는다. 따라서 super 키워드를 사용할 수 있다. 이렇게 객체 내부에서 사용되는 메서드는 본연의 기능 (super)를 추가하고 불필요한 기능 (cunstructor)를 제거했다.
화살표 함수
function 키워드 대신 =>를 이용하여 사용하는 함수이다. 기존에는 없었던 문법이지만 ES6 이후 생겼으며 this 바인딩을 갖지 않는다. 따라서 화살표 함수 내에서 this를 사용하면 상위스코프의 this를 참조한다. 이를 lexical this라고 한다.
// 화살표 함수 정의
const add = (a,b) => a + b
Rest 파라미터
rest 파라미터는 함수에 전달된 인수의 목록을 배열로 전달받는다.
이 때 일반 매개변수와 함께 사용할 수 있으며 인수들은 매개변수와 rest 파라미터에 순차적으로 할당된다.
// rest 파라미터
function foo(...rest){
console.log(rest) // [1,2,3,4,5]
}
foo(1,2,3,4,5)
// 매개변수와 함께 사용하는 rest 파라미터
function bar(param,...rest){
console.log(param) // 1
console.log(rest) // [2,3,4,5]
}
bar(1,2,3,4,5)
ES6 이전과 이후의 차이점을 공부하기 위해 작성된 글 입니다.
이번 단원은 함수의 기능에 초점을 맞춘게 아닌 ES6 이후 변경된 점에 초점을 맞추었기 때문에 함수의 기능을 학습하기 위해 보는것은 추천하지 않습니다.
'Front end > JavaScript' 카테고리의 다른 글
[JavaScript] 음악 플레이리스트 프로그래스바 제작 (3) (1) | 2024.11.14 |
---|---|
[JavaScript] 타입별 메서드와 제너레이트 (2) | 2024.11.13 |
[JavaScript] 클로저 (closure)란 무엇일까 (0) | 2024.11.12 |
[JavaScript] 음악 플레이리스트 (2) 사운드 스펙트럼, 에러 극복기 (0) | 2024.11.11 |
[JavaScript] 음악 스펙트럼 플레이어 만들기 (11) | 2024.11.10 |
댓글