본문 바로가기

전체 글

[자료구조] 스택(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.. 더보기