전체 글 썸네일형 리스트형 [자료구조] 스택(Stack), 큐(Queue) Stack의 정의 Stack이란, Stack이란 단어의 의미처럼 쌓아 올린다는 뜻이다. 한쪽에서만 원소를 삽입하고 삭제가 가능한 자료구조이다. 한쪽에서만 원소를 쌓아 올리고 꺼내고 하기 때문에 LIFO(Last In First Out) 구조로 되어있다. Stack의 기술 내용 Stack에는 두가지 중요한 기술인 Push와 Pop이 있다. 위 그림과 같이 입구와 출구가 동일한 바구니가 있다. Push를 하게 되면 바구니에 원소를 집어넣게 되며, 또 한번 Push를 하게 되면 첫 원소 위에 두번째 원소가 위치하게 된다. 여기서 첫번째 원소를 꺼내고 싶다면 Pop을 두번해야 한다. 결국 삽입을 할 때에도 맨 위(Top)에 삽입을 하게 되고 꺼낼때에도 맨 위에 있는 원소를 꺼내게 된다. 주로 문자열의 역순을.. 더보기 [자료구조] 트리(Tree) 트리(Tree) 란? 트리는 노드로 이루어진 자료 구조 트리는 하나의 루트 노드를 갖음 루트 노드는 0개 이상의 자식 노드를 갖고 있음. 그 자식 노드 또한 0개 이상의 자식 노드를 갖고 있음. 노드와 노드는 서로를 연결하는 간선들로 구성. 트리에는 사이클(cycle)이 존재할 수 없음. 노드들은 특정 순서로 나열될 수도, 아닐 수도 있음. 각 노드는 부모 노드로의 연결이 있을 수도 있고 없을 수도 있음. 각 노드는 어떤 자료형으로도 표현 가능함. 비선형 자료구조로 계층적 관계를 표현함. 그래프의 한 종류 사이클(cycle)이 없는 하나의 연결 그래프(Connected Graph) DAG(Directed Acyclic Graph, 방향성이 있는 비순환 그래프)의 한 종류. 트리의 특징 그래프의 한 종.. 더보기 [Android] MVP 패턴 살펴보기 안드로이드 개발 입문단계에서는, View( Activity, Fragment )에서 View의 동작과, 데이터 처리까지 모두 작성하는 방법으로 안드로이드 앱을 제작했을 것이다. 하지만 이렇게 작성하게 되면 코드 작성은 쉬울 수 있지만, 여러 사람들과 협업을 했을 때, 코드 가독성이나 관리, 로직 구현이 굉장히 까다로워진다. 또한 하나의 class에 모든 처리를 위한 수많은 코드들이 들어가게 되어 스파게티 코드로 변환될 가능성이 있다. 그리고 UI에서 모든 걸 처리하기 때문에 비즈니스 로직에 따른 UI의 변화들을 직접 개발자가 바꿔줘야 하는 까다로움이 존재한다. 이로 인해 테스트 코드의 작성이 어려워지게 되며 유지보수에 굉장히 큰 어려움이 따를 수 있다. 이러한 단점을 극복하고자 나온 패턴이 바로 MVP .. 더보기 [Android] 코루틴(Coroutine) 사용법 및 예제 오늘 안드로이드 코틀린의 코루틴에 대해 알아보고자 한다. Coroutine vs Thread를 통해 Coroutine을 사용하는 이유 알아보기 Coroutine Dispatcher Coroutine Context Coroutine Scope Coroutine Builder + Job suspend(일시 중단 함수) Coroutine 직접 사용해보기 Coroutine vs Thread Thread Task단위 => Thread 각 작업에 Thread를 할당 각 Thread는 자체 Stack 메모리를 가지며, JVM Stack 영역 차지 Context Switching Blocking (Thread1이 Thread2의 결과가 나올 때 까지 기다려야 한다면 Thread1은 Blocking되어 사용하지 못함) .. 더보기 [Android] RecyclerView와 ListAdapter, DiffUtil 예제 및 정리 - Kotlin ListAdapter + DiffUtil 사용 이유 기존에는 RecyclerView의 Adapter는 RecyclerView.Adapter를 이용하여 구성하였다. 이는 RecyclerView에서 데이터가 변경되었을 경우 notifyDatasetChanged()를 사용하게 되는데 이 경우, 리스트 내의 데이터를 모두 바꾸게 된다. 따라서, 데이터가 매우 많을 경우 시간 지연이 발생하게 된다. 이러한 불편한 점을 해소하기 위해 ListAdapter + DiffUtil을 활용하게 된다. DiffUtil은 현재 데이터 리스트와 교체할 데이터 리스트를 비교하여 변경이 필요한 부분만을 뽑아내어 변경을 하기 때문에 notifyDatasetChanged() 보다 훨씬 빠른 시간내에 리스트를 변경할 수 있게 되기 때문이.. 더보기 [Android] ViewModel 사용법 및 예제 오늘은 안드로이드의 MVVM 패턴의 핵심이라고 할 수 있는 ViewModel에 대해 알아보려고 한다. 학습내용 ViewModel의 개념 ViewModel과 생명주기 ViewModel의 사용목적 직접 ViewModel 사용해보기 ViewModel UI관련 데이터 저장 및 UI로직을 처리 및 관리하기 위해 만들어짐 LifeCycle 패키지에 포함된 것에서 알 수 있듯이 생명주기를 고려해서 동작하도록 구현됨 ViewModel과 생명주기 View의 생명주기는 안드로이드 FrameWork에 의해 관리됨 화면 회전이나 글씨 크기 변경 등 구성 변경 발생시 View는 Destroy되고 다시 재생성 ViewModel은 View의 Lifecycle에 scoping되어 View가 완전히 종료될 때 까지 객체가 유지됨 Vi.. 더보기 [Android] Room DB 사용법 및 예제 - Kotlin 오늘은 안드로이드의 Room을 이용해 LocalDB를 구성한 예제를 소개하려고 한다. Room에는 다음과 같은 3가지 개념이 존재한다. Database (데이터베이스) Entity ( 데이터베이스 내의 테이블 ) DAO ( 데이터베이스에 접근하는 함수. insert, update, delete 등등 ) 이 개념을 가지고 Room을 이용해 보자. 먼저, Room을 이용하기 위해선, build.gradle에 다음과 같이 추가하자. implementation 'androidx.room:room-runtime:2.2.6' kapt 'androidx.room:room-compiler:2.2.6' 그리고 Entity를 구성해보자. 다음과 같이 History라는 데이터클래스 파일을 만들고 class위에 Entity .. 더보기 [Android] View Binding(뷰바인딩) - Kotlin 오늘은 안드로이드의 View Binding(뷰바인딩)에 대해 알아보려고 한다. ViewBinding ViewBinding(뷰 바인딩)은 뷰와 상호작용하는 코드를 보다 쉽게 작성할 수 있는 기능이다. 뷰바인딩을 사용함으로써, 기존에 사용하던 findViewById를 대체할 수 있다. 뷰 바인딩을 이용하기 위해서는 build.gradle에 다음과 같이 명시하여야 한다. viewBinding { enabled = true } 그럼 이제 실제로 뷰 바인딩을 이용해보자. 먼저 예시에서는 메인 액티비티에서 사용을 하려고 한다. 기존에는 MainActivity와 activity_main_xml을 연결하기 위해 override fun onCreate(savedInstanceState: Bundle?) { super.o.. 더보기 이전 1 2 3 4 5 6 ··· 24 다음 목록 더보기