뭔가 점점 전날에 계획 했던거 말고 다른 걸 진행하는 듯 하지만, 실제로 코드를 짜면서 하려다보니 조금 오래걸린다는 생각이 든다. 여러가지 공부하면서 진행하는 것도 좋지만, 실전처럼 여러 예외케이스들을 견뎌낼 수 있는 코드를 짜기 위해 우선적으로 가장 간단한 형태의 코드부터 짜려고한다.
하지만 커밋 컨벤션을 지켜야 하기에, 설계를 확실하게 하고 들어가야 하는데 시간 상의 문제로 힘들듯 하여 우선 간단하게 코드를 짜보고, 코드를 짜는 중에 어떤 문제가 있을지를 확인하여 실제로 시작하려고 한다. 그래서 프로젝트를 복제하여 코드를 짜기 시작했다.
@woowacourse/mission-utils
참 대단하다는 생각을 했다. 프리코스를 위해 실제 npm 라이브러리를 배포해놓았다. 이번 주차에는 여기에 있는 Console 모듈만 이용하여 입출력을 진행하면 된다. 하지만 실제로 어떤 입출력 함수인지 모르기에 이게 어떤 역할인지부터 알아보려고 한다.
Console.readLineAsync, Console.print
입력함수에서는 query를 입력으로 받는데, 이 쿼리가 어디에 쓰이는지 알아보기 어렵다. 출력의 경우는 console.log를 그대로 빼다박은 코드인데 이걸 왜 메소드로 만들었는지 의문이긴 하다. 이해하기가 어려워서 우선 실제로 쌩으로 입력받아서 출력하는 코드를 짜고, 실행시켜봤다.
당연히 터미널에서 입력하고, 해당 내용을 바로 출력하는 형식일줄 알았으나 약간은 다르게 입력한다는 사실을 깨달았다. 별 문제가 없어보이는 이 코드는 실제로 실행하면 돌아가지 않는다.
에러 코드를 봤을때 Error: arguments must be 1라고 하는걸 보면 아까 맨처음 query를 안넣어준게 잘못인듯 하다. 그래서 해당 함수의 인자의 역할을 알아볼 필요가 있다.
query의 역할
위 사진에서 보다시피 rl이라는 readline.createInterface로 뽑아내는 객체가 있다. readline은 살펴보니 이미 존재하는 모듈이기에 이거부터 알아보기로 했다.
rl.question은 대충 읽어봤을 때, query 값을 출력으로 설정된 스트림?으로 출력해주는 역할로 보인다. 즉 입력을 받기 전에 출력하는 문자열을 뜻하는 듯하는데, 이 질문을 필수로 설정했기에 문제가 생긴듯하다.
출력 예시에서도 질문이 포함되어 있었기에 이걸 포함해서 다시 실행해보기로 했다.
이번엔 잘 출력이 되고 입력도 받을 수 있지만, 결과가 먼저 출력된다는 걸 볼 수 있다. 이때 App 클래스를 다시 보면 비동기 처리를 했다는 걸 볼 수 있다. 즉 입력을 받을 때는 await을 해주어야 결과 출력에 영향을 주지 않는 듯하다. 그래서 Console.readLineAsync 앞에 await을 붙여주어 아래처럼 해결했다.
기본적인 입력과 출력에 대한 세팅을 했으니 각 파일별로 어떤 코드를 짜야할지 간단하게 주석만 남기고 마무리하기로 했다.
'일기장 > 우아한테크코스 7기' 카테고리의 다른 글
10월 20일: README.md 작성 완료하고 코드 작성하기 (0) | 2024.11.03 |
---|---|
10월 19일: 문제 정의하고 README.md 작성하기 (2) | 2024.11.02 |
10월 17일: 코드의 목표 설정 및 실제 코드 작성하기 (0) | 2024.10.31 |
10월 16일 (2): JS 컨벤션에 조금 더 익숙해져보자 (1) | 2024.10.30 |
10월 16일 (1) : Git을 제대로 알고 이용하자 (1) (1) | 2024.10.30 |