본문 바로가기

앱 개발/Kotlin_Android

(41)
검색 결과 화면을 유지하기 1) ViewModel을 사용한 데이터 유지ViewModel은 안드로이드 아키텍처 컴포넌트의 일부로서 화면 회전과 같은 구성 변경에도 데이터를 유지한다.SearchViewModel.ktclass SearchViewModel : ViewModel() {    private val _searchResults = MutableLiveData>()    val searchResults: LiveData> get() = _searchResults    fun updateSearchResults(results: List) {        _searchResults.value = results    }}2) Fragment에서 ViewModel을 사용하여 데이터 유지ViewModel을 사용하여 데이터 변경 시점을 관..
DTO, DTA, Entity 1) DTO (Data Transfer Object)계층 간 데이터를 전송할 때 사용되는 객체이다. 주로 네트워크 통신, API 응답, 서비스 간 데이터 교환 시 사용된다.- 특징비즈니스 로직을 포함하지 않고 데이터만 보유한다.네트워크를 통해 전송하거나 파일로 저장할 수 있도록 직렬화가 가능해야 한다.데이터를 받아 사용하는 측에서는 주로 읽기 전용으로 사용한다.- 예시data class UserDTO(    val id: Long,    val name: String,    val email: String)2) DTA (Data Transfer Architecture)데이터 전송을 위한 아키텍처나 패턴을 말한다. 컨텍스트에 따라 달라질 수 있다.- 특징시스템 간 데이터 전송을 효율적으로 설계하는 패턴이나..
무한 스크롤 기능 구현 (1) ScrollListener 1. RecyclerView 및 Adapter 설정 2. RecyclerView에 ScrollListener를 추가하여 스크롤 위치를 감지하고 새로운 데이터를 로드// class SearchFragment override fun onViewCreated(view: View, savedInstanceState: Bundle?) {    super.onViewCreated(view, savedInstanceState)    searchAdapter = SearchAdapter(object : SearchAdapter.OnItemClickListener {        override fun onClick(data: HomeVideoModel) {            (req..
Process, Thread - Process (프로세스)정의: 프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립된 메모리 공간을 갖고 실행된다.메모리: 프로세스는 각각 독립적인 주소 공간(코드, 데이터, 힙, 스택)을 갖는다.자원 할당: 프로세스는 운영 체제에 의해 독립적으로 자원을 할당받는다.통신: 프로세스 간의 통신은 IPC(Inter-Process Communication) 메커니즘을 통해 이루어진다. 여기에는 파이프, 소켓, 메시지 큐 등이 포함된다.오버헤드: 프로세스 간의 문맥 전환에는 상대적으로 큰 오버헤드가 발생한다.독립성: 한 프로세스의 문제는 다른 프로세스에 영향을 주지 않는다. - Thread (스레드)정의: 스레드는 프로세스 내에서 실행되는 작은 실행 단위이다. 여러 스레드는 하나의 프로세스 내..
MVVM 패턴 사용 이유 - 명확한 역할 분리Model: 데이터 소스 및 비즈니스 로직을 처리한다. 데이터베이스나 네트워크 통신과 같은 작업을 담당한다.View: 사용자 인터페이스(UI)를 담당한다. 사용자 입력을 처리하고 데이터를 화면에 표시한다.ViewModel: View와 Model 간의 중개자 역할을 하며 UI 관련 로직을 포함한다. 데이터 변화를 감지하여 View를 업데이트한다.- 단위 테스트 용이성View와 비즈니스 로직이 분리되어 있으므로 ViewModel과 Model을 쉽게 테스트할 수 있다. ViewModel은 안드로이드 프레임워크에 의존하지 않기 때문에 단위 테스트 작성이 용이하다.- 유지보수 및 확장성코드가 잘 구조화되어 있어 유지보수가 용이하며, 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 확장할 수..
Android 4대 컴포넌트 1) Activity (액티비티)사용자 인터페이스를 제공하는 컴포넌트로서 화면에 표시되는 UI를 구성한다. 사용자가 화면을 보고 상호작용할 수 있는 모든 것이 액티비티를 통해 이루어진다.생명 주기: onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()전환: Intent를 사용하여 다른 액티비티를 시작하거나 데이터를 전달할 수 있다.예시: 로그인 화면, 설정 화면 등2) Service (서비스)백그라운드에서 오래 실행되는 작업을 수행하는 컴포넌트로서 사용자와 직접 상호작용하지 않지만 애플리케이션이 실행 중인 상태를 유지하면서 작업을 계속한다.Started Service: 시작 후 백그라운드에서 무한히 실행됨 (startService())B..
API 사용하여 동영상 가져오기 1) Retrofit 설정Retrofit은 Android를 위한 타입 safety HTTP 클라이언트 라이브러리이다.build.gradle (Module: app)dependencies {    implementation 'com.squareup.retrofit2:retrofit:2.9.0'    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'    implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'}2) API 인터페이스 정의Retrofit 인터페이스를 정의하여 API 엔드포인트와 상호작용한다.interface ApiService {    @GET("search")    suspe..
Hilt & ViewModel Hilt를 사용하면 ViewModelProvider를 명시적으로 호출할 필요가 없는 이유는 Hilt가 ViewModel의 생명주기와 종속성 관리를 자동으로 처리해주기 때문이다. 이를 통해 더 간결하고 유지보수하기 쉬운 코드를 작성할 수 있다. Hilt를 사용하면 ViewModel을 주입받기 위해 다음 단계를 따른다.1) Hilt 모듈 생성:@HiltViewModel 주석을 사용하면 Hilt가 ViewModel을 자동으로 관리해준다.2) ViewModel 클래스에 @HiltViewModel 주석 추가:ViewModel 클래스에 @HiltViewModel 주석을 추가하여 Hilt가 해당 ViewModel을 주입할 수 있도록 해준다.3) by viewModels() 사용:Fragment 또는 Activity에..
검색 버튼 클릭시 키보드 숨김 처리 1) EditText의 setOnEditorActionListener를 사용하여 검색 버튼을 감지2) 키보드를 숨기는 로직 private fun setUpListener() {    binding.etSearch.setOnEditorActionListener { _, actionId, _ ->        hideKeyboard()    }}private fun hideKeyboard() {    val imm =    view?.context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager    imm.hideSoftInputFromWindow(requireView().windowToken, 0)}
Entity, Mapper Entity는 데이터베이스 테이블의 구조와 매핑되는 클래스이다. 객체 관계 매핑(Object-Relational Mapping) 프레임워크에서 주로 사용된다. 데이터베이스 매핑: Entity 클래스는 데이터베이스 테이블의 각 열을 클래스의 필드로 나타낸다. 이를 통해 데이터베이스의 행(row)을 객체 형태로 표현할 수 있다.데이터의 영속성: Entity 클래스는 데이터베이스와 애플리케이션 사이의 데이터 전송을 담당한다. 이를 통해 데이터베이스에 저장된 데이터를 애플리케이션의 객체로 불러오거나 객체를 데이터베이스에 저장할 수 있다. 데이터 검증 및 제약 조건: Entity 클래스에서 데이터 검증과 제약 조건을 설정할 수 있다. 예를 들어 특정 필드는 null일 수 없거나 고유해야 한다는 제약을 설정할 수 ..