코틀린(Kotlin)/TIL 38

[코틀린(Kotlin)] 뷰 모델 (ViewModel)

1. 뷰 모델이란? Activity와 Fragment와 같은 UI 컨트롤러의 로직에서 데이터를 다루는 로직을 분리하기 위해서 등장한 Android JetPack 라이브러리. 2. 뷰 모델의 필요성 안드로이드는 Activity와 Fragment 같은 UI 컨트롤러에서 리소스의 제거와 복구가 수행된다. 예시로, 화면 전환(가로/세로)이 이루어질 때 Activity가 onDestroy 된 다음, 다시 화면이 onCreate → onStart가 되기 때문에 특정 데이터들이 날아갈 수 있다. 이는 생명주기와 관련 있는데, class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCrea..

[코틀린(Kotlin)] API Key 숨기기

API Key를 이용하여 카카오 API를 받아 이미지 검색을 하는 개인과제를 진행 중에, 이걸 제출할 때 깃허브에 올릴 텐데, API Key가 노출된 채로 올려도 되나?라는 생각이 들었다. 그래서 API Key를 숨기는 방법을 검색해서 알아봤다 우선, 대략적인 순서는 아래와 같다 local.properties 파일에 값 저장 build.gradle.kts(:app) 수정 프로젝트 빌드 BuildConfig로 호출 1. local.properties 파일에 값을 저장 // local.properties sdk.dir = sdk 경로 API_KEY = "API_Key 값" local.properties 파일을 열고 sdk 경로 밑에 사용할 API Key값을 정의한다 local.properties는 기본적으로..

[코틀린(Kotlin)] 디버깅(Debugging)

1. 디버깅이란? 디버깅은 모든 소프트웨어에서 소스 코드의 오류 또는 버그를 찾아서 수정하는 과정이다 소프트웨어가 예상대로 작동하지 않으면 프로그래머는 오류가 일어나는 원인을 알아내기 위해 코드를 분석한다 디버깅 도구를 사용해 소프트웨어를 제어된 환경에서 실행하고 코드를 단계별로 확인하여 문제를 분석하고 수정한다 2. 디버깅의 중요성 앱 개발 시간 단축 - 초기 단계의 에러 발견으로 이후 시간 절약 - 코드 흐름과 동작 방식 파악으로 유사 오류 빠르게 대응 - 복잡한 문제를 단계별로 분해하여 효과적 관리 품질 향상 및 사용자 경험 개선 - 앱 안정성 증대로 사용자 신뢰 향상 - 오류 감소로 사용자 경험 개선 - 문제 원인 미리 파악으로 유지보수 용이성 향상 개발자의 성장 - 다양한 문제 대처 능력 향상 ..

[코틀린(Kotlin)] CLEARTEXT communication to XXXX not permitted by network security policy

강의를 보며 미세먼지 앱을 만들다가 겪은 에러 "CLEARTEXT communication to XXXX not permitted by network security policy" 발생하는 이유는 따라 치던 코드의 API 주소, 이미지주소 등 네트워크 경로가 https가 아닌 http로 되어 있기 때문이다. 안드로이드 9.0 파이부터는 https를 사용하도록 강제한다고 한다 [참고 사이트]

[코틀린(Kotlin)] 레트로 핏(Retrofit)

1. 레트로핏(Retrofit) 이란? Retrofit은 Square Inc. 에서 개발한 안드로이드 및 자바를 위한 타입-세이프한 HTTP 클라이언트 라이브러리이다. REST API의 HTTP 요청을 자바 인터페이스로 변환하는 것을 주목적으로 한다. 2. Retrofit의 장점 코드의 간결성 - 복잡한 HTTP API 요청을 쉽고 간결하게 만들 수 있다 - 간단한 어노테이션을 통해 요청 메서드와 URL을 정의할 수 있다 안정성과 확장성 - 내부적으로 OkHttp 라이브러리를 사용하여 통신, 이를 통해 안정적인 통신이 가능하다. - 인터셉터를 사용하여 요청/응답 프로세스를 확장하거나 수정할 수 있다. 다양한 플러그인과 컨버터 지원 - 다양한 데이터 형식(Json, XML 등)에 대해 데이터 변환 컨버터를..

