[ node.js 개발일지 1일 ]
Table of contents
#0 Concept
#1 Develop
#0. Concept
기존의 Java와는 다른 Javascript의 객체지향의 특징, 코드 간결성을 위한 상속과 생성자 개념 및 문법, 변수 영역 관련 Scope, hoisting, 기본vs확장모듈, require
- 대상의 특성은 객체의 속성(Property), 대상의 동작은 객체의 메소드(Method)
- 객체지향 요소
1) 클래스 : 전통적인 객체지향은 클래스라는 틀을 이용해서 객체를 생성하나, 원형적 (Prototypal) 객체 지향 언어는 "객체를 재사용해 이를 하나의 프로토타입으로서 밑바탕에 깔고 객체를 생성
+주로 객체로 생성시, 함수를 대문자로 표기, 일반 함수는 소문자로 표기
2) 캡슐화
3) 집합
4) 상속
function Man() {
this.name = "Anonymous";
this.gender = "Man";
this.Run = function () {
return this.name + " is running!";
}
this.Sleep = function () {
return this.name + " is sleeping!";
} }
function SoccerPlayer () {
this.base = new Man();
this.name = "Anonymous Soccer Player";
this.Run = function () {
return this.base.Run();
}
this.Pass = function () {
return this.name + "is passing to other player!";
} }
SoccerPlayer.prototype = new Man(); //prototype을 밑바탕에 깔고
var player = new SoccerPlayer (); //상속받은 클래스를 생성
console.log(player.name);
// "Anonymous Soccer Player"
console.log(player. gender);
// "Man"
console.log(player.Run());
// "Anonymous is running!"
console.log(player.Pass());
// "Anonymous Soccer Player is passing to other player!"
console.log(player.Sleep());
// "Anonymous Soccer Player is sleeping!" //그대로 복사됨
- 생성자 함수(Constructor Function)
생성자는 객체 생성 시 최초로 호출되는 함수, 객체 생성 시 객체의 속성(Property)으로 constructor가 자동 생성됨. instanceof 연산자는 생성자의 prototype 속성이 객체의 프로토타입 체인 어딘가 존재하는지 판별, instanceof구문을 통해 객체의 constructor 동일 여부 확인 가능
player instanceof SoccerPlayer; //true
player instanceof Object; //true
- 내장형 객체(Built-In Object)
Object, Number, Array, String, Boolean, Function
RegExp : 정규식을 위한 객체입니다.
Math : 수학과 관련된 각종 값과 메소드를 내장한 객체입니다.
Date : 날짜와 시간에 관련된 메소드를 가진 객체입니다.
Error : 자바스크립트에서 발생하는 에러를 처리하기 위한 객체입니다
- Function-level scope vs Block-level scope
Javascript는 Function-level scope(단, 자바스크립트 ES6부터는 const와 let을 이용해 블록 레벨 스코프도 지원)
Scope Chain이란? 함수 내 함수 존재 시, inner function은 outer function의 변수 참조 가능하므로 inner function의 변수 참조 가능 범위(단, outer function은 inner function의 변수 참조 불가)
- 정적 범위(Lexical scope)
선언 시 Scope에 따라 scope chain 지정됨!!ㅡ_ㅡ허허 코드 실행 시, 영역 지정처리~!
var text = 'global';
function foo() {
console.log(text);
}
function bar() {
var text = 'bar';
foo();
}
bar(); // 무엇이 출력될까요?
- REPL : Read Eval Print Loop로 Javascript Console
- 기본모듈 vs 확장모듈
1. 기본모듈 : 파일 입출력, 이벤트 관리, HTTP 프로토콜 관리
2. 확장 모듈 : HTTP 서버 생성, 기본 파일 입출력에서 제공하지 않는 기능 추가 등 노드를 확장하고 더 편리하게 사용하기 위한 모듈 (ex. Express, mongoose, mongolian)
최상위 레벨 식별자 : 모듈 이름만 입력 시, 최상위 레벨 식별자로 인식하고 설치된 전체 확장 모듈이나 기본 모듈 중에서 탐색
require('sample_module');
탐색 결과
/home/goorm/example_project/node_modules/sample_moudle.js
/home/goorm/node_modules/sample_module.js
/home/node_modules/sample_module.js
/node_modules/sample_module.js
- module.exports 할당를 통한 외부참조 허용 require을 이용한 참조 명시
#1. Develop
1. 웹서버를 통한 글자 출력
// hellonode1.js
var server = require('http');
server.createServer(function(req, res){
res.writeHead(200, { 'Content-Type' : 'text/plain' });
res.end("Hello node.js! \n");
}).listen(3000, 'localhost');
console.log('Server is running at http://localhost:3000/');
2. 파일 읽은 후 글자 출력
// main.js
var fs = require("fs");
fs.readFile('./hello.txt', encoding = 'utf-8', function(err, data) {
if (err) {
throw err;
}
console.log(data + " Node.js!");
});
3. 비동기 이벤트를 이용한 글자 출력
https://edykim.com/ko/post/events-eventemitter-translation-in-node.js/
// main.js
var EventEmitter = require("events").EventEmitter;
var evt = new EventEmitter();
evt.on("helloNode", function(str) { //이벤트 등록
console.log("Hello! " + str );
});
setTimeout(function() {
evt.emit("helloNode", "Node.js"); //이벤트 호출
}, 3000);
CLEAR 또전~! 3/11
'ETC > develop' 카테고리의 다른 글
Flutter Application Develop just For me:D#1 (0) | 2023.05.11 |
---|---|
node.js & Express Develop#3 (0) | 2021.03.16 |
node.js & Express Develop#2 (0) | 2021.03.14 |
node.js & Express Develop#0 (0) | 2021.03.11 |