우테코 프리온보딩 3주차 후기

채림·2022년 11월 17일
0

3주차 문제는 로또. 2주차였던 야구게임과 거의 비슷한 난이도의 문제인 것 같은데 체감상으로는 함수 짜기가 훨씬 쉬웠다.
전반적인 로직이나 함수 구현은 쉬웠는데 구현에 있어서 크게 애먹은 게 몇 가지 있었다.

  1. 실행이 안되면 현재 위치를 의심하자
    App.jsconst app = new App; app.play();도 잘 집어넣고 터미널에서 node App을 했는데 실행이 안된다.
    Error: Cannot find module 'C:\~경로~\javascript-bridge\App'이라는거다.
    아니 앱을 실행하라는데 앱 자체를 못찾겠다고?! 했는데 한참 헤메고 보니 App.js가 src 폴더에 들어있는데 루트 폴더에서 실행해서 그런거였다...ㅎ
    cd src 해주는거 까먹지 말자.

  2. Class
    지금까지 자바스크립트 코드를 function으로만 짜다 보니 Class 사용이 어려웠다. 옛날에 자바스크립트 입문할 때 분명히 클래스로 입문했고 당시에는 그렇게 헤메지 않았던 것 같은데 이번에 유난히 어려웠음.
    constructorthis에 대해서 대충 훑어보고 했다.
    특히 이번 주차에는 # prefix를 붙여서 private field로 사용하는 방식이 요구 조건이었다. 처음에는 #가 뭔지도 모르겠는데 구글에 특수문자 검색은 잘 안되고 해서 당황했는데 다른 사람들이 한 것 참고해서 private라는 키워드를 뽑아낼 수 있었다.

  3. Console.readLine
    저번 주차에도 힘들었던 Console.readLine때문에 또 애를 먹었다. 처음 자바스크립트 공부 시작할 때에도 readLine이 어려웠던 기억이 있는데 대충 넘겼더니 여기서 역풍이.. 저번 주차에는 다른 사람꺼 참고해서 Promise로 했는데도 안 돼서 결국 포기했는데 이번에는 장장 삼일만에 풀어냈다!
    1) Console.readLine 호출이 종료된 뒤에 다른 함수를 호출했더니 실행이 안됐다. 정확히는 콘솔을 찍어봤더니 Console.readLine보다 먼저 찍혔다. 이번 주차는 아직 PR이 안올라와서 저번 주차 PR을 봤는데 다 함수 종료 전에 다른 함수 호출해서 넘어가는 방식이어서 그렇게 했다. 나중에 슬랙에서 보니 Promise를 리턴해서 그런건데 async-await을 쓰기에는 jest에서 따로 적용해야되는게 있어서 다들 callback함수 내부에서 다음 함수를 호출하는 걸로 갔다는 걸 알았다.
    2) 분명히 처음 구매 금액을 입력 받을 때는 callback 함수까지 잘 실행됐는데 당첨 번호를 입력 받으려고 readLine을 호출했더니 거기서 실행이 멈췄다. 처음에는 1)문제인 줄 알고 readLine 종료하고 호출해보고 인스턴스 닫아보고 아예 play 함수로 나와서 호출해보고 온갖 짓을 다 했는데 테스트 코드에서는 잘 되는데 node로 실행할 때만 안 돼서 노드의 문제라고 생각했다. 근데 계속 안되는 것도 아니고 왜 첫 번째에는 됐는데 두 번째만 안돼??? 저번 주차 PR+저번 주차 회고+구글링+스택오버플로+··· 온갖걸 다 봤는데 다 나랑 똑같이 해놨는어서 더 의문...
    vscode debugger로 디버깅 해보려고 하는데 이건 또 input값 넣는게 안돼서 몇 시간 썼다.. launch.json"console": "integratedTerminal" 넣고도 안돼서 껐다키고 했는데 결국 어떻게 해결됐는지는 모르겠음.
    결국 디버거로 내부 함수까지 한 줄 한 줄 봤다. 첫 번째 호출에는 Console.readLine 내부에 들어가서 if문으로 검증을 거치고 나면 rl.question이 호출되고 입력값을 넣으면 콜백함수로 넘어가는데 두 번째 호출에서는 여기에서 콜백함수를 건너뛰어서 다음 내용이 실행되지 않았다. 여기에서 다시 1)로 돌아가서 내부에서 다음 함수 호출하는거 말고 다른 방법이 있을지 엄청 헤멤...
    결국은 포기하고 테스트코드로 검증해가면서 코드 다 짜고 나서 자잘한 코드 다 지우고 readLine 두개만 남겨놨더니 원인을 찾았다. 두 번째 readLine 콜백함수 내부에서 유효성 검사하는 함수 validate를 호출했는데 그 함수가 Console.close로 인스턴스를 닫은게 문제였음. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그거 한 줄 지우니까 됨....
    3일동안 밤 새가면서 머리 빠져라 그거 하나만 고민했는데 한 줄로 해결되니까 허무하고 어이없었다. 그래 이게 코딩의 본질이지ㅋ 내가 자바로 입문하던 시절을 잊고 있었구만..

나름 자바스크립트 단순 구현에는 자신있다고 생각했었는데 테스트코드 짜는거나 예외처리, indent 줄이고 기능 분리하는걸 신경쓰려고 했더니 좀 의기소침해졌다.. 그래도 저번주는 포기한 Console.readLine 해결했으니 그걸로 됐지 뭐.

profile
나는 말하는 감자... 감자 나부랭이....

0개의 댓글