[코틀린(Kotlin)] 구글 지도앱 만들기

1. 지도 사용 설정하기 build.gradle의 dependencies 추가 implementation("com.google.android.gms:play-services-maps:18.2.0") implementation("com.google.android.gms:play-services-location:21.0.1") 퍼미션 추가 구글 지도 API 이용하는 키 등록 2. 구글 개발자 콘솔에서 지도 API 키 얻기 구글 개발자 콘솔에 접속해 프로젝트를 생성하고 사용자 인증 정보를 만들면 지도 API 키를 발급받을 수 있다 (무료 사용 하는데도 카드는 등록해야 한다..) 구글 개발자 콘솔에서 얻은 지도 API키를 ManiFest파일에 등록해 준다 레이아웃.xml 3. 지도 제어하기 지도의 중심 이동하기..

[코틀린(Kotlin)] 사용자의 위치 얻기

1. 위치 접근 권한 사용자의 위치를 추적하기 위한 3가지 권한 android.permission.ACCESS_COARSE_LOCATION - 와이파이나 모바일 데이터를 사용해 기기의 위치에 접근하는 권한이다 - 도시에서 1블록 정도의 오차 수준 android.permission.ACCESS_FINE_LOCATION - 위성, 와이파이, 모바일 데이터 등 이용할 수 있는 위치 제공자를 사용해 최대한 정확한 위치에 접근하는 권한이다 android.permission.ACCESS_BACKGROUND_LOCATION - 안드로이드 10(API 레벨 29) 이상에서 백그라운드 상태에서 위치에 접근하는 권한이다 *안드로이드 애플리케이션에서 특정 기능을 사용하기 위해서는 해당 기능에 필요한 권한을 사용자로부터 획득..

[코틀린(Kotlin)] 데이터 저장 - SharedPreference, Room

SharedPreference Room 안드로이드의 데이터를 영구적으로 저장하는 방법 SharedPreference 데이터베이스 파일 형태로 저장 1. Preference란? 프로그램의 설정 정보 (사용자의 옵션 선택 사항이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용 XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장 SharedPreference 클래스 - Preference의 데이터(키-값 세트)를 관리하는 클래스 - 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다 - 응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다 (현재 앱에서만, 다른 앱에서는 x) 1-1. 공유 환경설정의 핸들 가져오기 getSh..

[코틀린(Kotlin)] RecyclerView - StickyHeader, 스크롤 시 상단 뷰 고정

라이브러리를 사용하지 않고 외부 코드를 인용해 StickyHeader를 사용하기 ItemDecoration RecyclerView의 커스텀 기능 ex) 아이템 간의 구분선을 만들기, 스크롤 이동 시 상단에 특정 뷰 고정 등 [GitHub 레포지토리] ItemDecoration 코드와 사용한 코드 HeaderItemDecoration.kt 더보기 package com.android.basic_recyclerview import android.graphics.Canvas import android.graphics.Rect import android.view.MotionEvent import android.view.View import android.view.ViewGroup import androidx.re..

[코틀린(Kotlin)] RecyclerView에 Divider 구분선 넣기, DividerItemDecoration

[GitHub 레포지토리] 프로젝트 중 RecyclerView 아이템들 사이에 구분선을 그리는 기능이 필요했다. 그런데, RecyclerView는 ListView와 다르게 자체적으로 구분선을 그리는 기능이 없고, ItemDecoration을 사용해야 한다고 한다. 혹은 xml에서 를 이용해서 구분선을 주기도 한다. 그런데, 를 이용한 방법은 퍼포먼스에 영향을 주고, 좌우 슬라이드시 하단 구분선이 같이 움직이며, 각각 구분선을 통제할 수 없어지는 문제가 생긴다고 한다 그래서 ItemDecoration을 이용해서 구분선을 추가해 줬다 // 리사이클러 뷰 아이템들 사이에 구분선 추가 val decoration = DividerItemDecoration(applicationContext, VERTICAL) bi..