본문 바로가기

전체 글

(85)
[과제] 피드백 (앱 개발 심화) 1) ViewModelProvider는 레거시 코드이므로 by viewModels() 사용하기https://ddangeun.tistory.com/802) _thumbnailUrls는 MutableLiveData(가변 라이브데이터), 언더바가 없는 thumbnailUrlList는 불변 LiveData. (Backing Property) 언더바가 존재하면 읽기/쓰기 가능, 없으면 읽기만 가능.    private val _thumbnailUrls = MutableLiveData>()    val thumbnailUrls: LiveData> = _thumbnailUrls3) RetrofitService interface에서 아래 "Authorization"에 Default 값을 설정 @GET("v2/searc..
서버 & 클라이언트 서버(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() 메서드를 제공한다. 항목의 위치를 인수로 받아서 해당 항목의 데이터만을 업데이트하므로 전체 목록을 ..
[과제] 피드백 (앱 개발 숙련) 1) 리사이클러뷰 아이템 레이아웃 화면 꽉 채우기            android:layout_height="0dp"        app:layout_constraintBottom_toBottomOf="parent"        tools:listitem="@layout/item_layout" /> 2) @Parcelize 사용하기    build.gradle (Module: app)    plugins {        id("kotlin-parcelize") // 추가    }  3) ItemAdapterViewHolder는 inner 아닌 단순 class로 작성.NO_POSITION보다는 item이라는 변수를 nullable하게 만들어서 null이 아닐 때만 클릭 동작이 가능하도록 설정.class ..