공부/공부(코딩)

자바스크립트에서 NODE.JS까지 요약 노트

Quill 2018. 2. 2. 00:19

노드는 자바스크립트 언어를 사용한다.


  그래서 자바스크립트 언어를 숙지하게 오는 것이 좋다. 자바스크립트는 변수생성시 타입을 정하지 않는다. 다른 언어에는 변수 선언시에 타입을 지정한다. 막상 코딩할 때는 편하지만 눈으로 코딩을 잃을 때는 타입을 확인 하기 힘들어서 가독성이 떨어진다. 그 외에도 다른 주류 언어들과 다른 특징이 있기 때문에 별도의 공부가 필요하다. 


자바스크립트의 객체 생성


- 방법 A (속성 추가 방식)


// "계산기" 클래스 생성

var 계산기 = {};        

// 클래스의 속성 멤버  생성 방법 1

계산기['name'] = '종합전자계산기';

// 클래스의 속성 멤버  생성 방법 2

계산기.color = 'black';

// 클래스에 함수 멤버 생성(익명 함수로 바로 변수에 대입 시키는 방법)

계산기.add = function(a,b){ return a+b; };


- B (생성하며 바로 정하는 방식)


  특징1.  쉼표로 각 멤버가 구분된다. 

  특징2.  클론(":")으로 대입을 진행한다.


var 계산기 = 
{
    name : 종합전자계산기,
    age : 20,
    add : function ( return a+b ) {}
};


배열 


  1. 배열은 대괄호로 만든다. 
  2. 그 안의 자료형은(객체들, 정수들, 문자들 처럼) 일치시키는 것이 좋다.

// 배열에 텍스트 자료형들 추가하기
var 채무자A = [ 영수, 철수, 박수, 김수];

// 배열에 사용자 정의 자료형들 추가하기
var 채무자B = [  {name : '김' , age : 22 } ,  {name : '박' , age : 32 } ]

// 배열에 자료를 추가하는 방법
채무자B.push(  {name : '이', age : 46 } );

// 배열에 기존 자료들과 일치하지 않는 자료형을 넣을 수도 있다. 심지어... 함수

var fn독촉하기 = function (a,b){
부채1 = a ;
부채2 = b ;
부채합 = 부채1+부채2
return 부채합 + "을 갚아라"
};
채무자B.push(fn독촉하기);

// 배열의 자료 개수 알아내는 방법
채무자B.length

// 배열에 인덱스를 통해 접근하기. (결과는 '김')
console.log(채무자B[0].name)

// 콘솔로 배열의 멤버들을 출력한다.
console.dir(채무자B);


  위를 보니 아까 살펴본 클래스 멤버 작성하는 구분이 왜 땡땡과 쉼표로 되어있는지 이해가 간다. 이렇게 되니 보니가 편하다. push를 이용하면 배열에 자료를 추가시킬 수도 있다.

  배열의 자료형을 아무거나 섞어서 쓸 수 있다는 것과 함수를 바로 넣을 수 있다는 것도 흥미롭다. 그리고 이 과정에서 무명함수가 편하다는 사실도 알 수 있었다.


자바스크립트의 for문과 forEach문


#summary


  배열 속 각 멤버에 접근하는 두가지 방법에 대해 알아보기로 한다. 먼저 전통적인 C스타일 포문을 사용 할 수 있고 forEach문을 활용 할 수도 있다. 성능과 가독성 모두 forEach문이 우세하니 익숙해지도록 하자.



var 레드벨벳 = ['웬디', '슬기', '조이', '아이린']; 

for(var i = 0 ; i < 레드벨벳.length ; i++)

    { 

    console.log(레드벨벳[i]);

    }


레드벨벳.forEach(    

    function(item, index){

        console.log(  '배열원소 #' + index + ':' + item )

    }      // <= 여기에 세미 클론이 들어가지 않는다. 왜냐하면 지금 여기는 forEach함수의 인수의 영역이니까. 인수에서는 명령을 내리지 않는 거야!

);


자바스크립트의 함수


  • 함수의 인수를 설정할 때도 타입을 명시하지 않는다.
  • 함수 생성시에는 function이라는 키워드가 붙는다. 이를 이용해서 이름이 없는 함수도 생성이 가능해진다. 익명함수를 변수에 대입할 수 있는 것이다.

var add = function (a,b){};




자바스크립트의 이벤트


// 이벤트는 일반적으로 UI와 긴밀하게 연결되어 있다. 그런데 서버에서 주로 사용하는 노드js에서 이벤트는 그 쓰임이 조금 다르다. 

// 전역 기본 객체에는 우리가 지금까지 수도 없이 사용해온 console같은 것이 있다. 이것 말고도 자주 쓰는 전역 기본 객체가 있는데 바로 process 이다. 항상 우리 곁에 있었던 것이다!
process.on('exit', function(){
    console.log('exit 이벤트가 발생하였습니다');
});


// 위는 1인수 'exit' 이라는 이벤트가 발생했을 때 2인수를인 함수를 자동으로 호출하겠다는 내용이다. 

// 아래도 역시 전역 함수인 setTimeout()이다. 이것으로 실행 내용을 확인해보도록 하겠다.

setTimeout(function() {
    
    console.log("3초후에 실행되었단다.");
    process.exit();
    
}, 3000);

