본문 바로가기
Programming/Node.js

Node.js에서 Arrow function 사용하는 방법

by 혀코 2020. 1. 3.

안녕하세요. 혀코 입니다.

오늘은 Node.js에서 Arrow function을 사용하는 방법에 대해서 알아보겠습니다.

#1

숫자 하나를 받아서 그 숫자의 제곱을 구하는 일반적인 함수를 구현해 보겠습니다.

const square = function (x) {
    return x * x
}

console.log(square(3))

 

위의 일반 함수를 Arrow function으로 나타내면 다음과 같이 작성할 수 있습니다.

const square = (x) => {
    return x * x
}

console.log(square(3))

 

또한 아래처럼 return 키워드 없이 한줄로 작성할 수 있습니다.

const square = (x) => x * x

console.log(square(3))

위와같이 작성된 코드의 결과는 의도했던 것 처럼 모두 9가 표시가 됩니다.

 

#2

이번에는 object에서 method를 정의할 때 Arrow function을 어떻게 써야 하는지 알아보겠습니다.

app.js를 다음과 같이 작성합니다.

const event = { //event 변수에 object를 지정
    name: 'Birthday Party',  // property
    printGuestList: function () { // method를 정의
        console.log('Guest list for ' + this.name)
    }
}

event.printGuestList()

이렇게 작성한 후에 다음 명령어를 실행하면,

$ node app.js

Guest list for Birthday Party 가 정상적으로 표시되는 것을 확인할 수 있습니다.

이번에는 object의 method를 정의할 때 Arrow function을 사용해보겠습니다.

const event = { //event 변수에 object를 지정
    name: 'Birthday Party',  // property
    printGuestList: () => { // method를 정의
        console.log('Guest list for ' + this.name)
    }
}

event.printGuestList()

이렇게 작성한 후에 다음 명령어를 실행하면,

$ node app.js

Guest list for undefined 로 this.name을 인식하지 못하고 표시되는 것을 확인할 수 있습니다.

object에서 method를 정의할 때는 다음과 같이 Arrow function이 아닌 일반 함수형태로 사용해야 같은 object내의 다른 property의 값을 가져올 수 있습니다.

const event = { //event 변수에 object를 지정
    name: 'Birthday Party',  // property
    printGuestList() { // method를 정의
        console.log('Guest list for ' + this.name)
    }
}

event.printGuestList()

 

이번에는 list 형태를 갖는 다른 property를 추가하고 forEach 를 사용해서 그 list를 표시해 보겠습니다.

const event = { //event 변수에 object를 지정
    name: 'Birthday Party',  // property
    guestList: ['Hyuk','Jina','Michael']
    printGuestList() { // method를 정의
        console.log('Guest list for ' + this.name)
        this.guestList.forEach(function (guest){
            console.log(guest + ' is attending ' + this.name)	
        })
    }
}

event.printGuestList()

아래 명령어를 실행하면,

$ node app.js

아래와 같이 this.name 을 인식하지 못하고 undefined로 표시가 되는 것을 확인할 수 있습니다.

Guest list for Birthday Party
Hyuk is attending undefined
Jina is attending undefined
Michael is attending undefined

그 이유는 this의 scope이 forEach 함수 안에 국한되기 때문입니다.

const event = { //event 변수에 object를 지정
    name: 'Birthday Party',  // property
    guestList: ['Hyuk','Jina','Michael']
    printGuestList() { // method를 정의
        console.log('Guest list for ' + this.name)
        this.guestList.forEach((guest) => {
            console.log(guest + ' is attending ' + this.name)	
        })
    }
}

event.printGuestList()

이것을 바로잡기 위해서 Arrow function으로 사용하면 this의 scope이 printGuestList 함수까지 적용되어 정상적으로 this.name을 인식하는 것을 확인할 수 있습니다.

 

$ node app.js
Guest list for Birthday Party
Hyuk is attending Birthday Party
Jina is attending Birthday Party
Michael is attending Birthday Party

 

#3

이번에는 Tasks objects에서 method를 정의하면서 Arrow function을 사용하는 방법에 대해서 알아보겠습니다.

app.js를 다음과 같이 작성합니다.

const tasks = {
    tasks: [{
        text: 'Grocery shopping',
        completed: true
    },{
        text: 'Clean yard',
        completed: false
    },{
        text: 'Film course',
        completed: false
    }],
    getTaskToDo: function () { // method를 정의할때는 Arrow function을 사용하지 않는다.
        const tasksToDo = this.tasks.filter((task) => {
            return task.completed === false
        })
        return tasksToDo
    }
}

console.log(tasks.getTaskToDo())

위 코드는 아래와 같이 ': function '을 삭제하여 아래와 같이 작성해도 됩니다.

const tasks = {
    tasks: [{
        text: 'Grocery shopping',
        completed: true
    },{
        text: 'Clean yard',
        completed: false
    },{
        text: 'Film course',
        completed: false
    }],
    getTaskToDo() { // method를 정의할때는 Arrow function을 사용하지 않는다.
        const tasksToDo = this.tasks.filter((task) => {
            return task.completed === false
        })
        return tasksToDo
    }
}

console.log(tasks.getTaskToDo())

다음 명령어를 실행하면,

$ node app.js

아래와 같이 의도한대로 완료하지 못한 작업 리스트가 표시됩니다.

[
  { text: 'Clean yard', completed: false },
  { text: 'Film course', completed: false }
]

 

method를 정의하는 것은 Arrow function을 사용하지 못하지만, 그 내부에서는 Arrow function을 사용해도 괜찮습니다.

그래서 위의 코드를 Arrow function을 사용해서 축약해서 아래와 같이 작성 가능합니다.

const tasks = {
    tasks: [{
        text: 'Grocery shopping',
        completed: true
    },{
        text: 'Clean yard',
        completed: false
    },{
        text: 'Film course',
        completed: false
    }],
    getTaskToDo() { // method를 정의할때는 Arrow function을 사용하지 않는다.
        return this.tasks.filter((task) => task.completed === false) // 내부에서는 Arrow function을 사용해도 괜찮다.
    }
}

console.log(tasks.getTaskToDo())

 

 

 

이렇게 Node.js에서 Arrow function을 사용하는 방법에 대해서 알아보았습니다.

유용하셨다면, 공감과 구독 부탁 드립니다.

감사합니다.

댓글