우테코 프리온보딩 4주차 다리 건너기

채림·2022년 11월 22일
0

이번에도 문제 자체가 어렵진 않았는데 요구 조건이 추가되면서 좀 복잡했다.

  1. Node.js의 순환 의존성 문제
    코드를 어느 정도 작성하고 실행했는데 Warning: Accessing non-existent property 'splice' of module exports inside circular dependency라는 경고가 와르르 발생했다.
    해당 경고를 검색해보니 Node.js 14 버전에서 같은 경고가 발생한다는 이슈가 있었다.
    그렇지만 문제의 요구사항이 Node.js 14를 요구하기 때문에 버전을 바꿀 수는 없었다. 에러가 아니라 워닝이니까 일단 무시할까 하다가(무시했으면 is not a function 영원해 해결 못할 뻔..) 조금만 더 찾아보니까 Node.js의 순환 의존성의 문제라고 했다. BridgeGame.jsInputView.js가 서로를 계속 참조해서 무한 호출이 벌어지는 듯 했다. 심지어 내부 함수를 this.func로 호출해서 나온TypeError: this... is not a function도 이 문제가 원인이었다!
    해결을 위해 InputView.js에서는 BridgeGame.js를 호출하지 않게 변경했다. 기존에는 InputView.readMoving()에서 BridgeGame 클래스를 생성하는 코드였는데, App에서 생성한 뒤에 해당 클래스가 필요한 메서드에 인자로 넘겨주는 방식으로 수정했다.

  2. 클래스와 객체
    저번주 과제로 클래스에 어느 정도 익숙해졌다고 생각했는데, 주어진 기본 코드에 클래스와 객체가 섞여있다는 모르고 무작정 시작했다가 어디선 되고 어디선 안돼서 당황했다. 일반 객체에 constructor()를 사용하기도 하고, thisglobal이 아니라 undefined로 떠서 내부 함수가 호출이 안되기도 했다. 이건 thisbind하는 방식으로 수정했어야 하는 것 같은데, 잘 모르겠어서 그냥 재귀호출 했다.(InputView.readMoving에서 InputView.readMoving을 다시 호출하는 방식)
    언제 new를 쓰고 언제는 field인데 언제는 프로퍼티인지, 이런걸 검색해가며 했다.

구현 다 하고 시간이 좀 남아서 메서드 설명을 추가할까 테스트코드를 추가할까 고민하다 JSDoc을 써보려고 설명을 추가했는데 10분 남기고 'BridgeGame 클래스에서 InputView, OutputView 를 사용하지 않는다.' 요구 조건을 봐버렸다ㅜㅜ 그래서 사람들이 자꾸 컨트롤러를 만든거구나... 남은 10분 동안 열심히 리팩토링했지만 결국 못 고치고 냈다. 이거랑 테스크코드 없는게 크리티컬하게 작용했을 것 같아 걱정이다.

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

0개의 댓글