본문 바로가기

앱 개발/Kotlin_Android

(41)
DAO annotation @Dao : 해당 인터페이스를 DAO로 표시한다. 이 어노테이션이 붙은 인터페이스는 컴파일 타임에 Room이 구현 클래스를 생성한다. @Query : 데이터베이스 쿼리를 정의한다. SELECT, INSERT, UPDATE, DELETE와 같은 SQL 쿼리를 직접 작성할 수 있다. @Insert : 데이터를 삽입하는 메소드를 정의한다. 하나 이상의 엔티티 객체를 데이터베이스에 삽입할 수 있다. @Update : 기존 데이터를 업데이트하는 메소드를 정의한다. 하나 이상의 엔티티 객체를 업데이트할 수 있다. @Delete : 데이터를 삭제하는 메소드를 정의한다. 하나 이상의 엔티티 객체를 삭제할 수 있다. @Insert(onConflict = OnConflictStrategy.REPLACE) : 데이터베이스에..
Room 사용 이유 Room은 SQLite에 비하여 코드의 가독성, 유지보수성, 데이터베이스 작업 안전성을 크게 향상시킨다. SQLite보다 Room을 사용하는 이유는 다음과 같다. 1. 코드의 간결성과 가독성Room: Room은 SQLite의 복잡한 SQL 쿼리를 캡슐화하고, 데이터베이스 작업을 간결하고 가독성 있게 작성할 수 있는 API를 제공한다.SQLite: 직접 SQL 쿼리를 작성해야 하므로 코드가 복잡하고 가독성이 떨어진다.2. 컴파일 타임 검증Room: SQL 쿼리와 데이터베이스 스키마에 대한 컴파일 타임 검증을 제공하여 런타임 오류를 줄이고 개발 중에 버그를 쉽게 발견할 수 있다.SQLite: SQL 쿼리가 문자열로 작성되므로 컴파일 타임에 검증되지 않는다. 따라서 런타임 오류가 발생할 가능성이 높다.3. S..
Room Room은 Android의 데이터베이스 라이브러리로서 SQLite를 보다 쉽게 사용할 수 있게 해준다. 데이터베이스의 접근을 추상화하고 SQLite 데이터베이스와의 상호작용을 더 간단하고 안전하게 할 수 있다. SQL 쿼리의 컴파일 타임 검사를 제공하여 런타임 에러를 줄이고, 보일러플레이트 코드를 제거하여 코드의 가독성과 유지보수성을 향상시킨다. Room의 3가지 주요 요소는 다음과 같다. 1. Entity: 데이터베이스 테이블을 나타내는 데이터 클래스이다. 각 Entity는 데이터베이스 테이블의 행을 표현하며, 클래스의 각 필드는 테이블의 열에 매핑된다. @Entity 어노테이션을 사용하여 정의된다. 2. DAO(Data Access Object): 데이터베이스에 접근하기 위한 메서드를 정의한 인터페이..
서버 & 클라이언트 서버(Server): 서버는 네트워크 상에서 다른 컴퓨터(클라이언트)에 서비스를 제공하는 컴퓨터 또는 프로그램이다. 서버는 클라이언트로부터 요청을 받고 처리한 후 결과를 클라이언트에게 반환한다. 클라이언트(Client): 클라이언트는 서버에 서비스를 요청하는 컴퓨터 또는 프로그램이다. 클라이언트는 사용자 인터페이스를 통해 사용자가 입력한 정보를 서버에 보내고 응답을 받아 이를 사용자에게 보여준다. 웹 브라우저, 모바일 앱 등이 대표적인 클라이언트이다.서버 시작: 특정 네트워크 포트에서 클라이언트 요청을 대기한다. 서버 소프트웨어가 시작되면 네트워크 소켓을 열고 클라이언트로부터 들어오는 요청을 기다린다.클라이언트 요청: 클라이언트는 네트워크를 통해 서버에 연결을 요청한다. 클라이언트는 특정 서버의 IP 주..
레트로핏 레트로핏(Retrofit)은 안드로이드 앱 개발을 위한 HTTP 클라이언트 라이브러리이다. HTTP Method인 GET, POST, PUT, PATCH, DELETE 등을 실행할 수 있다. 또한 callback을 통하여 Main Thread에서 UI 업데이트를 간단히 할 수 있다. 비동기적으로 HTTP 요청을 처리하므로 UI 스레드를 차단하지 않아 안정적이고 반응성 있는 앱을 제작할 수 있다. 그리고 레트로핏은 인터페이스를 사용하여 요청 형식, 매개변수, 응답 형식 등을 명시할 수 있어 API 호출을 쉽게 이해하고 관리할 수 있다. OkHttp와 통합되어 있어 안정적이고 성능이 우수하다. 한편 JSON, XML 등의 데이터 형식을 자동으로 직렬화, 역직렬화하여 별도의 작업 없이 데이터를 처리할 수 있..
RESTful API RESTful API는 Representational State Transfer 아키텍처 스타일을 따르는 웹 API이다. REST의 핵심 원칙을 준수하여 설계된 RESTful API는 간결하고 유연하며 확장 가능한 웹 서비스를 구축하는 데 도움이 된다. 각 API 엔드포인트는 서버 상의 특정 자원을 나타내고 이러한 자원은 고유한 URI(Uniform Resource Identifier)로 식별되며, 클라이언트는 이 URI를 통해 자원에 접근한다. 클라이언트는 요청을 통해 서버의 상태를 조작하고 서버는 클라이언트에게 적절한 응답을 제공한다. HTTP 메서드를 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행한다. 요청에 필요한 정보가 헤더, URI, 메서드 등의 요소를 통..
SharedPreference 1) 특징SharedPreference는 데이터를 저장하고 검색하는 데 필요한 간단한 메서드들을 제공하여 쉽게 사용할 수 있다. 고유한 키-값 형식으로 각 데이터는 저장되고, 해당 키를 사용하여 나중에 데이터를 검색할 수 있다. 그러나 복잡한 데이터들을 저장하는 데는 적합하지 않고 SharedPreference에 저장된 데이터는 해당 앱에서만 사용할 수 있다. 2) 장점빠르고 쉽게 데이터를 저장하고 검색할 수 있어서 앱 설정, 사용자 설정과 같은 데이터를 저장하기에 적합하다. 앱이 종료된 후에도 SharedPreference에 저장된 데이터는 유지되기 때문이다. 3) 단점암호화된 데이터를 저장해야 하는 경우 그리고 데이터 용량 제한으로 복잡한 데이터 구조를 저장하기에 적합하지 않다. 그 경우 SQLite..
Companion Object & Object Companion Object와 Object는 모두 특별한 유형의 객체이지만 다음과 같은 차이가 있다.- Companion Object:클래스 내부에 선언되는 객체이다. 해당 클래스의 인스턴스와 무관하게 클래스 자체에 속한 멤버 변수나 메서드를 가질 수 있다. 클래스의 정적인 요소를 표현하기 위해 사용되고 Java의 정적 멤버와 유사한 역할을 한다.class MyClass {    companion object {        const val MY_CONSTANT = "Hello"        fun myFunction() {            println("My function is called")        }    }}- Object:단일 인스턴스로 존재하는 싱글톤 객체를 클래스 없이 정의할..
ListAdapter ListAdapter는 DiffUtil을 사용하여 새로운 데이터 세트와 이전 데이터 세트의 차이를 계산하여 RecyclerView가 효율적으로 갱신되고 성능이 향상된다. RecyclerView Adapter를 직접 구현하는 것보다 더 간단하게 RecyclerView를 구현할 수 있다. 데이터가 변경될 때마다 ListAdapter는 내부적으로 자동으로 DiffUtil.Callback을 구현하므로 효율적인 UI 업데이트를 제공한다. 따라서 데이터 변경을 처리하는 데 있어서 많은 편의성을 제공한다. ListAdapter는 ViewHolder를 재사용하기 위하여 내부적으로 구현된 onBindViewHolder() 메서드를 제공한다. 항목의 위치를 인수로 받아서 해당 항목의 데이터만을 업데이트하므로 전체 목록을 ..
MVP -> MVVM MVP(Model-View-Presenter) 아키텍처를 MVVM(Model-View-ViewModel) 아키텍처로 변환하는 것은 그리 복잡하지 않다. 그러나 MVP와 MVVM은 각각의 특성을 가지고 있으므로 완전히 같은 것으로의 변환은 어렵지만 일반적인 절차는 다음과 같다. - View 수정 MVP에서는 View가 Presenter를 직접 참조하지만 MVVM에서는 View가 ViewModel을 참조한다. 따라서 View를 수정하여 Presenter 대신에 ViewModel을 참조하도록 변경한다. - ViewModel 생성 / Model 변경 없음 MVVM에서는 각 View에 대해 ViewModel이 존재해야 한다. ViewModel은 View의 데이터와 상태를 관리하고 View와의 상호 작용을 책임진다..