본문 바로가기

내일배움캠프 안드로이드 3기

[TIL] 24.03.11 사이드 프로젝트, 3주차 개인과제

1. 사이드 프로젝트

 주말 동안 기본 로직을 조금 구현해 놨다. Paging3를 적용하기 애매했던 부분이 있어서, 일단 자체적으로 페이징 처리를 해줄 수 있는 클래스를 만들었다. 검색하려고 하는 키워드를 전달받아 이미지와 동영상 api를 각각 검색해서 병합 후 최근 업로드 순으로 정렬해 출력한다.

 

 이 때, View에서 한 번에 뿌려지는 데이터의 수를 n이라고 하면, 이미지와 동영상 api에서 각각 n개를 받아오도록 했다. 이는 이미지와 동영상을 통합해서 검색하는 api를 이용하는 것이 아니기 때문에, 확실하게 시간 순 정렬을 보장하기 위함이다. 사실 조금 더 퍼포먼스를 챙기자면(특히 공간 측면), 이미지와 동영상에서 각각 몇 개씩 소모되었는지 확인해서 소모된 만큼만 api에서 받아와도 무방하지만, api의 응답 형태상 그렇게 하려면 매번 추가적인 연산이 필요했다.

 가령 페이지 당 10개의 데이터를 불러오는 상태에서 4개를 소모했다면, api 상에서는 다음 데이터로 14개짜리 페이지 이후의 4개 데이터를 불러와야 하는 식이다. 그래서 이렇게 얻는 성능상의 이점과 구현상의 불리점을 저울질해서 그냥 매번 api에서 n개씩 각각 받아오기로 했다. 이렇게 한다면 View에 뿌려주고 남은 데이터가 계속해서 증가하게 되겠지만, 애초에 매번 처리하는 데이터의 수가 30개로 작고, api 상에서도 동영상은 15페이지, 이미지는 80페이지까지 받아올 수 있어 감당할 수 없을 정도로 데이터가 누적될 일은 없었다. 어차피 결국에는 쥐고 있는 상태에서 바로바로 뿌려주기만 하는, 오히려 더 빠르게 데이터를 처리하는 구간이 오기도 하고.

 

 이 외에 핵심이라고 할 수 있는 페이징 처리 구현을 위해 클래스 내에서 자체적인 현재 페이지를 프로퍼티로 들고있고, loadNextPage()와 같은 관련 로직도 얼추 구현한 상태이다. 이는 Paging3의 PagingSource처럼 datasource 형태로 쓰이게 될 것 같은데, Singleton 인스턴스로 주입하면 아마 페이징 로직에 문제는 없을 것으로 예상하고 있다.

 

 아마 개인과제가 끝나는대로 마저 진행할 것 같고, DI 적용부터 시작할 것 같다.

 

 

2. 3주차 개인과제

 3주차 개인과제는 키오스크를 콘솔 상에서 구현하는 과제다. 사실 이것도 컴퓨터 공학과 커리큘럼에서 객체지향이나 관련 언어를 다루는 수업 때 한 번쯤 하게 되는 과제이지 않을까 싶다. 나는 아마 1학년 2학기 과목에서 유사한 과제를 했던 거 같은데 파이썬을 익히며 조금 더 모던한 프로그래밍을 배우는 수업으로 기억한다. 그때는 GUI를 비롯해서 요구사항도 꽤 많았고, 또 텀 프로젝트로 제출하는 용도라 상대평가 경쟁력을 위해 나도 신경을 꽤나 썼다. 물론 지금 보면 개판 5분 전 코드이지만, 그 당시에는 나름 공들인 거였다..

 

 여튼 그런 기억을 어렴풋이 떠올리면서 확인한 요구사항은 그렇게 빡빡하진 않았다. 오히려 몇몇 요구사항은 그냥 코틀린에 익숙해지기 위해 조금 억지로 넣은 듯한 것처럼 보였다. 클린한 로직이나 구조, UI/UX랑은 동떨어지게 되는 그런 요구사항들이 있다. UI로 CLI를 제공하는데 5초마다 현재 주문 대기 수를 출력하게 한다든지, 메뉴 목록을 굳이 한 리스트에서 관리하게 한다든지.. 전자는 바람직하지 못한 UX를 제공할 것 같고, 후자는 구현 상 메뉴의 카테고리에 따라 리스트를 따로 관리하는 게 코드가 이쁠 것 같다.

 그래서 머릿 속으로 바로 그려지는 로직과는 조금 차이가 있어서, 신경이 쓰인다. 그래도 최대한 요구사항은 만족시키면서, 영 아니다 싶은 부분은 구현 후 주석 처리한 뒤에 조금 변형해서 적용해 볼 생각이다. 코틀린에 익숙해지기 위한 목적의 과제라고 생각하면 그래도 의도들이 납득은 가긴 한다😂

 

 오늘은 데이터들을 다루기 위한 클래스들을 작성하고, 본 로직을 모놀리식한 형태로 대강 구현해뒀다. 추후에 디테일한 부분들을 잡아나가면 금방 끝낼 수 있을 것 같다.