| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 정보처리기사
- coalesce
- dom
- 정규식 연산
- dense rank
- execute immediate
- sql 저장 모듈
- 기업 협업
- show graph characteristics
- simple case expression
- ROLLUP
- Oracle
- window 함수
- searched case expression
- MYSQL
- JavaScript
- 위코드
- git
- SQLD
- 코드 스니펫
- python
- 뷰
- 비절차적 데이터 조작어
- 문법 차이
- Node.js
- GROUPING
- 자료구조
- html
- list multiplication
- SQL
- Today
- Total
프로그래밍 숲
우테코 6기 | woowacourse/mission-utils Console 뜯어보기 본문
우테코의 woowacourse/mission-utils의 console.js에는 Console 클래스가 있다. 1주차 과제 때는 그냥 생각없이 썼는데, 이렇게 대충하면 학습의 의미가 없으니 오랜만에 코드를 정리하며 블로그에 글을 써보려고 한다.
우선 코드는 다음과 같다.
import readline from "readline";
class Console {
constructor() {}
static readLineAsync(query) {
return new Promise((resolve, reject) => {
if (arguments.length !== 1) {
reject(new Error("arguments must be 1"));
}
if (typeof query !== "string") {
reject(new Error("query must be string"));
}
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.question(query, (input) => {
rl.close();
resolve(input);
});
});
}
static print(message) {
console.log(message);
}
}
export default Console;
readLineAsync와 Promise
Console 클래스의 readLineAsync 메서드는 query를 인자로 받는다.
이 메서드는 새로운 Promise를 반환한다. Promise는 비동기 작업의 최종 완료(또는 실패)를 나타내며, 이 작업이 완료되면 결과를 반환하거나 오류를 발생시킨다. resolve는 Promise가 성공적으로 실행되었을 때 호출되며, reject는 Promise가 실패했을 때 호출되어 오류를 반환한다.
이 함수에서는 query가 하나의 인자만 받았는지 확인하는 조건이 있는데, 이 때 arguments 를 활용한다. arguments는 함수 내에서 사용할 수 있는 유사 배열 객체로, 함수에 전달된 인자들을 담고 있다. arguments 객체는 배열처럼 인덱스를 사용해 접근할 수 있지만, 실제 배열은 아니라서 Array 프로토타입에 정의된 메서들을 사용할 수는 없다. 따라서 ES6 이후에는 많은 개발자들이 가변적인 수의 인자를 다룰 때 arguments 객체보다 나머지 매개변수 (…rest)를 사용하는 것을 선호한다. 나머지 매개변수는 실제 배열이기 때문에 map, filter, reduce 등의 배열 메서드를 직접 사용할 수 있다.
createInterface()
createInterface()는 Node.js의 readline 모듈에서 제공하는 메서드이다. 이 메서드를 사용하면 사용자의 입력을 처리하고 터미널 또는 콘솔에서 사용자와 상호작용할 수 있는 인터페이스를 생성할 수 있다. 이 중 input과 output 스트림을 설정하는 것이 일반적이다.
스트림(Stream)은 Node.js에서 데이터를 처리하고 전송하는 방식 중 하나이다. 스트림은 데이터를 작은 조각으로 나눠서 처리하며, 이를 통해 메모리를 효율적으로 사용하고 빠르게 데이터를 전송할 수 있다.
스트림은 데이터를 비동기식으로 처리한다. 데이터를 읽거나 쓸 때 전체 데이터가 아닌 조각을 다루기 때문에, 큰 파일이나 데이터를 다룰 때 메모리 효율성이 높다.
- input 옵션은 사용자의 입력을 받아들일 읽기 가능한 스트림(readable stream)을 설정한다.
- 일반적으로 process.stdin을 사용하여 터미널 또는 콘솔에서 사용자의 키 입력을 받아들인다.
- output 옵션은 사용자의 출력을 보내기 위한 쓰기 가능한 스트림(writable stream)을 설정한다.
- 일반적으로 process.stdout을 사용하여 터미널 또는 콘솔에 데이터를 출력한다.
question()
r1.question() 메서드는 Node.js의 readline 모듈에서 제공하는 메서드로, 사용자에게 질문을 하고 사용자의 입력을 받기 위해 사용된다. 이 메서드는 두 개의 매개변수를 받는다.
- 사용자에게 보여질 질문 문자열
- 사용자로부터 입력을 받은 후 호출될 콜백 함수. 이 콜백 함수는 사용자의 입력을 매개변수로 받는다.
rl.close() 메서드를 호출하는 것은 중요하다. 이 메서드를 호출하지 않으면 프로그램이 계속 실행 상태로 남아있게 되어 터미널에서 더 이상 입력을 받지 않는다.
resolve()
resolve(input)는 JavaScript의 Promise 객체와 관련된 함수 호출이다. 이 코드는 비동기적으로 처리되는 데이터나 상황의 최종 결과를 처리하기 위해 사용된다.
Promise 객체는 세 가지 상태 중 하나를 가진다.
- pending: 초기 상태. 연산이 완료되지 않았습니다.
- fulfilled: 연산이 성공적으로 완료되었습니다.
- rejected: 연산이 실패하였습니다.
resolve 함수는 Promise 객체를 fulfilled 상태로 바꾸고, 주어진 값을 Promise의 결과 값으로 설정합니다. resolve 함수가 호출되면, Promise 객체에 연결된 .then() 메서드에 정의된 콜백 함수들이 실행됩니다.
'프로그래밍_인포 > Javascript' 카테고리의 다른 글
| 우테코 6기 | test 코드 (jest) 분석하기 (0) | 2023.10.31 |
|---|---|
| JavaScript | Array.prototype이 뭔가요? (0) | 2023.08.10 |
| Javascript | Number와 parseInt의 차이 (0) | 2023.08.10 |
| 자바스크립트에서 여러 개의 인자를 받는 데코레이터 함수 적용하기 (0) | 2023.06.25 |
| func.call을 활용해 this undefind 해결하기 (0) | 2023.06.24 |