키다리 개발자

node.js 터미널 기초, 타이머 함수(setTimeout, setInterval, clearTimeout, clearInterval) 본문

node.js

node.js 터미널 기초, 타이머 함수(setTimeout, setInterval, clearTimeout, clearInterval)

JunBucks 2019. 10. 26. 18:31

타이머 함수는 원하는 시간을 스케쥴링하여 함수를 호출하는 기능을 갖고 있습니다.

 

함수 내에는  호출될 함수 내 코드와 시간을  입력합니다. (1000ms = 1 second)

 

ex) 3초 후에 호출하고 싶으면 3000을  입력하면 됩니다.

 

 

setTimeout(function() { 
// Code here }
, delay);

일정 시간 후에 함수를 단 한번 호출한다.

 

 

 

setInterval(function() { 
// Code here }
, delay);

일정 시간마다 반복하여 함수를 호출합니다.

단, 함수 내 사용 시 함수 내 반복 기준으로도 반복되므로 주의해야 한다.

 

 

 

clearTimeout();

setTimeout함수를 중단 및 삭제한다.

 

 

 

clearInterval();

setInterval 함수를 중단 및 삭제한다.

 

 

 


 

 

node.js = Javascript 개발환경

 

node.package manager

= NPM

= node를 사용하는데 필요한 패키지들을 사용할 수 있게 해 준다.

 

 

 

 

터미널 실행

 

PS C:\Users\키다리\Desktop\abc> npm run start

 

npm run start을 입력하면 터미널이 실행되어 출력된다.

 

 

 

 

밑에부터는 node.js 터미널로 실습한 예제(MudGame)를 일부분씩 설명하겠습니다.

 

 

 

index.js 파일에 class객체 불러오기
1
2
3
const gameloop = require("node-gameloop");
const HeroShape = require("./sources/hero");
const MonsterShape = require("./sources/monster");

require("파일 경로");

 

 

Hero.js 파일
1
2
3
4
5
6
7
8
9
class Hero {
  constructor(hp, damage, shield, potion, name) {
    this.hp = hp;
    this.damage = damage;
    this.shield = shield;
    this.potion = potion;
    this.name = name;
  }
}
 

 

class와 constructor는 한 개씩이다.

 

class Hero는 틀과 같다.

 

constructor는 index.js의 Argument에서 Parameter로 값을 받아 해당 this. 에 사용된다.

 

1
2
3
4
5
6
 attack(target) {
    console.log(
      `${this.name}이 ${target.name}에게 ${this.damage}의 데미지를 입혔습니다.`
    );
    target.beHit(this.damage);
 }

 

또한 class 파일 내 함수를 선언할 때에는 함수명을 바로 써준다.

 

그리고 템플릿 문자열 및 백 틱을 이용하여 this. 또는 파라미터 값을 받았다.

 

 

1
module.exports = Hero;

그리고 맨 마지막 줄에 module.exports 해주어야 다른 js파일에서 받아 올 수 있다.

 

 

 


 

 

터미널 출력 값

재미있게 텍스트로 그림을 그려보았습니다.

 

이런 방식으로 MudGame을 만들어 볼 수 있습니다.

 

 

 

 

index.js 소스코드
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const gameloop = require("node-gameloop");
const HeroWShape = require("./sources/Hero");
const MonsterShape = require("./sources/monster");
const DisplayShape = require("./sources/display");
const Display2Shape = require("./sources/display2");
 
const Hero = new HeroWShape(1005330"Jun");
const Monster = new MonsterShape(10085"Devil");
const Display = new DisplayShape(1005330"Jun");
const Display2 = new Display2Shape(10085"Devil");
 
function enter() {
  console.log("");
}
 
let timeOut = null;
 
let frameCount = 0;
const id = gameloop.setGameLoop(function(delta) {
  console.clear();
 
  Display.attack(Display2);
  Display2.attack(Display);
 
  Hero.attack(Monster);
  enter();
  Monster.attack(Hero);
 
  if (Hero.hp <= 0 || Monster.hp <= 0) {
    clearTimeout(timeout);
  } else if (Display.hp <= 0 || Display2.hp <= 0) {
    clearTimeout(timeout);
  }
}, 1000 / 3);
 
setTimeout(() => {
  Hero.heal();
  Display.heal();
}, 2000);
 
let sum = 1000;
for (let i = 0; i < 4; i++) {
  setTimeout(() => {
    Monster.defence();
    Display2.defence();
  }, sum);
  sum += 2000;
}
 
timeOut = setTimeout(function() {
  console.log("2000ms passed, stopping the game loop");
  gameloop.clearGameLoop(id);
}, 10000000);
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

hero.js 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Hero {
  constructor(hp, damage, shield, potion, name) {
    this.hp = hp;
    this.damage = damage;
    this.shield = shield;
    this.potion = potion;
    this.name = name;
  }
 
  attack(target) {
    console.log(
      `${this.name}이 ${target.name}에게 ${this.damage}의 데미지를 입혔습니다.`
    );
  }
 
  defence() {
    console.log(this.shield);
  }
 
  beHit(damage) {
    this.hp -= damage - this.shield;
    console.log(
      `${this.name}이 데미지 ${damage}를 받고, ${this.potion}만큼 포션을 먹어 체력${this.hp}가 남았다`
    );
  }
 
  heal() {
  }
}
 
module.exports = Hero;
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

 

monster.js 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Monster {
  constructor(hp, damage, shield, name) {
    this.hp = hp;
    this.damage = damage;
    this.shield = shield;
    this.name = name;
  }
 
  attack(target) {
    console.log(
      `${this.name}이 ${target.name}에게 ${this.damage}의 데미지를 입혔습니다!`
    );
  }
 
  defence() {
  }
 
  beHit(damage) {
    this.hp -= damage;
    console.log(`${this.name}이 ${damage}를 받아 체력${this.hp}가 남았습니다.`);
  }
}
 
module.exports = Monster;
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

node.js 터미널 기초, 타이머 함수(setTimeout, setInterval, clearTimeout, clearInterval)

Comments