도입 배경


기존에는 하나의 사물함에 한 명의 유저가 대여를 할 수 있었기 때문에 단순하게 사용 가능 , 대여중 두 가지 상태만 존재했다. 하지만 일부 사물함이 공유 사물함 으로 이용됨에 따라 하나의 사물함을 여러 유저가 대여를 하는 경우가 발생한다.

공유 사물함은 풀방이 되기전까지는 만료시간이 없는 상태로 사용할 수 있다가, 풀방이 되면 만료시간이 설정된다. 한 번 만료시간이 설정되고 난 후에는 모든 유저가 반납을 하기 전까지는 만료시간이 유지가 된다. ex) 풀방이 되어 만료시간이 설정되고 난 후, 누군가 반납을 하여 자리가 생긴 곳에 또다른 유저가 대여를 하면, 해당 사물함을 이용중인 유저의 만료시간으로 새 유저의 만료시간이 설정된다.

이렇듯 기존과 비교했을 때 공유 사물함은 대여/반납 과정에서 발생할 수 있는 조건과 경우의 수가 많아져 이를 단순히 조건에 따라 예외처리를 하고 나니 코드가 굉장히 지저분해졌다… 때문에 코드를 작성한 본인도 알아보기 힘들고 추후 수정사항이 생긴다면 로직 자체를 뜯어고쳐야하는 문제도 발생할 위험이 있다.

사물함의 상태로 관리


이런 문제를 개선하기 위해 DFA(Deterministic Finite Automata) 를 활용하여 대여/반납 과정에서 발생할 수 있는 상황에 따라 사물함의 상태를 정의하였다. 사물함의 상태는, 현재 사물함에 상태와 발생한 동작(대여 or 반납)에 따라 다음 상태로 전이된다.

아래는 상태 전이도와 사물함의 상태에 대한 상세 설명이다.

KakaoTalk_Photo_2022-11-12-15-50-43.jpeg

사물함 상태 종류