자바스크립트에서 화살표 함수를 처음 보면 저게 무엇인가 하고 혼동스러운 시간이 있습니다. 그런데 기호라는 것이 그렇듯이 시간이 지나고 익숙해 지면 가독성이 더 좋아지는 효과가 있습니다. 그러기 까지 어느 정도 시간이 걸리겠지만 숙련자가 되기 위한 과정입니다.

 

HTML 페이지를 하나 만들어 놓고 DOM으로 자바스크립트 화살표 함수에 대해 알아보겠습니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="./arrowfunction.js" defer></script>
    <title>Document</title>
</head>
<body>

    <h1>arrow function ex</h1>
    <div id="container">
    </div>
</body>
</html>

 

기본함수에서 화살표함수, 그리고 축약형 문법은 아래와 같습니다. 첫번째는 function 키워드를 사용했으니 알아보기 쉽습니다. 두번째는 function 키워드가 없어지고 => 가 뒤에 붙는 것으로 바뀌었습니다. () 괄호안은 매개변수입니다. 마지막 축약형은 return 문을 => 화살표 함수표시의 뒤에 둠으로써 완성됩니다. let sumArrow1 처럼 변수에 함수를 저장한다는 개념은 다른 언어에도 있는데요. 정확히는 함수 코드가 시작되는 주소를 저장하는 겁니다.

 

// 기본 함수
function sum(a, b) {
    return a + b;
}
// 화살표 함수

let sumArrow1 = (a, b) => {
    return a + b;
}

// 축약형
let sumArrow2 = (a, b) => a + b;

 

DOM 객체를 사용해서 페이지에 표시해봅니다. innerText에 넣는데 어떻게 함수를 호출하는지 보면, 평범하게 호출합니다. 화살표 함수는 변수의 이름이 곧 함수의 이름이 되는 거지요.

 

const dc = document;
const myContainer = dc.getElementById('container');
const p1 = dc.createElement('p');

p1.innerText = 'Basic Function: ' + sum(3, 4);

myContainer.appendChild(p1);


const p2 = dc.createElement('p');
p2.innerText = 'Arrow Function-A: ' + sumArrow1(3, 4);

myContainer.appendChild(p2);

const p3 = dc.createElement('p');
p3.innerText = 'Arrow Function-B: ' + sumArrow2(3, 4);

myContainer.appendChild(p3);

 

매개변수가 하나인 경우 더 간소한 표현이 가능합니다.

 

function square (x) {
    return x*x;
}

let squareA = x => x * x;

 

마찬가지로 함수를 호출하는 건 별다를게 없습니다.

 

const p4 = dc.createElement('p');
p4.innerText = 'square : ' + square(5);

myContainer.appendChild(p4);


const p5 = dc.createElement('p');
p5.innerText = 'square : ' + squareA(5);

myContainer.appendChild(p5);

 

매개변수가 없는 경우입니다.

 

function randomNumber() {
    return Math.random();
}

let randomNum = () => {
    return Math.random();
}

 

const p6 = dc.createElement('p');
p6.innerText = 'random : ' + randomNumber();

myContainer.appendChild(p6);

const p7 = dc.createElement('p');
p7.innerText = 'random : ' + randomNum();

myContainer.appendChild(p7);

 

자바스크립트 화살표함수

 

 

이벤트 리스너에 넣은 익명함수, 버튼 클릭에 많이 사용하지요.

 

dc.addEventListener('click', () => console.log('clicked! ArrowFunction'));

 

마지막으로 인스턴스 함수로 사용하는 화살표 함수입니다. 아래 클래스에서 setTimeout의 인수로 사용된 함수 중에 function 이라고 쓴 익명함수는 글로벌 속성입니다. 화살표 함수는 인스턴스의 함수입니다.

 

class MyClass {
    constructor(name) {
        this.name = name;
    }

    // 글로벌 함수로 사용

    printName(){
        setTimeout(function() {
            console.log('function: ' + this.name);
        }, 300);
    }


    // 인스턴스 함수로 사용
    printNameArrowFunction(){
        setTimeout(() => {
            console.log('function: ' + this.name);
        }, 500);
    }
}

let myc = new MyClass('Neokay');
myc.printName();
myc.printNameArrowFunction();

 

콘솔창에서 실행해보면 아래와 같이 글로벌 함수는 인스턴스의 속성에 접근이 불가능합니다. 화살표 함수를 사용하면 인스턴스의 속성에 접근할 수 있습니다. (this.name)

 

공유하기

facebook twitter kakaoTalk kakaostory naver band