전체 글
[Android, Kotlin] Architecture Pattern - MVVM
MVVM 아키텍처 패턴에 대해 알아본다. 이전 글에서 MVP 패턴의 경우 View와 Model이 분리된다는 장점이 있으나, 이에 따라 View와 Presenter 간 의존도가 높아지고, View 하나에 필연적으로 Presenter 하나가 따라오는 1:1 구조를 이루고 있어 앱의 사이즈가 커질 수록 코드의 양이 방대해진다고 하였다. MVP 패턴 : https://hungseong.tistory.com/11 Architecture Pattern - MVP 넘 어려운 아키텍처 패턴 MVC는 초기 앱 만들 때 맨날 쓰던 패턴이라 익숙하다. 하지만 MVP와 MVVM 이 녀석들은 아무리 검색하고 공부해도 헷갈려서 이해가 안 간다. 대체 뭐가 뭔지 1도 모르겠다. hungseong.tistory.com 그렇다면 ..
[Android, Kotlin] Architecture Pattern - MVP
넘 어려운 아키텍처 패턴 MVC는 초기 앱 만들 때 맨날 쓰던 패턴이라 익숙하다. 하지만 MVP와 MVVM 이 녀석들은 아무리 검색하고 공부해도 헷갈려서 이해가 안 간다. 대체 뭐가 뭔지 1도 모르겠다. 그래서 정리해본다. MVP Model - View - Presenter MVP 패턴은 Model, View, Presenter로 구성되어 있는 패턴이다. 도식화 하여 보는 것이 그나마 이해하기 가장 쉬우므로 보자. 코틀린에서 MVC는 Activity가 V+C를 모두 담당하고, Model과도 연결되어 Activity 혼자 모든 데이터 처리까지 담당하는 구조였다. MVC의 경우, 의존성이 제거된 부분 없이 서로가 서로에게 의존성이 존재하여 유지보수가 힘들며, 테스트 코드를 작성 할 때도 UI 위주의 테스트 ..
[Android, Kotlin] DI(Dependency Injection), 의존성 주입
Dependency 의존성 함수에 필요한 클래스, 객체 등에 의존하는 것. 한 객체가 다른 객체를 참조(다른 객체와 상호작용)하는 것 위 같은 코드에서 DefaultRestaurantFoodRepository 클래스는 FoodApiService에 종속되어 있다라고 한다. 의존성이 높아지게 되면, 두 객체 간 결합도(coupling)가 높아지게 된다. 한 객체의 코드가 변경되면 다른 객체의 코드도 변경되어야 하므로, 유지보수 및 리팩토링의 불편함이 존재한다. DI (Dependency Injection) 의존성 주입 Dependency Injection(의존성 주입) - 의존성이 필요한 클래스, 객체 등을 내부적으로 생성하여 사용하는 것이 아닌, 외부에서 생성해 주입해 주는 것. * 객체의 생성 , 생..
[Android, Kotlin] Retrofit, Room과 같은 동작에서의 Coroutine 쓰레드 처리
코루틴을 사용한 비동기 처리를 구현한다. 이 때, 비동기를 사용하는 주된 이유 중 하나는 네트워킹, 데이터베이스의 Read/Write와 같은 무거운 작업의 처리를 위함인데, 네트워킹 동작의 대표적인 라이브러리인 Retrofit, 데이터베이스 동작의 대표적인 라이브러리인 Room을 코루틴 내에서 사용할 때, 당연하게 IO Dispatcher로의 Thread Switching 을 해야 한다고 인식하고 있었다. 그러나 Retrofit, Room을 통한 네트워킹 , db 동작을 수행 할 때, IO 스레드로 전환 할 필요 없이 main 스레드에서 수행하면 된다. 아래 글이 이해가 잘 가도록 정리가 잘 되어 있어 단박에 이해할 수 있었다. 참고 : https://www.lukaslechner.com/..
[Kotlin] 상속 변경자 open, abstract 차이
open : 상속 받을 수 있는 class / function. 상속받는 대상이 부모가 구현한 open fun을 그대로 사용 할 수도 있고, override하여 사용 할 수도 있다. open class의 경우 상속받는 대상이 없어도 인스턴스화 가능. open fun의 경우 상속받는 대상이 그대로 사용 가능. override하여 재정의 가능. abstract: 상속 받아야만 하는 class / function. 하나 이상의 abstract fun, property가 있을 시 해당 class는 abstract로 선언해야 한다. abstract fun, property의 경우 상속 받는 대상은 해당 abstract fun을 무조건 구현해야 하고, abstract property를 정의해야 한다. abstr..
[Kotlin] 접근제한자, 제네릭
접근제한자 함수형 언어라는 코틀린의 특성 때문에 기존 객체지향에서 모듈 개념이 도입됨. 접근제한자를 통해 모듈 간 접근을 제한할 수 있음. ** 모듈 : 한번에 같이 컴파일 되는 모든 파일. 안드로이드를 예로 든다면 하나의 앱이 하나의 모듈이 될 수 있음. 라이브러리도 하나의 모듈. private : 다른 파일에서 접근 불가 internal : 같은 모듈의 파일만 접근 가능 protected : private과 같으나 상속 받은 자식 클래스 접근 가능 public : 모든 파일에서 접근 가능 접근 제한자를 사용하지 않은 경우 일반적으로 public 적용됨. 제네릭 제네릭 : 입력되는 값의 타입을 자유롭게 사용하기 위한 설계도구. 이용 public interface MutableList { ..
[Kotlin] 함수, 클래스, 추상화, 인터페이스
함수 * 함수 형태 fun 함수명(파라미터: 타입): 반환 타입 { } 파라미터 , 반환값 없는 경우 안 써도 됨 * 코틀린에서 함수의 파라미터는 기본적으로 immutable 형태 (val)로 , 값의 변경 불가 클래스 * 생성자(constructor) primary / secondary 생성자로 구분 1. primary class Name (value: String) { init { ~~ } } init : 최초 수행되는 초기화 블록 value 부분이 val 형태면 클래스 스코프 전체에서 해당 파라미터 사용 가능 2. secondary class Name { constructor (value: String) { } constructor (value: Int) ..
[Kotlin] 반복문 주요 문법
* until : ~이전까지. 주로 index를 사용하는 코드에서 함께 사용 for (index in 0 until array.size) //array 내의 index 모두 순회 ** array 내 index 순회는 아래와 같은 방법이 더 편함 for (index in array) //array 내의 index 모두 순회 *step : n의 배수 등 반복문에서 일정 step에 맞게 loop 수행 for (index in 0 .. 100 step 3) Log : 0,3,6,9,....99 *downTo : 감소. step도 함께 쓸 수 있음 for (index in 10 downTo 0 step 3) Log : 10,7,4,1
[Kotlin] Array, List, Set, Map
array : 배열 , 정적 사이즈 할당 list : array와 달리 동적 사이즈 할당 , 값의 중복 가능 set : list와 달리 값의 중복 불가 map : swift의 dictionary와 같이 key, value의 쌍으로 이루어짐. key 값 중복 불가. 중복 시 value값이 변경됨 */ mutable : 엘리먼트 변경 가능 immutable : 엘리먼트 변경 불가능
안드로이드 개발자가 되기 위한 Android developer roadmap
https://github.com/MindorksOpenSource/android-developer-roadmap GitHub - MindorksOpenSource/android-developer-roadmap: Android Developer Roadmap - A complete roadmap to learn Android App Devel Android Developer Roadmap - A complete roadmap to learn Android App Development - GitHub - MindorksOpenSource/android-developer-roadmap: Android Developer Roadmap - A complete roadmap to learn Andr... gith..