어제 고민하던 클래스 설계 부분을 팀장님과 상의했다. (이렇게 쓰니까 무슨 회사 얘기같네 ㅋㅋ..) 팀장님도 정확히 같은 지점을 고민하고 있었다. 자식 클래스로 나누긴 했는데, 정작 부모와 다른 점이 없어서 자식클래스는 비어있다는 것이었다. 결국 함께 튜터님을 찾아가봤는데, 그렇게 구현해도 된다고 하셨다. 다만 메뉴별로 토핑 등 다른 기능이 들어간다면 자식클래스가 필요해질 것이라고 하셨다. 결국 일단 과제에서는 자식클래스로 나눌 필요가 없으니 이 부분은 넘어가고 다음 레벨들을 구현해나가기로 가닥을 잡았다.
오늘은 이 키오스크 과제 삼매경이었다.
무난하게 구현해나가나 싶었는데, 레벨5에 난관이 있었다. "5초마다 현재 주문 대기수를 실시간으로 출력" 기능이 그것이었다. 이를 구현하려면 코루틴을 사용해야 했다. 그래서 코루틴을 적용하려고 열심히 찾아봤는데, 문제가 있었다.
안드로이드에서 no activity로 프로젝트를 생성하더라도 기본적으로 생성되는 여러 파일들과, 그래들 빌드가 상당히 오래걸려서 나는 안드로이드 프로젝트로 안하고, 그냥 빈폴더를 안스로 열어서 소스코드 파일만 생성해서 작업하고 있었다. 그 상태에서 코루틴을 적용하려고 하니, 코루틴은 안드로이드를 기반으로 작동하는 것이었다.
물론 쓰레드로 하려면 할 수도 있겠지만, 안드로이드 과정이니만큼 코루틴을 적용해야 옳았다. 특히 팀과제라서, 나중에 합치려면 더더욱이 그렇다. 결국 하던 폴더 이름을 바꾸고 기존 이름으로 안드로이드 프로젝트를 생성해서 만들던 소스코드를 올려줬다. 이 과정에서 패키지명이 기존 kioskcli에서 com.example.kioskcli 로 바꿔줘야 하는 것을 몰라서 헤멨지만 잘 해결했다.
또 난관으로, 은행 점검시간에 결제가 안되도록 하는 것이었다. 코틀린으로 시간을 비교해야 했는데, 아무리 찾아도 날짜 비교하는 것만 잔뜩 나오고, 특정 시간을 시간타입으로 바꿔서 LocalTime으로 바꾸는 방법이 없었다. 비슷한 것으로 날짜를 포함 시간을 바꾸는 것만 있었다. (여기에서 parse라는 메서드명은 찾았다.)
안스 자동완성을 열심히 뒤져서
을 알았다.
그리고 이를 적용하면서 Kiosk 클래스에 작성하다가, 아무래도 시간 관련 기능을 키오스크에 넣기엔 영 성격이 맞지 않아서 따로 시간에 대한 처리를 하는 오브젝트 클래스를 만들었다.
그런데 여기에서 신기한 점은, 키오스크 클래스 파일에서 LocalTime을 임포트하지 않는데, 그러면 LocalTime 아래 메서드는 사용할 수 없지만 변수로 저장하고 비교하는 것까지는 문제가 없다는 점이다.
그리고 시간 비교를 t1 <= t && t <= t2 로 했는데, 친절한 안스씨가 t in t1..t2 로 바꿔야 한다고 알려주었다. LocalTime에 대해서도 in .. 이 먹힐줄은 몰랐다... 대단한 IDE다.
엄청 많이하셨네요! 고생하셨어요~