테스트 사이트 - 개발 중인 베타 버전입니다

nodejs 기초문법 - 클래스

· 6년 전 · 3742 · 3

기초문법 

 

마. 클래스

javascript 는 프로토타입기반의 함수형 언어이기 때문에 특별하게 객체지향을 위한 class는 없습니다. 
하지만 함수형 언어들의 특징은 함수자체를 하나의 객체로 취급하기 때문에 단일함수 또는 파일 자체를 하나의 class처럼 사용할 수 있습니다.
그럼 먼저 javascript 에서 함수를 사용해 객체화하는 방법을 알아보겠습니다. test_class.js 파일을 하나 만들고 아래 코드를 입력합니다.

test_class.js
//class의 선언 - 낙타표기법으로 첫번째 글자를 대문자로 함수를 하나 선언한다.

function Clazz(msg){
    // 변수를 객체의 멤버로 사용하기 위해 this 예약어를 사용해서 정의한다.
    this.name = 'I am Class';
    this.message = msg;

    // this를 사용하지 않은 변수
    message2 = "find me!";
    // 멤버함수 선언
    this.print = function(){
        console.log(message2);
    };
}

// 객체를 생성
var myClazz = new Clazz('good to see u!');
console.log(myClazz.message);
// this를 사용하지 않은 message2 변수는 외부에서 참조할 수 없다.
console.log(myClazz.message2);
// this로 선언된 함수를 통해 사용할 수 있다.

myClazz.print();
node test_class 명령어로 위의 코드를 실행하면 함수 내부에 this 로 정의되지 않은 변수는 undefined 로 찾을 수 없다고 나타납니다.


이렇게 함수를 new 연산자를 이용해 초기화함으로써 마치 객체처럼 사용할 수 있게 됩니다.
이제 위의 코드에 prototype 예약어를 이용해서 Clazz 외부에서 함수를 추가해 보겠습니다.

classPrototype.js 파일을 하나 만들고 아래 코드를 입력합니다. 
this 로 선언되지 않은 변수는 prototy[e으로 추가한 함수에서는 참조할 수 없는것을 확인할 수 있습니다.

test_prototype.js
function Clazz(msg){
    this.name = 'I am Class';
    this.message = msg;

    message2 = "find me!";
}
//Clazz 객체의 prototype 을 가져와서 message값을 리턴하는 함수를 하나 추가한다.
Clazz.prototype.getMessage = function(){
    return this.message;
}

Clazz.prototype.getMessage2 = function(){
    return this.message2;
}

// 객체를 생성
var myClazz = new Clazz('good to see u!');
console.log(myClazz.getMessage());
// 내부에 선언된 함수와는 다르게 prototype으로 선언한 함수는 값을 사용할 수 없다.
console.log(myClazz.getMessage2());
이제 node.js 에서 객체를 사용하는 방법을 알아보겠습니다.
node.js에서는 require 를 사용해서 파일 전체를 객체로 불러올 수 있습니다. 
파일 내부의 멤버들은 exports로 정의할 수도 있고, 
javascript에서처럼 this나 prototype으로 선언하고 module.exports 명령어로 한번에 처리할 수도 있습니다. 
먼저 NodeClass.js 파일을 하나 만들고 아래와 같이 입력합니다.

NodeClass.js
function Clazz(){
    this.name = 'Hello there!';
    this.message;
}

// message 변수에 값을 입력하는 함수
Clazz.prototype.setMessage = function(msg){
    this.message = msg;
}
// message 변수의 값을 가져오는 함수
Clazz.prototype.getMessage = function(){
    return this.message;
}

// exports 명령어를 사용함으로써 다른파일에서 require 예약어를 이용해 Clazz 객체를 사용할 수 있게된다.
// exports 명령어의 위치는 파일의 어떤곳에 위치해도 동일하게 동작한다.
module.exports = Clazz;
이제 NodeClass 파일을 호출해서 사용할 use_class.js 파일을 생성하고 아래와 같이 입력합니다.
use_class.js
// NodeClass 를 선언한다. 여기서 NodeClass 는 변수명이 아니라 class명 이므로 첫글자를 대문자로 한다.
var NodeClass = require('./NodeClass');

// new 연산자를 사용해서 NodeClass 클래스를 nodeClass 변수로 초기화한다.
var nodeClass = new NodeClass();

// setMessage 함수로 값을 입력한다.
nodeClass.setMessage('Good to See u!');

// 입력된 값을 출력한다.
console.log(nodeClass.getMessage());
node use_class 명령어로 실행하면 아래와 같이 입력한 메시지가 출력되는 것을 확인할 수 있습니다.
 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 3개

6년 전
감사합니다 ㅠㅠ
고맙습니다.
감사합니다

게시글 목록

번호 제목
16329
16328
16327
16326
16325
16324
16323
16322
16321
16320
16319
16318
16317
16316
16315
16310
16309
16308
16305
16304
16303
16302
16301
16300
16299
16298
16297
16295
16294
16293