└── 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 |
--------------------------------------------------------------------------------