-
Flutter를 처음 배운 상황에서 만들어본 앱이라, 생각처럼 술술 풀리진 않았지만 재밌게 만들었다.
소개
메인 화면
- 앱에 접속할 때마다 리스트에 적힌 명언 중 하나가 랜덤으로 전시된다.
운동하기 탭 (모드 선택 화면)
알람기능 사용 모드 - 타이머를 설정하여, 세트 사이 휴식 중 시간이 되면 알람을 울림
알람기능 사용 X
운동 진행 화면
- 종목을 입력하고, 무게(생략가능)를 입력한다.
- 세트 시작 버튼을 누르고, 실제 운동을 진행한 뒤에 세트 종료를 클릭한다.
- 횟수를 기록하는 텍스트필드가 전시되고, 동시에 그 시점부터 휴식시간이 카운트 된다.
통계 화면
종목별 통계 탭 - 기록된 운동들의 총 실시 횟수가 기록된다.
기록별 통계 탭 - 운동 종료를 통해 기록한 운동들을 확인할 수 있다.
기록별 통계 탭 상세보기 中 간단히 보기
- 운동을 마친 시각을 기준으로 몇 분(며칠, 몇 달)전에 실시한 운동인지 기록된다.
기록별 통계 탭 상세보기 中 자세히 보기
- 우측 하단 FloatingActionButton을 클릭하면 휴식시간까지 함께 기록된 기록을 볼 수 있다.
구현 방식
언어, 라이브러리
Dart언어의 Flutter라이브러리를 사용했다.
Flutter 라이브러리는 android, ios, web 앱을 동시에 하나의 코드 베이스로 개발하도록 돕는다.
내장된 머터리얼 디자인 등을 사용해 쉽게 예쁜 화면을 구성할 수 있었다.유저 데이터 저장
기기 내의 주요 디렉토리 (Documents, 등등)를 쉽게 얻을 수 있게 도와주는 path_provider라는 라이브러리를 사용했다.
앱 실행 후 디렉토리에 접근해 기존 유저 데이터 유무를 확인한 후, 1초 간격으로 데이터를 저장하는 메소드를 호출했다.배운 점
1. 데이터 저장 관련
데이터를 저장할 때, 1초마다 isChanged라는 User클래스의 bool 변수를 비교하여 true가 되면 저장하도록 했다.
개발할 때에는 저장하는 메소드가 실행되지 않은 시점에서 강제 종료 등으로 데이터를 저장하지 못 할 경우를 대비하겠다고 1초마다 저장을 한 것이다.
그런데 지금 와서 드는 생각은, 굳이 1초마다 비교 안하고 User클래스의 필드의 변경을 setter메소드로만 접근할 수 있도록 하고, setter가 실행될 때마다 파일에 저장하면 되겠다는 생각이 들었다.
블로그에 글을 포스팅하는 것을 예로 들어보자.
내가 타이핑하는 모든 것들이 변경시마다 저장되면 부하가 생길 수도 있다고 생각된다.
하지만 내가 만든 앱 같이 유저가 운동시작/세트시작 등의 버튼을 클릭했을 때에만 변경하면 될 경우에는, 굳이 주기적으로 저장할 필요가 없었던 것이다...
설계 없이 바로 개발하다 보니 깊게 생각을 못 했다.클래스 설계는 물론이고, 어떤 데이터를 파일에 저장해야하는지 등 프로젝트 전반적인 내용을 제대로 설계해놓는 것이 정말 중요하다는 것을 배웠다.
2. 주석 달기
주석을 똑바로 안 달았더니, 수정하기가 너무 어려웠다.
주석 달아야 한다는 것을 머리로만 알고 있었는데, 주석은 필수라는 것을 뼈저리게 느꼈다.타인이 봐도 이해될 정도의 주석을 다는 것을 목표로 열심히 달아야겠다.
3. 클래스, 변수, 함수명 신경쓰기
제대로 된 설계 없이 시작했더니, 이름도 당연히 깊게 생각하지 않고 지었다.
푸쉬업 같은 운동 자체를 말하는 클래스 Workout
하루의 운동을 뜻하는 클래스 DailyWorkout
현재 진행중인 운동을 말하는 변수 currentWorkout
등 등..헷갈리지 않도록 명확하게 이름짓는 작업도 중요한 것 같다. (아니면 주석을 잘 달던가)
'개발 > 개인 프로젝트' 카테고리의 다른 글
[기억하다] 일상 루틴 / 학습 기억 보조 앱 (0) 2022.08.24 [node.js/express] 학교 공지사항 크롤링 API 백엔드 서버 (0) 2022.02.09 [Javascript] 카카오톡 클론 코딩 (매우 대충) (0) 2021.05.16 C# 소켓, 스레드를 이용한 채팅 프로그램 (0) 2020.01.07 댓글
- 앱에 접속할 때마다 리스트에 적힌 명언 중 하나가 랜덤으로 전시된다.