일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- simple case expression
- Oracle
- window 함수
- JavaScript
- list multiplication
- SQL
- python
- 비절차적 데이터 조작어
- dense rank
- 위코드
- execute immediate
- sql 저장 모듈
- 정보처리기사
- show graph characteristics
- GROUPING
- 기업 협업
- searched case expression
- 자료구조
- ROLLUP
- 코드 스니펫
- 뷰
- 문법 차이
- 정규식 연산
- dom
- git
- SQLD
- coalesce
- Node.js
- MYSQL
- html
- 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 |