[Android/Kotlin] MVP 패턴을 구현해보자! (실습)
2022. 1. 13. 19:27
Mobile/Android
MVP를 적용할 상황을 설계 MVP를 적용할 간단한 예제를 구현하기 위해서, 다음과 같은 간단한 상황을 고려해보고자 한다. (1) 이름과 이메일을 입력하면 이 값들이 저장되는 기능 (2) 하단 Text View에 저장된 값들이 출력되는 기능 (3) Application을 다시 시작할 때, 이미 저장된 값이 있으면 불러오는 기능 사실 이러한 간단한 수준의 기능은 하나의 Class에서 모두 해결할 수 있지만, MVP 패턴에서는 어떻게 적용되는지 알아보기 위해서 모든 기능을 나누어 처리할 것이다. LinearLayout을 이용한 간단한 레이아웃을 작성해보았다. 이에 대한 Code는 다음과 같다. MVP의 구성 요소 설계하기 위에서 MVP를 적용할 상황을 간단하게 설계해보았다. 그 다음으로 해야 할 일은 MVP..
[Android/Kotlin] MVP 패턴이란?
2022. 1. 13. 19:20
Mobile/Android
MVP 패턴이란? Application의 시각적 요소와 그 뒤에서 돌아가는 Business Logic을 서로 영향 없이 쉽게 고칠 수 있도록 설계하는 방식이다. MVP 패턴이라는 이름은 이러한 요소를 정의하는 Model, View, Presenter 3가지 구성 요소의 Abbreviation 이다. 이 3가지 구성 요소를 정리하면 다음과 같이 기술할 수 있다. Model : Application의 데이터와 상태에서 대한 Business Logic 수행 View : 실제 View에 대한 직접적인 접근을 담당 Presenter : View와 Model 사이에서 데이터를 전달하는 역할 즉, MVP 패턴은 View와 Model이 Presenter를 통해서만 동작할 수 있도록 설계하기 때문에, View와 Mode..
[C++] 해시(Hash) 자료구조란? (C++로 구현하기)
2021. 3. 23. 21:30
Programming/C│C++
해시(Hash) 자료구조란? 해시는 너무도 유명한 자료구조이기 때문에, 컴퓨터를 공부하는 분들이라면 누구나 한번쯤은 들어보셨을 것입니다. 이 자료구조는 왜 그렇게 중요한 것일까요? 아래의 상황을 보겠습니다. 3명의 사람 (김연아, 손흥민, 서장훈) 이 위와 같이 부탁을 했습니다. 그리고 이러한 기능을 C++ 를 사용해서 구현해달라고 했습니다. 파이썬과 다르게, 기본적으로 C++ 에서는 이런 기능을 지원하지 않습니다. 어떻게 기능을 구현해야 가장 효율적이고, 빠른 자료구조가 될까요? 답은, 각각의 이름(텍스트)에 대해서, 유일한 Key 값을 가지게 하는 것입니다. 만들어진 Key 값을 이용해서 자료에 접근한다면 O(1) 시간만에 접근할 수 있습니다. 아래와 같이 말입니다. 해시(Hash)의 동작원리 해시에..
[알고리즘] KMP 알고리즘 - 빠른 문자열 찾기 (C++로 구현하기)
2021. 3. 21. 22:33
Programming/알고리즘
KMP 알고리즘이란? 'Knuth-Morris-Pratt' 의 줄임말입니다. 이 알고리즘을 설계한 사람들입니다. 전체 문자열에서, 특정 문자열(패턴)을 빠르게 찾는 알고리즘입니다. 이와 비슷하게 문자열을 찾는 여러 알고리즘이 있습니다. 대략적으로 소개하자면 다음과 같습니다. - Naive Algorithm : 가장 쉽게 생각할 수 있는, O(N²)의 전체 탐색 알고리즘입니다. - Rabin & Karp Algorithm : 해시를 이용한 문자열 탐색 알고리즘입니다. - Boyer & Moore Algorithm : 일반적으로 가장 빠른 알고리즘입니다. - Suffix Tree / Array : 접미사 트리 / 배열이라고 불리는, 테이블을 이용한 알고리즘입니다. KMP 알고리즘 역시 이해하기 어렵습니다. ..
[알고리즘] 확장된 유클리드 알고리즘 (Extended Euclidean Algorithm) 으로 최대공약수 (GCD) 구하기 (C++로 구현하기)
2021. 3. 18. 00:16
Programming/알고리즘
확장된 유클리드 알고리즘이란? '확장된' 이라는 말이 붙었습니다. 그렇다면 유클리드 알고리즘이란 무엇일까요? 많은 분들이 알고 계신 것처럼, 유클리드 알고리즘은 최대공약수 (GCD) 를 구할 때 사용합니다. 만약 375와 275의 최대공약수를 구하고 싶다면 아래와 같이 유클리드 알고리즘을 적용할 것입니다. GCD(375, 275) → 25 여기에 덧붙여, 확장된 유클리드 알고리즘은 두 개의 숫자 375, 275에 대해서, 각각에 어떤 값을 곱하고 더해야 최대공약수인 25가 되는지도 알려줍니다. 즉, 아래와 같이 알려준다는 것입니다. xGCD(375, 275) → GCD = 25, S = 3, T = -4 여기에서 구해진 S와 T의 값을 이용하면, 375 * (3) + 275 * (-4) = 25 가 됨을..
[알고리즘] 프림(Prim) 알고리즘으로 MST 찾기 (C++로 구현하기)
2021. 3. 16. 23:39
Programming/알고리즘
프림(Prim) 알고리즘이란? 최소신장트리(MST, Minimum Spanning Tree) 를 찾기 위한 대표적인 알고리즘입니다. 여기에서 최소신장트리란, 아래와 같이 모든 노드를 연결하는 부분 그래프 중, 가장 비용이 적은 것입니다. 하늘색으로 표시한 경로가 최소신장트리입니다. 여기에서 최소신장트리의 길이는 (4 + 8 + 16 + 20) = 48 이 되겠습니다. 최소신장트리를 찾는 알고리즘은 크루스칼(Kruskal) 과 프림(Prim) 이 대표적입니다. 오늘은 그 중에서도 프림 알고리즘에 대해서 알아보겠습니다. 동작원리 프림 알고리즘에서는 MST의 후보가 될 간선을 담을 우선순위 큐가 필요합니다. 우선순위 큐는 최소의 비용을 가지는 경로가 우선순위를 갖게 합니다. (보통 Min Heap을 이용해서 ..