// 위에서 확인 할 수 있듯이 exit 이벤트가 발생하자마자 별다른 명령을 주지도 않았는데 이 .exit 이벤트를 감시하고 있던 process.on('exit', funtion(){}   ); 이 실행된 것을 알 수 있다. 

// 자 그럼 저 이벤트 'exit'말고 우리가 직접 감시당할 이벤트를 만들어보자. 프로세서.온이 감지기였다면 신호 발생기는 프로세서.에밋이다.


process.on(
    'tick', 
    function(넘겨받은인수를함수에바로넣어버리네){
        console.log('tick 이벤트가 발생했다. 함께 넘어온 텍스트 인수는 = ' + 넘겨받은인수를함수에바로넣어버리네
    );}   
);

process.emit(  'tick' , '뭐임')

    
// 참고 : *발생할 이벤트명* 은 기본 명령일 경우에는 자동으로 감지된다. 그러나 사용자가 만든 이벤트일 경우에는 별도로 발생시켜줘야한다. 프로세스.에밋을 통해. 에밋 함수의 첫번째 인수에는 발생시킬 이벤트의 이름이 들어가고 두번째 인수에는 전달할 내용이 들어간다.


// 이제는 프로세스가 아니라 우리가 만든 객체에서도 이벤트를 감시하고 반응하게 해보자. 우선 프로토타입을 만들어보겠다. 아래의 Sing 프로토타입은 hey이라는 말이 나오는지 잘 듣고(on)하고 있다가 무명 함수를 실행 시킨다.

var Sing = function(name, age){
    this.nam = name;
    this.ag = age;
    this.on('hey',
           function(){console.log('yes! sir i will sing alone.');}
           );
};
// 무턱대고 .on 메도드를 적용하기는 했지만 사실 저 함수는 아직 준비가 안되었다. 이벤트이미터를 상속받아야한다.
// 아래 3줄을 통해 이벤트 .on 과 .emit을 가능하게 한다.

var EventEmitter = require('events').EventEmitter;
var util = require('util');
util.inherits(Sing, EventEmitter);
var singer1 = new Sing("류담", 100);
singer1.emit('hey');

// 이런 짓을 왜 하는 것일까. 그냥 어떤 객체에 특정한 일을 시키고 싶으면 시키고 싶을 때 함수를 호출 하면 되지 않나. 이 이벤트 명령은 동시다발적인 행동에 매우 좋다. 다시 말해서 어떤 이벤트가 발생하면 해야 할 일을 동시적으로 각 함수들이 알아서 반응하도록 하는 것이다. 이벤트를 발생시키는 입장에서는 일단 뭘 시킬지는 몰라도 일단 경보만 울리면 되니까 간단해지고, 이벤트를 듣는 입장에서도 유지 보수가 편해지는 장점이 있다. 경보에 대처하는 방법은 각자 알아서 하라고 내버려뒀으니까 말이다.


노드js가 짱인이유


  노드js는 자바스크립트를 파일형태로 실행할 수 있게 만들어주는 것이다. 다시 말해 브라우저에서 html 딱갈이 하던 신분에서 벗어나 더 다양하고 독립적으로 활용할 수 있게 만든 것이다. 노드js를 설치하면 그 다음부터는 윈도우 터미널에서 이 노드js 엔진을 통해 만들어진 소스 파일을 실행 시킬 수 있게 된다.


모듈의 설치(npm의 정체)


    노드js는 그자체에도 내장된 채로 배포된는 모듈이 있지만 그렇지 않은 경우도 있다. 그럴 때 터미널에서 npm 명령어를 쓰게 된다. 자주쓰는 외장 모듈이 있다면 별도로 패키지를 만들어 컴퓨터가 바뀌어도 재설치해서 코딩을 이어갈 수 있게하는 기능도 있다.


다운 모듈


다운 모듈을 활용하는 모습을 통해 개념을 이해해 보자. 

// npm install nconf 를 콘솔창에 입력하여 설치후

var nconf  = require('nconf'); // 실행 OS관련 정보 제공 모듈

    console.log(nconf.env()); // 실행 OS를 확인한다.

    console.log(nconf.get('OS')); // 확인한 내용을 .get 한다.


사용자정의 모듈 사용 방법


/* 주의 할 점 


1. 단 하나의 객체나 함수만 넘겨줄 수 있다


*/


/* 모듈을 만드는 방법에는 두가지 방법이 있다.


// 방법 1. exports.함수이름 = function(){};


특정 문서를 요청하면 그 요청된 문서에서 넘겨줄 함수를 직접적으로 지정해두는 방식이다. 특정  함수만 넘겨줄 때 좋다.


    [예시. 선언]    

    var 인사 = "반갑습니다.";

    exports.plus = function(a,b)

    {

    return a+b + 인사

    };

    

    [예시. 활용]

    var b = require('./b');

    console.log(b.plus(11,2));


// 방법 2. module.exports = 객체;


특정 문서를 요청하면 그 요청된 문서에서 넘겨줄 우함수나 필드가 여러개일 경우 객체로 묶여 한꺼번에 전달 할 수 있도록 넘겨줄 객체를 지정해두는 방식이다. 더 자주 사용하는 방식이다.


    [예시]

    var calc = {};

    calc.mul = function(a,b){return a*b};

    module.exports = calc;


    [활용]

    var b = require('./b');

    console.log(b.mul(11,2));


*/



내장 모듈


  var os = require('os')

  var os = require('path')







반응형