간단한 안드로이드 앱 만들기 (날씨 앱)
1. 간단한 날씨 앱 개발을 위한 설계 - Main Home
리저브콜드브루
2025. 2. 4. 17:49
728x90
반응형
안드로이드 기능과 기술 스택 정리
- 언어: Kotlin
- IDE: Android Studio
Main Home
위치 기반 서비스와 기상청 API를 이용해 현재 위치의 날씨 정보를 표시한다.
1. UI 구성 (예상)
기능 | UI 요소 (예상) | 추가 요소 |
현재 위치 표시 | TextView | GPS 데이터 활용 |
온도 표시 | TextView, ImageView | 날씨 아이콘 표시 |
최고/최저 온도 | LinearLayout, TextView | 아이콘 추가 가능 |
일간/주간 날씨 예보 | RecyclerView, CardView | ViewHolder 패턴 활용 |
대기질 정보 | TextView, ProgressBar | 색상 변화로 시각화 |
자외선 지수 | TextView, ProgressBar | 위험 수준에 따라 색상 변경 |
바람 정보 | ImageView(방향 표시), TextView | 화살표 회전 애니메이션 |
체감 온도 | TextView | 실제 온도와 비교 강조 표시 |
일출/일몰 정보 | TextView, ImageView | 해의 움직임 애니메이션 추가 |
- 이벤트 처리:
- Toast 메시지로 위치 권한 요청 상태 알림
- XML과 Kotlin 상호작용:
- findViewById로 UI 요소 참조
- Logcat으로 디버깅
2. 위치 기반 서비스
Foreground vs Background 방식 비교
위치 정보를 가져오기 위한 방식은 포그라운드와 백그라운드 두 가지가 있다.
구분 | 포그라운드 위치 정보 | 백그라운드 위치 정보 |
앱 상태 | 앱이 실행 중일 때 | 앱이 꺼져 있거나 백그라운드 실행 시 |
필요한 권한 | ACCESS_FINE_LOCATION | ACCESS_FINE_LOCATION + ACCESS_BACKGROUND_LOCATION |
배터리 소비 | 적음 | 많음 |
권한 요청 난이도 | 쉬움 | 어려움 (추가 설정 필요) |
사용 예 | 지도 앱, 날씨 앱 | 배달 추적 앱, 피트니스 앱 |
날씨 앱을 개발하기 위해서 포그라운드 위치 정보를 사용할 예정이다.
- 위치 권한 설정:
- ACCESS_FINE_LOCATION (정밀 위치) 권한 선언 (AndroidManifest.xml)
- 런타임 권한 요청 처리 (ActivityCompat.requestPermissions)
- 현재 위치 가져오기:
- FusedLocationProviderClient 활용 (Google Play Services)
- Google Play Services에서 제공하는 위치 정보 API
- GPS, Wi-Fi, 셀룰러 네트워크, 센서 등 여러 위치 제공자를 결합해 가장 정확하고 효율적인 위치 정보를 제공
- LocationRequest로 GPS 기반 위치 데이터 수신
- Geocoder : 위도/경도를 도시 이름으로 변환
- FusedLocationProviderClient 활용 (Google Play Services)
3. 네트워크 통신
- 기상청 API 연동:
- OpenAPI에서 API Key 발급 및 설정
- API 요청을 위한 인터넷 권한 추가 (INTERNET 권한)
- Retrofit 활용:
- Retrofit으로 날씨 정보 요청
- Retrofit: REST API와 통신하기 위해 사용되는 HTTP 클라이언트 라이브러리
- Gson으로 JSON 데이터 파싱
- Gson: JSON 데이터를 Java/Kotlin 객체로 반환(Parsing) 해주는 라이브러리
- Retrofit으로 날씨 정보 요청
- 비동기 처리 (Coroutines):
- API 호출을 메인 스레드 차단 없이 처리
- suspend 함수 및 ViewModelScope.launch 활용
- suspend: 일시 중단 가능한 함수를 정의할 때 사용하는 키워드, 일시 중단 후 다시 이어서 실행할 수 있는 비동기 작업을 만들 수 있다.
- ViewModelScope.launch: 코루틴을 실행하는 범위를 ViewModel에 설정해 주는 기능. ViewModel이 살아있는 동안만 코루틴이 동작하고, Activity가 종료되면 자동으로 작업이 취소된다. (메모리 누수 방지 및 앱 성능 최적화)
4. 데이터 표시 및 상태 관리
MVVM (Model-View-ViewModel) 패턴이란?
UI와 데이터 로직을 분리하여 코드의 유지보수성과 확장성을 높이는 아키텍처 패턴
- MVVM 패턴 적용:
- ViewModel로 데이터 상태 관리
- LiveData로 날씨 데이터 변경 시 UI 자동 업데이트
- LiveData: UI와 데이터 간의 실시간 동기화를 간편하게 관리할 수 있는 관찰 가능한 데이터 홀더 클래스. 이 데이터가 변경될 때마다 자동으로 UI를 업데이트하는 데 사용.
- 오류 처리 및 디버깅:
- 네트워크 요청 실패 시 오류 메시지 표시
- Logcat을 활용한 디버깅
728x90
반응형