드디어 피팅키보드 리팩토링 작업 완료

이상빈·2021년 10월 15일
0

기나긴 작업을 드디어 끝마쳤다.

기존의 키보드뷰에 의존하던 한글 오토마타 총 4종(쿼티, 나랏글, 단모음, 천지인)을 모조리 분해해서 뷰에 의존하지 않도록 수정하였고,
기존의 View에서 모두 처리하였던 비즈니스 로직도 ViewModel로 옮겨서 모듈화를 진행하였다.

또한, 데이터바인딩을 이용하여 키보드 UI 설정값을 xml에 즉각 반영토록 하여 기존의 키보드뷰가 가졌던 어마어마한 양의 소스코드를 1/3 수준으로 축약할 수 있었다.
(기존에는 KeyboardView에서 모든 버튼/이미지를 바인딩하여 코드로 변경시켜줬음)

가장 애먹었던 부분은 라이브데이터를 키보드뷰에서 구현하는 부분이었다.

키보드 서비스를 담당하는 InputMethodService Class는 onCreate(), onResume() 등의 생명주기 함수가 있지만, LifeCycleOwner를 구현하지 않기에, 라이브데이터를 사용하기 위해 LifeCycleOwner를 구현하게 시켜서, 생명주기를 연결해줘야 한다.

다른 개발자 분들은 쉽게 하시겠지만, 처음이라 그런지 간단한 것도 이해하느라 시간이 좀 오래 걸렸다.

그 외에도, 라이브데이터를 이용해서 버튼의 속성을 변경하는데,
이거 바꿨더니 저게 이상해지고, 저걸 바꿨더니 연관 없어 보이는 이 사항도 바뀌고..
같은 문제 때문에 머리가 좀 아팠다.

그래도, 직접 MVC 구조에서 MVP로 리팩토링을 진행한 결과물을 살펴보니, 왜 디자인패턴이 중요한 지 새삼 느낄 수 있었다.

우선 쓸데없이 복잡한 코드의 양이 확 줄었고
가독성이 좋아졌으며
이후 기능을 추가하거나 버그를 잡고 싶을 때, 어디를 건드려야 할 지 훨씬 명확히 보인다.

리팩토링을 진행하기 전 기존의 코드-약 3500줄...여기에 모든 버튼의 기능과 동작, UI 속성까지 전부 처리했다

현재 리팩토링을 진행한 코드-약 1000줄. 각 버튼의 동작과 UI 속성은 전부 viewmodel과 bindingAdapter를 통해 구현하여 코드가 간결해짐

profile
발전을 좋아하는 사람

0개의 댓글