본문 바로가기

앱 제작 App

앱 제작 (2) 다이어트 자극 피그미

안녕하세요 Loner 입니다. 

아주 먼 옛날에 만들었던 개인앱이 하나 있었는데

(api 23~26사이에서 잘 돌아갔던걸로 기억합니다)

올해 초에 자료를 정리하다가 우연히 발견해 구글에 올렸던 어플입니다.

개발을 시작하고 나서 미친듯이 불어나는 살을 잡기 위해 나 스스로 자극 받으려고

만들었던 심플한 앱 입니다. 

https://play.google.com/store/apps/details?id=kr.loner.pigme 

 

피그미 -다이어트 셀프 자극, 운동 다짐, 식욕 억제 - Google Play 앱

다이어트 의욕이된다는 구요? 이 앱을 통해 항상 자극을 주어 초심을 얻지 못합니다.

play.google.com

위 링크에서 다운 받으실 수 있습니다. 

 

1. 앱 기능 설명

1) 다이어트 자극 글귀 및 사진 보기

->앱을 실행시 바로 직관적인 자극 글귀와 사진 목록들이 나옵니다.

스와이프 형식으로 목록들을 살펴 볼 수가 있습니다.

언제든지 앱을 볼때마다 식욕 조절 자극을 받기 위해 다양한 내용들을 설정해놨습니다.

 

 

 

앱을 들어갈 때 마다 비슷한 문구가 안나오도록 리스트를 모두 셔플 형식으로 뿌려줍니다.

그리고 사용자가 직접 앱을 실행해야만 자극 글귀를 보는것이

아니라 전원을 on off 할때 마다 자동적으로 어플이 실행되도록 설정을 해놨습니다.

 

우측 하단 버튼으로 설정 가능

앱 시작시 다이얼로그로 유저들의 동의를 구하거나, 우측 하단 버튼에 있는 작은 창을 통해

자동 실행을 사용할지 선택 할 수 있습니다. 

허용시 지원하는 sdk만 잘 맞다면 전원 킬 때마다 앱이 켜지는걸 확인할 수 있습니다. 

 

2) 자극 글귀 만들기 기능

좌측 하단의 + 버튼을 누르면 나만의 글귀를 만들 수 있습니다.

버튼을 누르면 글귀 작성 화면으로 이동합니다.

글귀를 먼저 지정할 수 있습니다. 기본색으로 파란색을 지정 했습니다.

다음 화면에서 사진을 추가 할 수 있습니다. 갤러리 접근은 당연히 권한 요청을 묻습니다.

선택한 사진이 배경으로 채워집니다. 위 모습이 새롭게 추가될 글귀 모습입니다.

선택 완료를 누르면 3가지 항목이 나타납니다.

1. 모든 리스트 삭제 후 내가 만든것만 리스트에 추가하기

2. 기존 리스트에서 내가 만든 글귀를 추가하기 

3. 리스트에서 삭제할 아이템을 골라서 삭제하고 내 아이템을 삽입하기

 

위 3가지 사항은 제가 임의로 나눈것 같으나.. 개인앱이라서 당시에 제 주관적인 생각이 들어갔던 것 같습니다.

위 사진은 3번을 눌렀을 때 나오는 다이얼로그 입니다.

삭제할 아이템을 골라 선택한 후 휴지통 버튼을 누르면

메인화면에 나오던 다이어트 자극 글귀 목록에서 제외 됩니다.

 

내가 만든 자극 글귀 및 사진을 메인 화면 리스트에 추가한 모습입니다. 

 

3) 자극 글귀 목록 삽입 삭제 

우측 하단에 버튼을 누르면 위 처럼 작은창이 뜹니다.

전체 리스트를 누르면 모든 자극 글귀들을 쉽게 볼 수 있습니다.

 

한눈에 여러가지 사진 글귀들을 볼 수 있는데

