기초문법
마. 클래스
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개
게시글 목록
| 번호 | 제목 |
|---|---|
| 16429 |
기타
html 색상표
1
|
| 16424 | |
| 16423 |
node.js
NODE_JS + Nunjucks 설정
|
| 16412 |
PHP
한글 초성 추출하기
10
|
| 16408 | |
| 16407 |
JavaScript
input text 에 여러 이벤트 걸기 두기.
1
|
| 16401 | |
| 16395 |
JavaScript
Javascript를 최적화하는 13가지 팁
4
|
| 16394 |
JavaScript
URL이 올바른지 체크
2
|
| 16391 |
JavaScript
IE, Edge 브라우저에서는 해당 사이트가 접속이 안되게 하는 코드
2
|
| 16390 |
JavaScript
구글 맵 독도 표기 되도록.
|
| 16389 | |
| 16387 | |
| 16386 |
JavaScript
js playground
|
| 16382 |
JavaScript
javascript에서 php를 호출하여 내용 변경하기
|
| 16381 | |
| 16377 | |
| 16374 | |
| 16372 | |
| 16356 |
기타
기시판 질문입니다.
6
|
| 16355 |
정규표현식
정규식 테스트 연습 편하게
2
|
| 16354 |
정규표현식
제목에 특수문자 정리하는 정규식
2
|
| 16353 | |
| 16347 | |
| 16346 | |
| 16339 | |
| 16338 |
jQuery
체크박스 시프트(shift) 멀티선택
|
| 16332 |
node.js
Node.js MongoDB Drop
1
|
| 16331 |
node.js
여러 데이터 삭제
1
|
| 16330 |
node.js
Node.js MongoDB 삭제
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기