1. 비구조화 : 예전에는 객체에 데이터를 접근 할때 obj.title 과 같이 했다면, 자바스크립트 최신 문법에서는 그것이 필요가 없다.

// Static Method

const obj = {

title : 'node.js',

value : '올인원 패키지'

}

 

const arr = [0,1,2]

const {title, value} = obj

const [, b, c] = arr

console.log(title,value)

console.log(b,c)

console.log()

 

2. Generator

 

//Node JS비동기 프로그램

//Generator

 

// yield

// return과는 다른 기능을 사용



function *log(){

console.log(0, yield)

console.log(1, yield)

console.log(2, yield)

}

 

const gen = log()

gen.next('1')

gen.next('2')

gen.next('3')

 

const obj = {

    *gen() {

          let cnt =0;

          yield ++cnt;

          yield ++cnt;

          yield ++cnt;

      }

}

 

const g = obj.gen()

console.log(g.next())

console.log(g.next())

console.log(g.next())

 

 

 

3. time out 에 대한 내용 

 

const timeoutObj = setTimeout(() => {

  console.log('first')

},0)



const immediateObj = setImmediate(() => {

  console.log('set')

})

 

const intervalObj = setInterval(() =>{

  console.log('good')

},1000)



메모리 누수를 막기 위해서 아래와 같이 타이머를 멈추어 준다

clearTimeout(timeoutObj)

clearImmediate(immediateObj)

clearInterval(intervalObj)

 

4. Event 내장 함수 사용

 - 어떠한 이벤트가 발생 했을때 사용하는 경우

 

'use strict'

//evnet

const EventEmitter = require('events')

class CharManager extends EventEmitter{}

const chatManager = new CharManager()

 

chatManager.on("join", ()=> {

  console.log("new user joined")

})

 

chatManager.emit("join")

 

 

5. DNS 모듈

내장모듈 

 

const dns = require('dns')

 

dns.lookup('facelotto.site', (err, address, family) => {

if (err) throw err

console.log(`address ${address}, ${family}`)

})



dns.resolve4('facelotto.site', (err, addresses) => {

if (err) throw err

const res = JSON.stringify(addresses)

console.log(res)

 

addresses.forEach(a => {

dns.reverse(a, (err, hostnames) => {

if (err) throw err

console.log(`reverse for ${a}; ${JSON.stringify(hostnames)}`)

})

})

})