우측 버튼들로 리스트의 아이템을 삭제하거나 추가하거나 등등 컨트롤이 가능합니다.

위 영상을 보면 3가지 기능을 보실 수 있습니다.

1. 전체 글귀 삭제 

2. 글귀를 골라서 삭제 

3. 선택한 글귀로 이동하기 

 

 

2. 앱 제작 과정

앱 제작 Process 는 개인으로 제작하였기 때문에 프리하게 제작이되었습니다.

앱 기획 -> 뼈대 기능 구성 -> 디자인 -> 앱에서 자동 지원되는 글귀 및 사진 Resource 모아서 적용

 

아키텍쳐 같은 경우..

아주 먼 옛날에 만든 앱이라서 기억을 더듬어보니까, ViewModel 개념을 혼합한 아키텍쳐로 만들었습니다.

언제까지나 개인앱이기 때문에  MVC, MVP ,MVVM,MVI, Clean Architecture 와 같이 유명 아키텍쳐 패턴을 기용했다긴보다 여러가지 방면을 혼합해서 사용한듯 싶습니다.

 

기본적으로 Model의 데이터 기준으로 ViewModel의 observer 통해서 UI를 뿌려주었습니다.

 

그리고 독특한 점은 내가 당시 실험작으로 만든앱이라는게 확 눈에 띄었습니다.

요즘 Single Activity로 앱을 만들 때 Jackpack Navigation를 필수로 사용하는 추세 이지만 

이 앱은 fragmentManager로 싱글 액티비티를 구현하려 했다는 점 입니다.

(심플하게 만들었기 때문에 액티비티 2개, 프레그먼트 5개)

위와 같이 함수 하나 만들어서 프레그먼트 매니저를 사용했었습니다.

 

 

3. 아쉬운 점 

그리고 지금 보니까 매우 좋지 않는 코드를 발견했는데..  SharedPreference를 엄청 많이 사용했다는 점 입니다.

SharedPreference는 단편 적인 데이터를 저장하기용으로 많이 쓰이는데 이 앱에서는 대부분의 너무 많은 상태를 SharedPreference를 사용해서 저장하고 참고용으로 사용하고 있었습니다.

 

class가 5개로 나뉠 정도다..

 

예를 들어 liveData Observe 에서 SharedPreference의 상태값 기준으로 분기처리도 해주고 있었습니다. 

(SingleActivity이니 충분히 Bundle를 넘겨서 상태값 체크로 해서 분기처리 해도 될것을..)

그렇기 때문에 매우 가독성이 떨어져보입니다.

 

그외에 

- 여러 기종 호환성을 확인을 못함 (지인 제보를 들어보니 최신폰에서 UI가 깨지는 현상이 발견되었다함)

- 실험작으로 fragmentManager로 SingleActivity로 구현했기 때문에 관리가 까다로워짐

등등 부족한 점을 보였습니다.

 

4. 정리

- Fragment Manager로 SingleActivity를 구현한 실험작 (반드시 navigation만 쓰고 싶어지는 다짐이 생김)

- 옛 기종으로 테스트했기 때문에 요즘 기기에서 불안전한 모습을 보임 

- SharedPreference를 너무 많이 사용함 

- 안정적으로 Model 기준으로 옵저빙 해서 UI를 뿌려주는 구조로 만들어져 있었음 (의외)

- XML를 확인해보니 뷰의 계층구조의 depth 가 깊음 (프레임 레이아웃 과다사용) 

 

옛날의 내가 어땟는지 뒤돌아봤던 시간(?)이었습니다. 알고보니 데이터 바인딩도 섞여있었지만 그렇게 큰 활용은 안한 것 같습니다. 코드는 언제나 더러운 코드로 부터 시작해서 어떻게 해야 훌륭한 소프트웨어일까 라는 고민으로 점점 발전을 해가는거 같습니다. 과거를 되짚어보며,, 한번 정리를 해봤네요~