분류 전체보기
-
Android) Clean Architecture 알아보기Android 2020. 12. 30. 20:10
저희는 개발자로 성장해가면서 여러 가지 기술들을 배우고 잘 짜여진 구조로 프로젝트에 적용하려고 노력합니다. 그 이유는 대표적으로 프로젝트의 유지보수를 쉽고 편하게 하기 위해서, 가독성, 성능을 높여주기 위해서라고 할 수 있습니다. 하지만 막상 구조의 변화가 있을때 잘 대응할 수 있을까에 대한 고민과 제대로 이해하며 사용하고 있는지에 확신이 들지는 않았습니다. 그래서 오늘은 잘짜여진 설계란 어떤 것인가와 어떤 이점이 있는지 알아보겠습니다. Clean Architecture 클린 아키텍처는 모바일부터 백엔드까지 모든 소프트웨어에 일반적으로 필요한 내용을 담고 있습니다. 각 계층을 어떻게 나누고 어떤 요소로 구성할 것인가에 대한 원칙들을 제시합니다. 가운데로 갈 수록 높은 수준, 바깥으로 갈수록 낮은 수준의 ..
-
Android) View Binding 알아보기, 바인딩 비교Android 2020. 12. 27. 15:24
View Binding은 왜 등장했을까? 오늘은 2019년 Google I/O에서 소개된 View Binding에 대해 알아보겠습니다. 현재까지 안드로이드에서 뷰에 접근할 수 있는 다양한 방법이 제공되었습니다. 위의 표에서 구글의 안드로이드 팀은 해당 방법들을 다음과 같은 세세 가지의 기준을 정해 비교했습니다. Elegance : 코드를 깔끔하게 작성할 수 있는지 Compile Time Safety : 컴파일 시간에 안전한지 Build Speed Impact : 빌드 속도가 빠른지 findViewById의 문제점 val textView = findViewById(R.id.txtView) 뷰의 개수대로 코드를 추가해줘야 합니다. (100개면 100줄을??) Null safety하지 못합니다. 잘못된 뷰 i..
-
Android) SavedStateHandle 알아보기Android 2020. 12. 22. 18:57
안드로이드에서 ViewModel을 사용하면, 화면 회전 같은 Configuration 변경의 경우 상태를 보존 할 수 있습니다. 그럼 ViewModel을 사용하면 액티비티 상태 유지가 가능한거 아닌가요? 네. 아래의 경우에는 ViewModel 만으로 상태 유지를 할 수 없습니다. 시스템에 의해서 Activity가 종료되는 경우 ViewModel도 함께 메모리에서 제거 되기 때문입니다. 사용자가 명시적으로 Activity를 종료한 케이스 Back(뒤로가기) 버튼 누른 경우 최근 앱 화면에서 앱을 밀어서 종료시킨 경우 상위 액티비티로 이동한 경우 설정화면에서 앱을 강제로 종료한 경우 finish() 메소드를 호출하여 Activity 종료한 경우 아래의 표는 시스템에 의해 Activity가 종료 되었을 경우 ..
-
Kotlin) lateinit과 lazy 특징과 차이점Kotlin 2020. 12. 22. 13:56
코틀린에서 변수 선언을 먼저하고 초기화를 지연하는 기능들인 lateinit과 lazy가 있습니다. 초기화를 지연하면 사용할지 모르는 데이터를 미리 초기화할 필요가 없기 때문에 성능 향상에 도움 됩니다. lateinit 변경 가능한 var에서만 사용할 수 있습니다. primitive type에 적용할 수 없습니다. (primitive type = In,t Boolean, Long, Double.. 코틀린에서 제공하는 기본적인 타입) nullable에서 사용할 수 없습니다. 필요할 때 지연했던 초기화를 초기화하고 사용 할 수 있습니다. 초기화 하지 않고 실행하게 되면 Exception이 발생합니다. lazy 변경 불가한 val에서만 사용할 수 있습니다. primitive type에 적용가능합니다. nulla..
-
Kotlin) 코틀린 inner 클래스 알아보기Kotlin 2020. 12. 18. 20:30
inner 클래스를 알아보기 이전에 중첩(nested) 클래스를 알아보는 것이 좋습니다. Nested Class(중첩 클래스) class OuterClass { class NestedClass { } } 위와 같이 외부 OuterClass 내부에 내부 클래스로 NestedClass가 있는 형태입니다. Static Nested Class(정적 중첩 클래스) 정적 중첩 클래스는 외부 클래스(OuterClass)의 지역변수에 접근이 불가능합니다. 외부에서 OuterClass의 NestedClass의 객체 생성이 가능합니다. fun main(args: Array) { val staticNested = OuterClass.StaticNestedClass() staticNested.printItems() } cla..
-
자료구조) 자료구조 힙(Heap) 알아보기 - Priority Queue자료구조 2020. 12. 17. 19:28
우선 메모리 구조의 힙(Heap)과는 별개의 개념입니다. Heap 우선순위 큐 - Priority Queue를 구현하기 위한 자료구조입니다. 우선순위의 데이터 검색과 삭제에 유용한 자료구조입니다. 우선순위 큐라고 해서 FIFO(First In First Out)의 큐와 비슷하다고 생각하시면 안됩니다. 기본적으로 Min Heap 과 Max Heap이 있습니다. Min Heap 이진 힙의 구현 방식에서 최솟값을 찾기 위한 구조입니다. 부모노드는 자식노드보다 값이 작거나 같습니다. 루트노드에 최솟값이 배정됩니다. Max Heap 이진 힙의 구현 방식에서 최댓값을 찾기 위한 구조입니다. 부모노드는 자식노드보다 값이 크거나 같습니다. 루트노드에 최댓값이 배정됩니다. Heap 구현 방식 기본적으로 Min Heap의..
-
Kotlin) 코틀린 infix 키워드 알아보기Kotlin 2020. 12. 15. 23:54
infix 두 개의 변수 가운데 오는 함수를 말합니다. 대표적으로 to 가 있습니다. to를 사용하여 key와 value가 매핑됩니다. 코드를 간결하고 가독성을 높게 만들어 줄 수 있습니다. Usage val numbersMap = mapOf("1" to "one", "2" to "two", "3" to "three") val numbersMap2 = mapOf(Pair("1", "one"), Pair("2", "two"), Pair("3", "three")) infix Fuction infix 키워드는 함수에서도 선언 가능합니다. infix fun dispatcher.함수 이름(receiver) : 리턴 타입 { 구현부 } 로 선언할 수 있습니다. dispatcher : infix 함수 전에 오는 객체..
-
Kotlin) 코틀린 Collection - List, Map, Set 사용법Kotlin 2020. 12. 15. 23:37
코틀린의 Collection 코틀린의 Collection은 Mutable(가변의), Immutable(불변의)을 제공합니다. Mutable은 데이터의 추가, 삭제가 가능합니다. Immutable은 데이터의 수정이 불가합니다. List 기본적으로 Immutable List의 listOf(Data) 형태와 Mutable List의 mutableListOf(Data) 형태로 선업합니다. 코틀린은 타입 추론을 하기 때문에 Type이 생략 가능합니다. (변수 타입 생략 가능) 또한 스마트 캐스팅을 통해 컴파일과 동시에 타입이 결정됩니다. (자동으로 타입 캐스팅) Usage // List val fruits = listOf("apple", "banana", "kiwi") println("fruits.size: $f..