SOPT 36기 합동 세미나를 앞두고 있다. 이번 프로젝트에서 안드로이드 첫 리드를 맡게됐다. 이번 프로젝트의 핵심 목적은 안드로이드 경험이 적은 팀원도 빠르게 진입 가능하고, 협업 시 충돌 없이 책임 분리가 명확한 구조 유지하는 것이다. 따라서 프로젝트 구조를 최대한 단순화해서 진행할 예정이다.
Coding Convention
Git Convention
Package Convention
기술 스택 선정 이유
그래서 주제 발표 이전에 위와 같은 컨벤션을 정하게 됐는데, 이를 공유하고자 글을 쓴다.
1. 패키지 - 소문자 (한 단어)
ex) core
ex) data
ex) feature
ex) home
2. 클래스 & 인터페이스 - 파스칼 케이스
ex) HomeRoute()
ex) HomeViewModel()
3. 변수 & 함수 - 카멜 케이스
ex) isButtonEnabled
ex) isPasswordValid()
ex) getUserInformation()
4. resource 파일 - 스네이크 케이스
strings
(view_)내용 설명
<string name="my_home">우리집</string> -> 여러 화면에서 사용될 때
<string name="home_my_home">우리집</string> -> 한 화면에서 사용될 때
drawable
type_(view_)내용 설명
ex) ic_arrow_right.xml
ex) img_user_profile.png -> 여러 화면에서 사용될 때
ex) img_home_user_profile.png -> 한 화면에서 사용될 때
1. 이슈 파기
[Type] 작업 내용
ex) [setting] 디자인 시스템 정의
2. 브랜치 파기
Type/#IssueNumber-작업 내용
ex) setting/#1-design-system-color
ex) feature/#2-home
ex) refactor/#3-home-refactor
3. 작업 후 커밋 메세지
Type/#IssueNumber: 작업 내용
ex) setting/#1: 디자인 시스템 폰트 정의
ex) feature/#2: 홈 뷰 구현
ex) feature/#3: 홈 api 연결
4. PR 올리기
Type/#IssueNumber: 작업 내용
ex) setting/#1: 디자인 시스템 폰트 정의
ex) feature/#2: 홈 뷰 구현
ex) feature/#3: 홈 api 연결
5. Merge 하기
merge #IssueNumber -> develop
2명 이상의 approve 시 merge 가능
구글 권장 아키텍처를 기본으로 하되, 실용적인 수준으로 단순화했다.
core : UiState/확장 함수 등의 코드 모음
data : 서버와 관련된 코드 모음
feature : 클라이언트와 관련된 코드 모음
📂 Project
┣ 📂 core
┃ ┣ 📂 extension
┃ ┣ 📂 util
┣ 📂 data
┃ ┣ 📂 dto
┃ ┃ ┣ 📂 request
┃ ┃ ┣ 📂 response
┃ ┣ 📂 module
┃ ┣ 📂 service
┣ 📂 presentation
| 기술 | 역할 |
|---|---|
| SAA | 화면별 책임 분리 (ViewModel 기반) |
| Kotlin | Android 공식 언어 |
| Coroutine | 비동기 처리 |
| StateFlow | 화면 상태 관리 |
| SharedFlow | 1회성 이벤트 처리 |
| Jetpack Navigation | Compose 기반 내비게이션 관리 |
| Hilt | DI(의존성 주입) |
| Retrofit + OkHttp | 서버 통신 라이브러리 (REST API 호출) |