└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # 시작하기 전에 2 | ### 아래 링크로 대체되었습니다 3 | ### https://asuhdevstory.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%8C%80%EB%B9%84 4 | ###
5 | # 안드로이드 개념적인 부분 6 | ## 안드로이드 4대 컴포넌트 7 | #### 액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(BroadCast Receiver), 콘텐트 프로바이더(Content Provider) 8 | #### 각각의 컴포넌트는 인텐트를 통해 상호작용 9 | ####
10 | 11 | ## Context란? 12 | #### 애플리케이션의 현재 상태를 나타내고 액티비티와 어플리케이션의 정보를 얻기 위해 사용할 수 있음 13 | #### 애플리케이션 context와 액티비티 context가 존재 14 | ####
15 | 16 | ## 애플리케이션 컨텍스트(Application Context)란? 17 | #### 싱글턴 인스턴스이며 액티비티에서 getApplicationContext()를 통해 접근 가능 18 | #### 애플리케이션 라이프 사이클과 연결돼 있음 19 | #### 현재의 컨텍스트와 분리된 라이프사이클을 가진 컨텍스트가 필요하거나 액티비티의 범위를 넘어서 컨텍스트를 전달할 때 사용 20 | ####
21 | 22 | ## 액티비티 컨텍스트(Activity Context)란? 23 | #### 액티비티에서 사용 가능 24 | #### 액티비티의 라이프사이클과 연결되어 있음 25 | #### 액티비티의 범위 내에서 컨텍스트를 전달 또는 라이프사이클이 현재의 컨텍스트에 붙은 컨텍스트가 필요할 때 사용 26 | ####
27 | 28 | ## 생명주기란? 29 | #### 상태 변화가 있을 때마다 화면에 보이는 액티비티의 생명 주기 메서드를 호출해서 상태 변화를 알려줌 30 | #### onCreate : 만들어 졌을 때 31 | #### onStart : 화면에 나타날 때 32 | #### onResume : 포커스가 떠난 후 다시 돌아올 때/ 현재 화면에 나타나 있을 때 33 | #### onPause : 화면의 일부가 가려질 때 34 | #### onStop : 완전히 가려졌을 때 35 | #### onDestroy : 종료됐을 때 36 | ####
37 | 38 | ## 의존성 주입이란? 39 | #### 의존관계를 외부에서 결정하고 주입하는 것 40 | ####
41 | 42 | ## 의존성 주입을 사용하는 이유 43 | #### Unit Test 용이 44 | #### 코드의 재활용성을 높여줌 45 | #### 객체간의 의존성을 줄이거나 없엘 수 있음 46 | #### 객체 간의 결합도가 낮아지고 유연한 코드 작성 가능 47 | ####
48 | 49 | ## XML이란? 50 | #### AndroidManifest.xml, Layout 파일, Resource 파일 등 다양한 곳에서 사용 51 | #### XML을 이용해 데이터를 쉽게 표현 52 | #### Android OS가 XML을 파싱하여 데이터를 구조화함 53 | ####
54 | 55 | ## Activity vs Fragment 비교 56 | #### **공통점** 57 | #### 둘 다 View를 표현해줌 58 | ####
59 | #### **차이점** 60 | #### Activity : 가장 바닥 역할을 함 61 | #### Fragment : 액티비티에 붙음 62 | ####
63 | 64 | ## Proguard란? 65 | #### 코드 난독화 툴 66 | ####
67 | 68 | ## 리플렉션이란? 69 | #### 런타임에 프로그램의 클래스를 조사하기 위해서 사용되는 기술 70 | ####
71 | 72 | ## 컴파일 타임, 런 타임 이란? 73 | #### 컴파일 타임은 작성된 소스코드를 기계어코드로 변환 되어 실행가능한 프로그램으로 만드는 과정 74 | #### 런 타임은 컴파일된 프로그램이 사용자에 의해 실행되어 동작할 때 75 | ####
76 | 77 | ## 컴파일, 빌드 란? 78 | #### 컴파일은 작성된 소스코드를 기계어코드로 변환 79 | #### 빌드는 컴파일한 후 실행파일로 만드는 과정 80 | ####
81 | 82 | ####
83 | # Kotlin 문법적인 부분 84 | ## 클래스란? 85 | #### 객체를 생성하기 위한 설계도 86 | ####
87 | 88 | ## 객체(인스턴스)란? 89 | #### 설계도(클래스)로 찍어낸 실체 90 | ####
91 | 92 | ## 추상화(abstract)란? 93 | #### 어떤 객체를 표현함에 있어 모든 것을 다 표현하는 것이 아니라 일정 부분 특징만을 표현 94 | #### 목적을 위해 필요한 부분만을 찾을 수 있음 95 | ####
96 | 97 | ## 불변성(Immutability)이란? 98 | #### 무언가가 변할 수 없다는 것을 의미함 99 | #### 불변 변수 -> 변경될 수 없는 변수 100 | #### val : 완전한 불변성 X 101 | #### const val : 완전한 불변성 102 | ####
103 | 104 | ## Collection이란? 105 | #### Generic으로 구현이 되어 다양한 타입과 함께 사용될 수 있음 106 | #### 데이터를 모아 관리와 사용을 편리하게 하기 위해 만들어진 프레임워크 107 | #### 기본적으로 Mutable(변경 가능 - 추가, 삭제 가능)과 Immutable(변경 불가능 - 수정 불가능)을 지원 108 | #### List, Set, Map 존재 109 | ####
110 | 111 | ## List vs Set vs Map 비교 112 | #### **공통점** 113 | #### 모두 Collection, 모두 Mutable과 Immutable을 지원 114 | ####
115 | #### **차이점** 116 | #### List : 중복 허용O, 순차적 117 | #### Set : 중복 허용X, 순차적이지 않은 집합 118 | #### Map : Key-Value 두 개로 구성된 페어로 나타냄, key 중복 불가능, value 중복 가능 119 | ####
120 | 121 | ## Kotlin DSL이란? 122 | #### DSL이란 특정 분야에 최적화된 프로그래밍 언어를 뜻함 123 | #### 상용구 코드(보일러 플레이트 코드)를 최소화 하기 위해 명령형 코드 대신 선언적 코드 형식을 따름 124 | #### 가독성이 좋고 간략한 코드를 사용하여 Gradle 스크립팅 함 125 | ####
126 | 127 | ## 람다식이란? 128 | #### 함수에 대한 이론적 기반을 세우는 수학적 추상화를 뜻함, 이것을 표현하면 람다표현식 129 | ####
130 | 131 | 132 | 133 | ####
134 | # 라이브러리 부분 135 | 136 | ## Retrofit이란? 137 | #### 서버와 클라이언트 간 http 통신을 위한 라이브러리 138 | #### OKhttp를 기반으로 만들어짐 139 | ####
140 | 141 | ## Okhttp란? 142 | #### RESP API, HTTP 통신을 간편하게 구현할 수 있도록 기능을 제공 143 | #### Retrofit의 베이스가 됨 144 | ####
145 | 146 | ## Okhttp vs Retrofit 비교 147 | #### 공통점 148 | #### 둘다 HTTP 클라이언트 라이브러리 149 | ####
150 | #### 차이점 151 | #### Retrofit : HTTP client 역할을 수행 152 | #### Okhttp : 통신을 하는동안 데이터를 전송 153 | ####
154 | 155 | ## Dagger hilt란? 156 | #### Dagger의 높은 러닝커브를 보안하고 초기 구축 비용을 절감하기 위해 탄생한 의존성 주입 라이브러리 157 | ####
158 | 159 | ## Koin이란? 160 | #### Kotlin DSL로 만들어짐 161 | #### Dagger에 비해 러닝커브가 낮음 162 | #### 리플렉션을 이용해 런타임에 오브젝트 그래프를 그려주기 때문에 앱 성능이 저하됨 163 | ####
164 | 165 | ## Jetpack Compose란? 166 | #### Native UI를 코드레벨로 구현할 수 있는 최신 툴킷 167 | #### 필요한 영역의 뷰를 다시 그려주는 방식으로 작업 168 | #### 코드 감소, 직관적, 빠른 개발 과정, 강력한 성능 등의 이점이 있음 169 | ####
170 | 171 | ## DataBinding이란? 172 | #### xml파일에 Data를 연결해서 사용할 수 있게 도와줌 173 | #### 글루코드(프로그램의 요구사항 구현에는 기여하지 않지만, 본래 호환성이 없는 부분끼리 결합하기 위해 작동하는 코드) 최소화 174 | ####
175 | 176 | ## ViewBinding이란? 177 | #### View와 상호 작용하는 코드를 쉽게 작성할 수 있는 기능 178 | ####
179 | 180 | ## Glide란? 181 | #### 이미지 로딩 라이브러리 182 | #### 어떤 종류의 이미지라도 빠르고 부드럽게 스크롤할 수 있게 하는 것이 목적 183 | #### 붙이기, 리사이즈, 디스플레이에 효과적 184 | ####
185 | 186 | ## Glide vs Picasso 비교 187 | #### 공통점 188 | #### 둘 다 이미지 로딩 라이브러리 189 | ####
190 | #### 차이점 191 | #### Picasso : Bitmap포맷을 ARGB_8888로 사용 (화질 좋음) 192 | #### Picasso : Bitmap포맷을 RGB_565를 사용 (메모리 용량 적음) 193 | #### Picasso는 1920x1080크기의 원본 이미지를 메모리로 가져와서 GPU에서 실시간으로 리사이징 194 | #### Glide는 바로 768x432크기로 메모리에 가져와서 ImageView로 할당 시키기때문에 메모리 사용량이 적음 195 | ####
196 | 197 | ## AAC란? 198 | #### 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음 199 | ####
200 | 201 | ## MVVM ViewModel vs AAC ViewModel 비교 202 | ### 차이점 203 | #### MVVM ViewModel : View와 Model 사이에서 데이터를 관리해주고 바인딩 해주는 역할 204 | #### AAC ViewModel : 수명 주기를 고려하여 UI 관련 데이터를 저장하고 관리 205 | ####
206 | 207 | 208 | 209 | 210 | ####
211 | # 디자인 패턴, 아키텍처 부분 212 | 213 | ## 싱글톤 패턴이란? 214 | #### 해당 클래스에 한 개의 인스턴스만을 갖게하고 전역 범위에서 이 인스턴스에 접근해 사용 215 | ####
216 | 217 | ## MVVM 디자인 패턴이란? 218 | #### MVP에서 파생됨 219 | #### 모델 - 뷰 - 뷰모델 각각의 기능에 따라 분리하여 코드를 작성 220 | ####
221 | #### 개념적인 의미 222 | #### Model : 데이터와 데이터에 관련된 행위를 모두 합쳐 Model 이라 부름 223 | #### View : 사용자에게 화면으로 보여지는 모든 구조, 레이아웃을 의미 224 | #### ViewModel : View 의 추상화된 형태, View 에 보여져야하는 데이터와 명령들을 가지고 있음 225 | ####
226 | #### 안드로이드에서의 의미 227 | #### Model : Network, DB, SharedPreferences 등 다양한 Data Source 로부터 필요한 데이터를 준비 228 | #### View : Activity, Fragment, CustomView, Dialog, Toast, Snackbar, Menu 등의 UI 컴포넌트 229 | #### ViewModel : View 와 Model 사이의 매개체 역할을 함 230 | ####
231 | 232 | ## MVP 디자인 패턴이란? 233 | #### 모델 - 뷰 - 프레젠터로 구성 234 | #### UI(View)와 로직(Model)을 분리하고 서로 간에 상호작용을 다른 객체(Presenter)에 그 역할을 줌으로써, 서로의 영향(의존성)을 최소화하는 것 235 | #### MVC와 다르게 코드가 깔끔해짐 236 | #### Model과 View의 결합도가 낮아 확장성이 개선됨 237 | #### 어플리케이션이 복잡해질수록 View와 Presenter 사이의 의존성이 강해지는 문제가 있음 238 | ####
239 | #### 개념적인 의미 240 | #### Model : 프로그램 내부적으로 쓰이는 데이터를 저장하고, 처리하는 역할(비즈니스 로직) 241 | #### View : UI를 담당 (Activity, Fragment 등) 242 | #### Presenter : Model과 View사이의 매개체, 인터페이스를 통해 상호작용 243 | ####
244 | 245 | ## MVC 디자인 패턴이란? 246 | #### 모델 - 뷰 - 컨트롤러로 구성 247 | #### 컨트롤러와 View는 1:n 구조 248 | #### 컨트롤러는 View를 선택할 뿐 직접 업데이트 하지는 않음 (View는 컨트롤러를 모름) 249 | #### View와 Model 사이의 의존성이 높아 유지보수가 어려움 250 | ####
251 | #### 개념적인 의미 252 | #### Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다. 253 | #### View : UI를 담당 (Activity, Fragment 등) 254 | #### Controller : 사용자의 입력(Action)을 받고 처리하는 부분 255 | ####
256 | 257 | 258 | 259 | 260 | ####
261 | # 코루틴(Coroutine) 부분 262 | ## Coroutine이란? 263 | #### 안드로이드에서 비동기처리를 도와주는 라이브러리 264 | #### 쓰레드에 비해 굉장히 가벼움 265 | ####
266 | 267 | ## Coroutine vs Thread 비교 268 | ### 공통점 269 | #### 동시성 (Interleaving) 를 보장하기 위한 기술 270 | ####
271 | ### 차이점 272 | #### Coroutine : 각 작업에 대해 Object 를 할당/ 프로그래머의 코딩을 통해 Switching 시점을 마음대로 정함/ 하나의 스레드에서 여러 Object를 사용하기 때문에 가벼움 273 | #### Thread : 각 작업에 대해 Thread 를 할당/ OS Kernel 에 의한 Context Switching을 함/ 각각의 스레드를 할당하기 때문에 Stack이 늘어나 무거움 274 | ####
275 | 276 | ## 동기 vs 비동기 비교 277 | #### 동기 : 결과가 주어질 때까지 아무것도 못하고 대기(호출된 함수의 수행 결과 및 종료를 호출한 함수가 신경씀) 278 | #### 비동기 : 결과가 주어지는데 시간이 걸리더라도 걸리는 시간 동안 다른 작업을 할 수 있음(호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리) 279 | ####
280 | 281 | ## Blocking vs Non-blocking 비교 282 | #### Blocking : 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고 있고 호출한 함수에게 바로 돌려주지 않음 283 | #### Non-blocking : 호출된 함수가 자신이 할 일을 다 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른 일을 진행할 수 있도록 해 284 | ####
285 | 286 | ## Blocking vs 동기, Non-blocking vs 비동기 비교 287 | #### 서로 비슷하지만 다름(위에 정리된 내용 참고) 288 | ####
289 | 290 | ## launch vs async 비교 291 | ### 공통점 292 | #### Main Thread 를 Unblocking 한 채 { } 구문 내 작업을 수행 293 | ####
294 | ### 차이점 295 | #### launch : 반환값 없음 296 | #### async : 반환값이 존재(Deferred) 297 | ####
298 | 299 | ## join vs await 비교 300 | ### 공통점 301 | #### 작업이 끝날 때까지 현재 코루틴에게 기다리라고 명령하는 함수 302 | ####
303 | ### 차이점 304 | #### join : Job(launch) 타입에서 사용 305 | #### await : Deferred(async) 타입에서 사용 306 | ####
307 | --------------------------------------------------------------------------------