토이 프로젝트: 오디오 변환 앱 - 천리길도 파일 저장부터

황수영·2024년 5월 4일
0
post-thumbnail

실제 구현에 들어가 보자. 천리길도 파일 저장부터!

0. 초기 세팅: github 브랜치 나누기

매번 커맨드 라인에서 git init을 날렸는데, Android Studio 우측 상단 더보기에서 commit 켜서 새 git repository를 만들 수 있더라.

바로 상단 git 메뉴가 생기진 않아서 (오래된 버그?) Android Studio를 재실행해 Git > Github > Share Project On Github 해 주고, develop 및 feature/youtube2mp3 브랜치를 파 주었다. (무난한 mp3 확장자부터 시작해 보려고 한다.)

브랜치가 잘 나누어졌다. 이후로도 필요한 기능에 따라 브랜치 추가를 하고, 기능이 완성되면 develop으로 pull request를 올려 정리했다. (시작할 때 조금 헤매긴 했다 ㅎㅎ)

1. MVP(Minimum Viable Product) UI 짜기

input, output 확인 가능한 최소 요구 사항에 맞게 간결하게 디자인했다.

이후, 긴 Toast 메시지로 파일 저장 성공 및 경로를 알려주면 UI 최소 스펙이 되겠다.

이 단계에서는 입력한 유튜브 주소 유효성 검사 없이, 입력된 값을 토스트 메시지에 출력해 주기만 했다.

2. 천리길도 txt 파일부터

파일 변환은 외부에서 훌륭한 프로그래머들이 만든 코드를 import하면 해결된다. 하지만 파일 불러오기 및 저장은 내가 작성해야 할 것이다. 그래서 text 파일을 저장하고 불러오는 것부터 구현해 보기로 했다.


안드로이드에서 로컬에 데이터를 저장하는 방법은 3가지가 있다고 들었다: SharedPreference, DB 아니면 정말 파일로 저장하기.

실제로 안드로이드 화면에 다 나올 분량의 String을 로컬에 저장한다면, SharedPreference가 가장 쉽고 빠른 방법일 것이다. 하지만 우리가 최종적으로 다루어야 할 것은 몇 메가바이트 가량을 차지하는 음악 파일이다.

따라서 Room이나 SharedPreference를 사용하지 않고 한 번 로컬에 텍스트 파일을 저장해 보겠다.


2-0. 테스트용 UI 만들기

메인 화면에서 Go to CRUD test page 버튼을 누르면 테스트 페이지로 넘어간다.

1인 개발의 장점: 코드 짜면서 기획하기

SAVE 버튼을 누르면 txt 파일이 저장되고, LOAD 버튼을 누르면 파일 탐색기가 켜져 선택된 파일의 주소를 받아온 뒤, 해당 파일을 Write down your memo here 자리에 보여준다.

Rapid하게 기획을 추가하는 것도 애자일 개발인지 궁금해서 잠시 코딩을 멈추고 검색을 해 봤다. Agile하자는 말은 많이 들어 봤어도 아직 무슨 말인지 몰랐기 때문이다.

읽어본 문서

여기어때가 갑자기 ‘애자일’ 하자고 했다 - Medium 여기어때 기술블로그

아 그건 아니구나 ㅎㅎ

애자일 개발의 핵심은 "외부 피드백을 빨리 수용해 노선 바꾸기"에 있는 것 같다!


2-1. 파일 경로 어떻게 확인하지?

Android Studio 상단 목차의 View > Tool Windows > Device Explorer를 선택하면 가상 기기의 저장 경로를 확인할 수 있다.


2-2. 텍스트 파일 저장하기

참고한 문서

Android Kotlin 파일 입출력 - Ryong님의 tistory 블로그
How to write to a file in Kotlin - educative.io

// 해당 Activity에 뷰바인딩 되어 있음, saveTextFile은 SAVE 버튼 눌릴 때 적용

    private fun saveTextFile(binding: ActivityCrudTestBinding) {
        val path = "/data/data/$packageName"
        val dir = "saved_text"
        val dirLocation = File(path, dir)
        if(!dirLocation.exists()) dirLocation.mkdirs()

        val textFileLocation = File(dirLocation, "test.txt")
        val content = binding.memoEdittext.text.toString()
        textFileLocation.writeText(content)
        Toast.makeText(this, "Saved test.txt", Toast.LENGTH_SHORT).show()
    }


여기까지 파일 저장 기능 구현을 해 보았다.

파일 저장 및 불러오기 기능은 feature/crud_test 브랜치에서 확인할 수 있다.

프로젝트 관리 기획

포트폴리오 작성 편의를 위해, pull request > merge 이후에도 각 feature 브랜치를 남겨두려고 한다.

profile
안드로이드 앱 개발 공부 시작!

0개의 댓글