자바스크립트 실력 향상을 위해 코딩테스트를 씹고 뜯고 맛보며 남기는 글.
슬로우스타터인 나지만 그래도 가만히 있진 않겠다.
단계가 낮으면 어떠한가. 부끄럽고 창피하다고 남들이 푼다고, 나에겐 어려운 문제를 어버버하고 이해 한 척 하며 넘어가는것보단 훨씬 낫다!
모르면 알면 되는거야.
프로그래머스 0단계 자바스크립트 문자열 출력하기
▶ 🗒️문제
문자열 str이 주어질 때, str을 출력하는 코드를 작성해 보세요.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = [line];
}).on('close',function(){
str = input[0];
});
제한 사항
1 ≤ str의 길이 ≤ 1,000,000
str에는 공백이 없으며, 첫째 줄에 한 줄로만 주어집니다.
그래서 나에게 익숙한 자바 문법으로 변환하면서 이해를 시도 해 봤다.
JavaScript
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Java
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
우선 두 언어의 차이점은
이렇다.
두 코드 다 같은 목적으로 사용되는 "불러오기" 구문이지만,
자바는 import 키워드를 사용해 자바 기본 라이브러리에서
스캐너 클래스를 가져온다.
컴파일 시점에 이미 포함되어 있는 라이브러리를 불러옴
자바스크립트는 Node.js에서는 require() 함수를 사용하고,
Node.js의 기본 모듈인 readline을 가져온다.
const readline = 부분은 불러온 모듈을 readline이라는 상수에 저장한다.
마치 우리가 계산기가 필요할 때:
자바: "문구점에서 계산기를 사와주세요" (import)
자바스크립트: "옆방에서 계산기 가져와주세요" (require)
JavaScript
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const rl
인터페이스 객체를 저장할 상수를 선언
자바로 치면 Scanner scanner 부분과 비슷
rl은 일반적으로 'ReadLine'의 약자로 사용됨
readline.createInterface()
readline 모듈의 인터페이스를 생성하는 메소드
자바의 new Scanner() 처럼 새로운 객체를 만드는 역할
process.stdin:
표준 입력(Standard Input)을 의미
키보드로부터의 입력을 받음
자바의 System.in과 같은 역할
process.stdout:
표준 출력(Standard Output)을 의미
콘솔에 출력하는 역할
자바의 System.out과 같은 역할
(자바스크립트는 한번에 입,출력을 모두 명시한다)
(위와 비교)
Java
Scanner scanner = new Scanner(System.in);
(자바는 입력만 작성함. 출력은 따로 필요할때 써주면 된다.)
let input = []; // 입력값을 저장할 배열
rl.on('line', function (line) { // 비동기적으로 한 줄 입력 받기
input = [line];
}).on('close', function() {
str = input[0];
// 여기서 처리
});
실제로 사용할 때는,
// 자바스크립트
rl.on('line', function(line) { // 입력이 들어오면
console.log(line); // 출력하기
});
// 자바
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine(); // 입력 받기
System.out.println(line); // 출력하기
전체적으로 봤을땐 자바스크립트가 더 어렵고 길어보이지만,
둘 다 중요한건
1.입력 받을 준비하기
2.출력할 준비하기
이것에만 집중하고 알면 된다.
밑으로 갈수록 자바스크립트의 코드만 해석했는데,
자바랑 차이점이 많은 것 같다.
주요 차이점을 물어보니
구조적 차이:
Java: 순차적으로 실행됨 (입력 → 처리 → 출력)
JavaScript: 이벤트 기반 (입력이 들어오면 처리하는 방식)
코드 길이:
Java: 더 간단하고 직관적
JavaScript: Node.js의 특성상 더 복잡해 보임
입력 방식:
Java: Scanner 클래스로 간단히 처리
JavaScript: readline 모듈을 통한 이벤트 처리 방식
변수 선언:
Java: 명시적인 타입 선언 (String str)
JavaScript: 동적 타입 (let input)
출력 방식:
Java: System.out.println()
JavaScript: console.log()
이렇게 정리할 수 있을 것 같다.
결국 답은 마지막에
console.log(str)
이 코드 한줄 추가하면 통과였다... ^^...
뭘까 이기분.. 주객전도된 이 기분...
그래도 오늘 하나 알고가니 됐다! 한발짝 걸었다!