본문 바로가기

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

(68)
24.07.21 최종 프로젝트 마무리 회고 7월 5일을 기점으로 6주가량의 최종 프로젝트를 마무리했다. 6주보다 길게 느껴졌던 것은 그만큼 하루를 밀도 있게 사용하려고 하고, 그리고 스토어에 정식 릴리즈를 올리기 전 최종 수정을 하느라 실제로 2주를 더 썼기 때문인 것 같다. 최종 프로젝트의 종료와 함께 끝나지 않을 것 같던 내일배움캠프도 끝이 났다. 내일배움캠프에 대한 후기는 따로 한 번 글을 남길 생각이고, 이 포스트에서는 중간 발표 이후 최종 프로젝트 진행에 대한 회고만 쓸 생각이다.  비공개 테스트 심사 6월 17일에 중간 발표를 끝마치고, 비공개 테스트 심사를 위한 MVP를 조금 더 손보았다. 꽤 문제가 있어 보였던 UI/UX 몇 부분과 산책 목록 무한 스크롤과 같은 필요한 추가기능을 조금 더 넣었다. 나는 이때, 예외처리가 미흡한 부분..
[TIL] 24.06.21 최종 프로젝트 중간 회고 1. 최종 프로젝트 시작 전  5월 마지막 주를 기점으로 최종 프로젝트 주간에 진입했는데, 그 이후로는 기록을 거의 남기지 못했다. 그도 그럴 것이 배정된 6주를 온전하게 다 쓸 수 있는 것이 아니라, Play 스토어 배포를 위한 비공개 테스트 및 심사에 3주 정도가 소모되기 때문에 3주 만에 MVP(최소 기능 제품) 완성을 요구받았기 때문이다. 이전에 최종 프로젝트 리더를 지원해둔 상태였는데, 위와 같은 스케줄을 뒤늦게 알게 돼서 꽤나 막막했다. 6주를 모두 개발에 사용해야 만족스러운 기능과 견고함이 보장될 것 같았는데, 3주 만에 기본적인 기능을 갖추고 스토어에 심사를 올리고 중간발표도 준비해야 했다. 엎친데 덮친 격으로 5/28~5/31 기간 동안 나는 예비군 훈련이 예정되어 있었다. 그래서 최종 ..
[TIL] 24.05.21 Service Locator 패턴 적용하기 Service Locator 패턴 적용하기  팀 프로젝트 진행 중에, 튜터님께 프로젝트의 아키텍처에 대한 피드백을 듣고 domain 레이어를 추가하기로 했다. 원래는 간단한 구조의 앱이라고 생각하기도 했고, 팀원들에게 최대한 쉬운 구조로 접근하려고 optional한 domain 레이어를 제외하고 presentation-data 2 레이어만 사용하기로 했었다. 하지만 그러다 보니 presentation 레이어가 domain 레이어의 역할을 어느 정도 겸하게 되었는데, 튜터님께서는 다중모듈로 구성하게 되었을 때 이 레이어들이 온전하게 분리가 될 수 없을 것 같다고 하셨다. 그런 의존성 측면 부분에 대한 문제는 인지하고 있었지만, 레이어를 2개만 쓰면 감수해야 하는 부분이라고 생각했다. 하지만 튜터님과 앱 아..
[TIL] 24.05.10 Delegate 패턴 적용해보기 1. Delegate 패턴 적용해보기  튜터님께 들었던 조언 중에, ViewModel 내에서 viewModelScope.launch { runCatching {}.onFailure {} }로 이뤄진 예외처리 보일러 플레이트 코드들을 delegate 패턴을 통해 제거해보라고 하셨다. Delegate 패턴은 어떤 기능을 직접 구현하는 것이 아니라 다른 객체에 위임해서 처리하는 패턴으로, 일종의 Modularization을 가능하게 한다. 코틀린에서 결국 상속을 받을 수 있는 부모 클래스는 단 하나이고, 여러 기능을 상속을 받아 추가하려면 인터페이스를 이용하게 된다. 하지만 이런 상속 패턴은 단점이 존재하는데, 인터페이스 상속을 받는 클래스를 만들 때마다 하나하나 구현해줘야 한다. 설사 그 내부 로직이 같다고..
[TIL] 24.05.09 앱개발 심화주차 개인과제를 하면서 1. 앱개발 심화주차 개인과제를 하면서  오늘 TypeB까지 모두 마무리했다. 이번 개인과제는 혼자 여러 가지 고민들을 해보면서, 튜터님들께 질문을 많이 했는데 한층 더 실력이 성장할 수 있는 기회가 된 것 같다. 그동안 빠듯하게 개인과제와 챌린지반 과제를 진행하느라, 정리하지 못했던 고민들을 정리해두려고 한다.  ❓ 클린 아키텍처에서 데이터를 직선적으로 받아오는 형태가 아니라면, 병합 등에 필요한 각종 로직들은 어디에 존재해야 하는가? - 사실 이 부분에 대해서는, 아직까지도 확실한 결론은 내리지 못했다. 그도 그럴 것이, 튜터님들도 이건 상황과 취향에 따라 달라질 수 있는 부분이라고 하셨고, 나도 동의하고 있다. 아마 본인의 경험치가 가장 잘 나타나는 부분이 이런 부분이 아닐까 생각이 든다. 정답은 ..
[TIL] 24.05.07 앱개발 심화 주차 개인과제 1. 앱개발 심화 주차 개인과제  저번주는 챌린지반 과제 리팩터링 및 본 커리큘럼 개인과제를 작성하느라 대부분의 시간을 보냈고, 오늘까지도 그랬다. 개인과제는 API를 통해 이미지 검색 결과를 받아와 View에 뿌려주고, 로컬 저장공간을 이용해 북마크 할 수 있는 기능을 구현하는 과제였다. 실제로 서비스 되는 앱의 기본에 충실한 과제 유형인데, 사실 이런 유형의 과제는 정말 많이 해봤지만, 할 때 마다 코드가 바뀌는게 눈에 보인다. 어떻게 보면 단순한 로직으로 쉽게 작성할 수도 있겠지만, 공부했던 것들을 모두 적용해서 앱의 구조를 작성하기 위해 고민하다보면 어려운 부분이 많다. 한편으로는, 이전에 비슷한 과제를 할 때 신경쓰지 못했던 부분들을 이제는 공부한 상태로 고민하는 스스로를 보면서 매번 저번보다 ..
[TIL] 24.05.02 알고리즘 1. 알고리즘 문제 해결  변신 이동 게임(백준 15906): 흔한 조건 몇 개 걸린 BFS 문제인 것 처럼 보였다. 결론부터 말하자면 그렇게 풀긴 했지만, 아마 A* 알고리즘을 적용했으면 더 널널하게 통과하지 않았을까싶다.  격자의 최대 크기가 500*500으로 작았기 때문에 BFS로 접근했는데, 일단 당연하게도 방문 정보를 저장할 때는 단순하게 방문여부만 저장해서는 안된다. 일반 모드일 때와 변신 모드일 때로 나누어 저장해야 하고, 이전까지 있었던 방문 비용 최소치를 담아두기로 했다.  처음 작성했던 탐색과정은 이랬다. - 큐의 front를 확인한다.- 상태에 맞게 isVisited와 비교해서 값이 크거나 같다면 continue- isVisited 갱신해 준 뒤에, 목적지에 도달했어도 continue..
[TIL] 24.05.01 알고리즘, 몇 가지 질의응답 1. 알고리즘 문제 해결  카드 팩 구매하기(백준 15823): 푸느라 꽤 애를 먹었다. 각 카드 팩을 구성하는 카드 수가 1~N 장이 될 수 있고, 해당 장 수의 카드팩으로 구성할 수 있는지 확인하는 데에도 O(N)만큼 걸리기 때문에 모든 경우를 탐색하면 시간복잡도가 O(N^2)에 달한다. 이려면 N이 최대 100,000까지 입력될 수 있으므로, 제한시간을 아득하게 넘을 것이다.  일단 주어진 카드 배열에 대해 x장짜리 카드팩 m개가 성립가능한지 확인하는 것은, 투 포인터나 슬라이딩 윈도우 방식으로 구해내면 O(n)에 해당하고 이보다 더 줄일 수는 없을 것 같았다. 그렇다면 저 x의 범위를 줄여야 하는데, 처음에는 DP로 접근했지만 마땅한 점화식이 떠오르지 않았다. 하지만 계속 DP로 접근하려고 시도하..