본문 바로가기

전체 글

(89)
Missing required view with ID 1. 발생 원인 커스텀 뷰를 만들어서 사용할 때, 해당 커스텀 뷰를 다른 곳에서 사용할 때 바로 id를 사용하면 이 에러가 발생합니다. 즉, 예를 들어서 아래처럼 사용할 경우 위 에러가 발생합니다. 2. 해결 방법 커스텀 뷰는 다른 레이아웃 안에 포함시키고, 그 레이아웃에 ID 값을 할당해서 사용해야 합니다. 한 가지 예시로, 아래처럼 LinearLayout 으로 커스텀 뷰를 감싼 다음 사용하시면 됩니다.
Expected BEGIN_OBJECT but was STRING at line 1 column 1 1. 발생 원인 retrofit을 사용해서 데이터를 전달받을 때, response로 설정한 값과 들어온 값의 자료형이 다를 때 생기는 오류입니다. 예를 들어 제가 response에 해당하는 데이터 클래스를 다음과 같이 했다고 가정하겠습니다. data class RefrigeratorResult( val beerImgUrl: BeerImage, val nameKr: String, val beerId: Int ) 그런데 데이터가 실제로는 이런 형식으로 전달된다고 하겠습니다. data class RealRefrigeratorResult( val beerImgUrl: String, val nameKr: String, val beerId: Int ) 이때 저는 beerImgUrl 이라는 변수를 BeerImage라..
SharedPreferences 개념 및 사용법 1. 정의 간단한 데이터의 저장을 목적으로 사용합니다. SharedPreferences는 내부 저장소를 이용하기 때문에 권한 설정이 필요 없고 간단한 코드로 사용할 수 있습니다. (이때 꼭 뒤에 s를 붙여야 합니다. SharedPreference's') 주로 로그인 정보나 앱의 상태 정보를 저장하는 용도로 사용되며, 액티비티에서 인텐트에 값을 넣고 빼는 것과 비슷한 형태로 동작합니다. 2. 사용법 1) Editor로 데이터 저장하기 fun setSharedData(name: String, key: String, data: Int) { var pref: SharedPreferences = getSharedPreferences(name, Activity.MODE_PRIVATE) var editor: Shar..
Koin을 통해 의존성 주입하기 0. 의존성 주입에 대해서 1) 의존성(Dependency)이란? 현재 객체가 다른 객체와 상호작용을 하고 있다면 현재 객체는 다른 객체에 의존성을 가진다고 합니다. 의존성이 높은 경우, 하나의 모듈이 바뀌면 의존하고 있던 다른 모듈까지 변경되어야 합니다. 또한 두 객체 사이에 의존성이 존재한다면 단위 테스트를 하기 어려워집니다. 따라서 이를 해결하기 위해 의존성 주입 개념을 도입할 수 있습니다. 2) 의존성 주입(Dependency Injection)이란? 내부에서 객체를 생성하는 것이 아니라, 외부에서 객체를 생성하여 의존성을 주입해주는 것입니다. a. 장점 코드의 재사용성을 향상시키고, 더 간결하게 코드를 작성할 수 있습니다. 또한 객체의 생성과 사용을 분리시켜 종속된 코드를 줄여줍니다. 이를 통해..
ListView와 RecyclerView의 차이점 안녕하세요? 닉네임간편입니다. 앱을 개발하면서 화면에 아이템을 나열하여 보여야 할 때가 많은데요, 그럴 때 유용하게 사용하는 것이 바로 리스트뷰(ListView)와 리싸이클러뷰(RecyclerView)입니다. 둘의 기능이 유사하다 보니 한 요소만 사용하거나 혹은 두 요소를 혼동해서 사용하는 경우도 있었는데요, 이번 시간에는 이 둘의 차이점에 대해서 자세히 다루어보겠습니다. 1. 책임(Responsibility) 여기서 '책임'이라는 말은 어떤 기능을 구현함에 있어서 주요한 역할을 한다는 것을 의미합니다. 리스트뷰는 해당 클래스 내부에서 자체적으로 많은 것들을 설정할 수 있습니다. 따라서 리스트뷰는 해당 클래스가 모든 '책임'을 갖고 있다고 볼 수 있습니다. 반대로 리싸이클러뷰는 해당 클래스 자체에서 많은..
[자료구조 with 코틀린] 3. Queue 1. 개념 먼저 들어간 데이터가 먼저 나오는 자료구조입니다. FIFO(First In First Out)이라고도 합니다. 안드로이드에서 Looper를 사용할 때 메시지 큐에 사용되는 자료구조입니다. 2. 시간복잡도 a. 탐색 앞선 스택과 마찬가지로, 특정 데이터를 찾을 때까지 탐색해야 하므로 O(N)의 시간복잡도를 가집니다. b. 삽입 및 삭제 모두 O(1)의 시간복잡도를 가집니다. 3. 구현 LinkedList를 사용하여 구현하는 것이 좋습니다. 삽입 및 삭제에 O(1)의 시간복잡도를 가지기 때문입니다. class Queue { private var head : Node? = null inner class Node( var data: E, var next: Node? ) fun enqueue(item:..
[자료구조 with 코틀린] 2. Stack 1. 개념 나중에 들어간 데이터가 먼저 나오는 자료구조입니다. 이를 LIFO(Last In First Out)이라고도 합니다. 안드로이드 액티비티를 관리하는 데 사용되는 자료구조입니다. 2. 시간복잡도 1) 탐색 Random Access가 안 되며 특정 데이터를 찾을 때까지 탐색을 수행해야 하므로 O(N)의 시간복잡도를 가집니다. 2) 삽입 및 삭제 삽입 및 삭제에는 O(1)의 시간복잡도를 가집니다. 3. 공간복잡도 N개 만큼의 스택이 쌓이기 때문에 O(N)입니다. 4. 구현 구현하기에 앞서, 스택을 구현할 때에는 ArrayList를 사용하는 것이 좋습니다. ArrayList의 경우 index를 사용하면 마지막에 데이터를 추가하고 삭제하는 데 O(1)의 시간복잡도를 갖기 때문입니다. 따라서 전 Array..
[자료구조 with 코틀린] 1. LinkedList 1. 개념 하나의 노드에 데이터와 포인터가 있으며, 이를 연결하는 방식으로 데이터를 저장하는 선형 자료구조입니다. 2. 시간복잡도 1) 검색 논리적 저장 순서와 물리적 저장 순서가 다르기 때문에, 첫 노드부터 순회해서 탐색해야 합니다. 따라서 검색 시 O(N)의 시간복잡도를 가집니다. 2) 삽입 및 삭제 배열처럼 연속적으로 데이터가 저장된 것이 아니라 포인터를 사용했기에, 삽입과 삭제에 O(1)의 시간복잡도를 가집니다. 그러나 특정 데이터를 삭제하려는 경우, 이 데이터를 찾는 데 O(N)의 비용이 발생합니다. 3) 메모리 할당 새로운 노드가 추가될 때마다 추가로 할당됩니다. 즉, 런타임에 할당되며, 동적 메모리 할당이라고도 합니다. 3. 구현 class LinkedList { private var hea..

728x90
반응형