항해99 4기 Day 30 TIL

POINT·2021년 11월 30일
0

항해99

목록 보기
13/34

21.11.30 항해99 4기 30일차
어제 주특기 심화 주차 개인 과제 쉬운버전을 마무리하고 오늘은 어려운 버전을 해봤는데 큰 문제없이 구현을 끝냈다.
어려운 과제인데 이렇게 쉬울리없다고 생각해서 문제 출제하신 튜터님께 슬랙 DM을 보냈더니 테스트코드 다 통과했다고 끝이 아니라 특정 입력값을 받기 전까지는 계속 순환해야 한다고 하셨다.
그럼 그렇지...하고 해당 부분을 다시 구현을 해보는데 쉽지 않았다.
계속 프로그램은 도는데, 특정 입력값이 입력되면 멈추게 해야한다. 자바 스레드랑 비슷한 것 같아 머리로는 이해했는데 자바스크립트로는 어떻게 해야할지 모르겠다.

    turn(status) {
        if (this.powerStatus === 'off' && status === 'on') {
            this.powerStatus = 'on';
            this.status = 'idle';

            setTimeout(() => {
                this.status = 'sensingDistance';
                setTimeout(() => {
                    this.status = 'reportingData';
                    setTimeout(() => {
                        this.status = 'idle';
                    }, 1000);
                }, 500);
            }, this.reportingInterval);
        } else if (status === 'off') {
            this.powerStatus = 'off';
        } else throw new Error('Status not changed.');
    }

내가 구현한 개인 과제 sensor 클래스의 turn 메소드인데 코드를 설명하자면
센서에서 on/off 상태를 입력 받는데
case 1) on 일때
센서가 reportingInterval동안 유휴 상태(idle)로 들어간다. reportingInterval의 초기값은 10초로 설정되어 있다.
그리고 0.5초동안 거리측정(sensingDistance)을 수행한 후,
데이터 보고(reportingData)를 한다. 걸리는 시간은 1초이다.
그리고 다시 유휴 상태로 돌아가서 이 과정을 반복한다.
case 2) off 일때
센서가 어떤 동작을 하고 있어도 즉시 꺼진다.

case 1) on 일때를 계속 무한으로 돌려야 하는데 vscode에서만 하기가 쉽지 않다.
단순 반복문 while로도 해보고, setInterval/clearInterval도 해보고, 무한루프중에 입력값을 받아봤는데 전부 실패했다.
gui가 있으면 편할텐데 그러지 못해서 아쉽다. 예를 들어 html에서 구현한다고 하면, on/off버튼 만들고 onclick()시 상태를 변화하면 될텐데 그러면 너무 쉽겠지...

📌 TIL

✍setTimeout()

✍Array.find()

✍구조 분해 할당

22일차에 다뤘었는데 함수의 매개변수도 바로 구조분해할당이 되어서 다시 적었다.

ex) publish({ deviceId, actionId, payload }) {
	...
    }

📒 ...

항해99 5주차 발제때 매니저님이 농담으로 node.js 개인 과제 어려운 버전을 할 수 있으면 당장 취업해도 된다고 하셨는데, 괜히 그러신게 아니구나 싶었다.

일단 개인과제 쉬운버전/어려운버전 둘다 테스트코드는 전부 통과해서 요구사항은 만족했으니 내일부터는 알고리즘 스터디 1주차 문제풀고, node.js 개인공부를 해야겠다. 계속 하나에만 매달리는 건 시간낭비 같다. 공부하다보면 언젠간 풀리겠지.

내일도 파이팅

profile
기록은 기억을 지배한다.

0개의 댓글