node.js

[node.js] 콜백 함수, 프로토타입

vhxpffltm 2019. 8. 17. 17:05
반응형

Node.js를 하기전에 자바스크립트에서 중요한 콜백함수와 프로토타입 객체에 대해 한 번더 알아보고 가자.

 

콜백함수

함수를 파라미터로 전달하는 경우는 대부분 비동기 프로그래밍 방식이기 때문이다. 예를들어 더하기 함수를 실행하는데 시간이 걸리기 때문에 그다음 코드를 바로 실행한다. 그리고 연산이 끝났을 떄, 파라미터로 전달한 함수가 실행될 수 있다면 그 시점에 결과를 처리할 수 있으므로 효율적인 프로그램을 만들 수 있다. 이 때 파라미터로 전달되는 함수를 콜백 함수라고 한다. 예를 보자.

 

1
2
3
4
5
6
7
8
const add = (a,b,callback) =>{
        var r = a+b;
        callback(r);
    }
    add(10,10,(r)=>{
        console.log('파라미터로 전달된 콜백함수 호출');
        console.log('결과!! %d',r);
    })
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

결과는 확인해보길 바란다. 더하기 연산을 한 결과 값은 파라미터로 전달됭 콜백 함수를 호출하면서 그 콜백 함수로 전달한다. 콜백 함수는 미리 변수에 할당해 두었다 add함수 호출할 때 파라미터로 전달할 수 있지만, add함수를 호출할 때 익명함수로 만들어 파라미터로 전달할 수도 있다. 쉽게 말해 함수안에 함수가 들어있다고 생각하면 이해하기 쉬울 것이다. 이번엔 함수 안에서 값을 반환할 때 새로운 함수를 만들어 반환할 수도 있다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 <script>
    
    function add(a,b,callback){
        var result = a+b;
        callback(result);
 
        var count = 0;
        var history = function(){
            count++;
            return count + ':' + a + '+' + b + '=' + result;
        };
        return history;
    }
    var add_his = add(10,10,function(r){
        console.log('파라미터로 전달된 콜백함수 호출');
        console.log('결과 : %d',r);
    });
    console.log('결과로 받은 함수 실행 결과 : ' + add_his());
    console.log('결과로 받은 함수 실행 결과 : ' + add_his());
    console.log('결과로 받은 함수 실행 결과 : ' + add_his());
</script>
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

위와 같이 add함수를 오출했을 때, 콜백 함수를 오출할 뿐만 아니라 함수 객체를 만들어 반환할 수도 있다.

함수의 실행결과로 함수 객체를 받을 수 있음을 아는것이 중요하다. 여기서 history함수가 실행될 때, add함수안에 만들어진 count변수는 클로저에 의해 예외적으로 변수 접근을 할 수 있다.

 

프로토타입 객체 만들기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    <script>
    function person(name,age) {
        this.name = name;
        this.age =age;
    }
    person.prototype.walk = (speed) => {
        console.log(speed + '<===속도');
    }
    var person1 = new person('하하',20);
    var person2 = new person('히히',22);
 
    console.log(person1.name + '객체의 walk(10)을 호출');
    person1.walk(10);
 
</script>
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

person 함수를 정의하고 new연산자로 호출되는 함수는 객체를 만들기 위한 함수로 분류된다. 이러한 함수를 생성자라고 한다. 객체 안에 name속성을 만들거나 접근하기 위해 this를 사용한다.

 

프로토타입 객체는 함수 객체를 만들 때 함수안에 prototype이나 constructor와 같은 객체들이 자동으로 만들어진다. constructor 객체는 생성자라고도 하며 new 연산자로 인스턴스 객체를 만들 떄 사용할 수 있다. 새로운 인스턴스 객체들을 만들도록 정의한 person객체를 프로토타입 객체라고도 부르며 일반적인 함수와 구분할 수 있어야 한다.

 

person.walk = funtion() {..}

person.prototype.walk = funtion(){...}

 

이 두 코드는 person이라는 틀로 만들어 낸 인스턴스 객체에서 walk함수를 호출할 수 있지만, prototype속성으로 추가하면 인스턴스 객체를 만들 때 메모리를 효율적으로 관리할 수 있다.

 

반응형

'node.js' 카테고리의 다른 글

[node.js] Express_ Router객체  (0) 2019.08.24
[node.js] Express_구조 와 미들웨어  (0) 2019.08.24
[Node.js] NPM 시작하기  (0) 2019.08.21
[Node.js] Node 내장 객체 및 모듈  (0) 2019.08.21
[node.js] ES6 문법  (0) 2019.07.29