-
Hello world Javascript cli versionCoding-Training 2021. 6. 24. 10:51반응형
Javascript를 포함해서 어떤 언어를 공부하던지 가장 먼저 해볼 수 있는 것이 바로
console.log("hello world")
일 것이다.
나는 hello world를 출력하는 것을 좋아한ㄷ.
어떤 언어를 공부하던 hello world를 출력해보는 것은 그것을 본격적으로 시작한다는 느낌이 들기 때문이다.
하루에 하나씩 공부를 시작하려고 하는 '코딩 트레이닝' 이라는 책에서도 hello world를 출력하는 것이 가장 먼저 나온다.
나름대로 Javascript를 공부하면서 조금씩 알아간다고 생각했는데, 알고보니 Javascript의 일부분도 잘 모르고 있었다는 사실에 최근 꽤 충격을 받으면서 다시 공부를 하고 있다.
일반적으로 Javascript를 익히게 되면 가장 먼저 console.log를 찍어보는 것부터 시작해서 var, let, const를 배우고 연산을 배우고, 화살표함수도 배워보는 등 뭐라도 쳐보면서 배우는 경우가 많은 것 같다.
그런데 돌아보면 이게 왜 그렇게 되는지도 모른채 해왔다.
컴퓨터라는 것은 논리적으로 작동을 하는 것이고, 그에 따라 이렇게 실행이 되는 것에는 다 이유가 있을 터인데....
그래서 코딩트레이닝이라는 책을 통해서 cli에서 돌아가는 interpreter language로서의 Javascript를 공부해보려고 한다.
첫 번째 챕터의 구성은 아래와 같다.
1. 이름을 물어본다
2. 질문에 대한 대답을 하면
3. 그 이름이 필요한 곳에 들어가서 결과로 출력 된다.
일반적으로 내가 아는 Javascript 방식에서는 아래와 같이 짜볼 수 있다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div> <span>What is your name?</span> <span class="name">SOMEONE</span> </div> <div> <span>Hello,</span> <span class="name">SOMEONE</span> <span>Nice to meet you!</span> </div> <script src="./app.js"></script> </body> </html>
const myName = document.querySelectorAll(".name"); const randomName = prompt("Write your name"); for (let i = 0; i < myName.length; i++) { myName[i].innerText = randomName; }
이렇게 하면 prompt의 입력을 받아서 myName의 길이에 따라 각각 답을 넣어서 출력 할 수 있다.
그러나 이는 웹브라우저에서 작동하는 것으로 cli에서 작동하면 작동되지 않는다.
그렇기 때문에 cli에서 작동하는 것을 만들어야 한다.
결과적으로는 아래와 같다.
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); function someone(name) { console.log(`Hello, ${name}, Nice to meet you!`); process.exit(0); } rl.question("What is your name?", someone);
이렇게 작성을 하면 cli에서 작동 하는 것을 볼 수 있다.
Javascript를 꾸준히 배워왔던 사람이라면 이해는 하겠지만, 처음 보는 것들이 있을 것이다.
하나씩 살펴보자면,
1. readline module : 한 줄 씩 readable stream에서 데이터를 읽기 위한 인터페이스를 제공해주는 모듈
2. process : Node.js process에 대한 정보, 컨트롤 기능을 제공하는 global 객체
3. stdin / stdout : standard in / standard out
4. exit(0) : 성공적으로 동작을 끝낸다
4-1. exit(1) : failure code. 실패를 하면서 동작을 끝낸다
5. question : 이름 그대로 질문 출력!
물론 더 좋은 방법이 있겠지만, 우선 내가 할 수 있는 방법부터 하나씩 해나가려고 한다.
반응형