[Android] Firebase로 채팅 앱 만들기 #1 - Firebase 세팅하기
·
Android
안녕하세요! 🐶이번 글에서는 채팅 시스템 구현을 위해 필요한 Firebase 기본 세팅 방법을 정리해보려고 합니다✏️ Firebase 프로젝트 추가하기1️⃣ Firebase Console 접속먼저 Firebase Console에 접속해 Firebase 프로젝트 만들기를 클릭합니다 2️⃣ 프로젝트 만들기 원하는 프로젝트의 이름을 입력합니다 Gemini와 Google 애널리틱스 활성화 여부는 필요에 따라 선택해주세요저는 이번 프로젝트에서는 사용하지 않겠습니다!모든 선택을 마치면 프로젝트가 생성됩니다 🎉 ✏️ Android 앱 Firebase에 연결하기1️⃣ Android 앱 등록Firebase Console에서 Android 아이콘을 클릭합니다 2️⃣ 필수 정보 입력Android 패키지 이름(필수): ..
[Android/Compose] Android Chip 사용법
·
Android/Study
안녕하세요~ 🎵 오늘은 Android에서 Chip을 사용하는 방법을 정리해보려고 합니다앱을 사용하다 보면 아래와 같은 UI를 종종 볼 수 있습니다이러한 요소를 Chip이라고 부릅니다!이번 글에서는 Chip의 정의와 종류 그리고 구현하는 방법까지 다뤄보겠습니다 🧐 ✏️ Chip이란?🔹 Chip의 정의Chip이란 Material Design 시스템에서 제공하는 UI 컴포넌트로태그, 카테고리, 선택지, 액션 등 작은 정보 단위를 시각적으로 표현할 때 사용합니다 📌 Chip을 사용하면 다음과 같은 장점이 있어요:간결한 정보 표현사용자의 입력/선택 유도공간 절약 🔹 Chip의 종류종류설명예시Assist Chip액션을 보조하는 버튼 형태"주소 검색" 버튼Filter Chip다중 선택 가능한 필터관심사 선택..
[Android/Compose] SGIS API로 단계별 주소 선택기 구현하기
·
Android/Study
안녕하세요! 😊 오늘은 통계청에서 제공하는 단게별 주소 조회 API를 사용하여 주소 선택기를 구현하려고 합니다 프로젝트에서 사용자로부터 정확한 주소 입력을 받아야 하는 상황이 있었고 이를 직접 입력 받는 대신단계별로 선택할 수 있게 선택형 UI로 만들면 더 직관적일 것 같아 SGIS API를 사용하게 되었습니다!✏️ SGIS 주소 API 사용 방법🔸 SGIS API 사용 개요SGIS Developers에서 제공하는 공공 API 단계별 주소 조회 API를 사용하였습니다이 API를 통해 시/도 → 시/군/구 → 읍/면/동 단위로 주소 정보를 불러올 수 있습니다💡 초기 설정 및 테스트는 아래 블로그 참고! [Flutter] 공공 API로 주소 검색 & 주소 선택기 만들기 (BLoC)공공 API로 주소..
[Jetpack Compose] HorizontalPager로 ViewPager 구현하기
·
Android/Study
이전에 xml로 구현했던 프로젝트를 compose로 리팩토링하게 되었다리팩토링을 진행하면서 이전에 xml로 구현했던 요소들을 compose로 바꾸는게 흥미롭기도 어렵기도 했는데오늘은 그 중에 ViewPager를 Compose에서 어떻게 구현하는지 작성해보려고 한다! 🧐 ✏️ Compose에서 ViewPager 구현하기Compose에서는 기존의 Viewpager 대신에 HorizontalPager와 VerticalPager를 사용한다가로 스크롤 ➡️ HorizontalPager세로 스크롤 ➡️ VerticalPager이번 포스팅에서는 HorizontalPager를 중심으로 다룰 예정이다 ✏️ HorizontalPager 기본 사용법HorizontalPager를 사용하려면 우선 pagerState가 필요하..
[Android/Kotlin] RecyclerView에 ItemDecoration으로 구분선 넣기
·
Android/Study
프로젝트를 진행하면서 RecyclerView에서 아이템 사이에 구분선 넣는 작업을 해봤는데나중에도 유용하게 쓸 것 같아 정리해본다 🤓RecyclerView에서 아이템 사이에 구분선(Divider)을 넣고 싶을 때단순히 View를 추가하는 방법도 있지만 ItemDecoration을 활용하는 방법이 더 깔끔하고 효율적이다이번에는 ItemDecoration을 사용해서 구분선을 추가하는 방법을 알아보자 🚀✏️ 기본 구분선 추가하기🔹 DividerItemDecoration 사용RecyclerView에서 기본적인 구분선을 추가하려면 DividerItemDecoration을 사용하면 된다우선 RecyclerView와 Adapter를 설정해준다나는 Fragment에서 작업했기 때문에 아래와 같이 작성했다recyc..
[Android] RecyclerView와 ViewHolder 패턴 (+ListVIew)
·
Android/Study
동적으로 목록을 생성할 때 사용하는 RecyclerView에 대해 알아보려고 한다종종 면접에서 ListView를 물어보는 경우가 있어서 ListVIew와 차이점에 대해서도 정리해보겠다! 🚀RecyclerView에 대한 근본적인 이해를 하기위해 ListView에 대해 조금 이야기하고 갈 예정이니이번에도 역시 사용법이 바로 궁금한 사람들은 목차를 통해 빠르게 이동하면 된다 😀😀 ✏️ 들어가기 전에간단한 리스트를 구현할 때 다들 한번쯤은 ListView라는걸 써봤을텐데ListView는 데이터를 단순히 화면에 뿌려주는 방식이며 여러가지 성능 문제를 가지고 있다🔸 ListView의 동작 방식각 데이터를 보여줄 레이아웃을 inflate()한다findViewById()로 뷰를 찾아 데이터를 넣어 리스트를 만든..
[Android] SQLite vs Room
·
Android/Study
로컬 저장소는 네트워크와 무관하게 데이터를 저장하는 공간이다대표적으로 SQLite와 Room이 있고 이 두가지 방식의 차이점과 사용법을 정리해보려고 한다 🧐 특정 기능에 대해서만 궁금한 사람들은 목차를 클릭해서 빠르게 확인해보시길!✏️ 로컬 저장소란?들어가기에 앞서 로컬 저장소가 뭔지 헷갈린다면 이해하고 넘어가보자로컬 저장소는 네트워크 서버가 아닌 디바이스에 데이터를 저장하는 공간을 의미한다디바이스에 저장하기 때문에 네트워크 연결 여부와는 관계 없이 사용할 수 있다 ✏️ SQLiteSQLite는 안드로이드에 내장된 데이터베이스로 구조화된 데이터를 저장할 때 사용한다직접 SQL 쿼리를 작성해야하는 번거로움이 있다현재는 Room을 자주 사용하지만 이전에는 SQLite가 기본 옵션이었다!SQL 문법을 사용해..
[Jetpack Compose] Android Navigation 기초
·
Android/Study
화면 간의 이동은 앱을 개발할 때에 핵심적인 내용이기 때문에 Navigation에 대해 다뤄보려고 한다 😇 navigation의 주요 구성 요소인 NavHost, NavController에 대해 알아보자! ✏️ NavHost앱 내에서 경로(화면 간의 이동 구조)를 정의하는 컨테이너 역할NavHost()를 사용한다NavHost(navController = navController, startDestination = "home") { composable("home") { HomeScreen() } composable("details") { DetailsScreen() } } ✏️ NavController화면 이동을 수행하는 핵심 컨트롤러rememberNavContro..
[Jetpack Compose] Scaffold 사용법
·
Android/Study
안드로이드 스튜디오에서 새로운 프로젝트를 생성하면 Scaffold라는 컴포저블이 기본적으로 설정되어 있다class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { MyApplicationTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Greeting( ..
[Jetpack Compose] 위치 권한 요청 및 처리하기
·
Android/Study
오늘은 앱에서 위치 권한을 요청하고 권한 승인 여부에 따라 적절한 동작을 수행하는 코드를 작성해보려고 한다! 아래의 코드를 작동하게 할 예정 🧐 Button(onClick = { if (locationUtils.hasLocationPermission(context)) { // 권한 허용시 locationUtils.requestLocationUpdates(viewModel) } else { // 권한 거부시 requestPermissionLauncher.launch( arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ) ..