본문 바로가기
ETC/develop

node.js & Express Develop#1

by asdf12345 2021. 3. 12.

[ 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