

์ ๊ฐ ๋ณด๋ ค๊ณ ๋ง๋ค์์ต๋๋ค. ๊ณ์ ๋ด์ฉ์ด ์ถ๊ฐ๋ ์์ ์ ๋๋ค.
์๋ชป๋ ๋ด์ฉ์์ผ๋ฉด ์ธ์ ๋ ์ง ๋งํด์ฃผ์ธ์!!
์๋๋ก์ด๋ 4๋ ๊ตฌ์ฑ ์์
์กํฐ๋นํฐ, ์๋น์ค, ๋ธ๋ก๋์บ์คํธ ๋ฆฌ์๋ฒ(BR), ์ฝํ ์ธ ํ๋ก๋ฐ์ด๋(CP)
- ์กํฐ๋นํฐ - UIํ๋ฉด์ ๋ด๋นํ๋ ์ปดํฌ๋ํธ
- ์๋น์ค - ํ๋ฉด์ ๋ณด์ด์ง ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ฒ๋ฆฌํ ์์์
- ๋ธ๋ก๋์บ์คํธ ๋ฆฌ์๋ฒ - ์์คํ ๋จ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ์ฑ์์ ๋ฐ์ ์ฒ๋ฆฌํจ, ์ ์ (๋งค๋ํ์คํธ ๋ฑ๋ก), ๋์ ์ผ๋ก ๋๋๋ค.
- ์ฝํ ์ธ ํ๋ก๋ฐ์ด๋ - ์ฑ ๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ๊ด๋ฆฌ - URI๋ฅผ ์ฌ์ฉํ๋ค.
์กํฐ๋นํฐ, ํ๋๊ทธ๋จผํธ, AAC ViewModel, ์๋น์ค์ ์๋ช ์ฃผ๊ธฐ




๋ค๋ฅธ๊ฑด ๋ค ์ ์๊ณ ์๊ณ ์๋น์ค์ ๊ฒฝ์ฐ๊ฐ ์กฐ๊ธ ์ด๋ ต๋ค.
Unbound
์๋น์ค: ์๋น์ค๊ฐ ์์๋๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ธ๋ฉ๋์ง ์์๋ ์์ ์ ๋ง์น๊ฑฐ๋ ์์คํ ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ช ์์ ์ผ๋ก ์ค์งํ ๋๊น์ง ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ค.Bound
์๋น์ค: ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค์ ๋ฐ์ธ๋ฉ๋์ด์ผ ์ํธ์์ฉํ ์ ์์ผ๋ฉฐ, ํ๋ ์ด์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ธ๋ฉ๋์ด ์๋ ๋์ ์๋น์ค๊ฐ ๊ณ์ ์คํ๋๊ณ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ธ๋ฉ์ ํด์ ํ๋ฉด ์๋น์ค๋ ์ข ๋ฃ๋ ์ ์๋ค.
๋ ์ํ์ ๋ฐ๋ผ์ ์์ฑ ์ดํ ๋ฉ์๋๊ฐ onStartCommand
์ผ์ง, onBind(ํด๋ผ์ด์ธํธ๊ฐ ์์ผ๋ฉด onUnbind)
์ผ์ง ๊ฐ๋ฆฐ๋ค.
ViewModel๊ณผ Jetpack์ AAC ViewModel์ ์ด๋ค ์ฐจ์ด?
ViewModel
- ViewModel์ MVC, MVP, MVVM ๋ฑ ๋ค์ํ ์ํคํ ์ฒ ํจํด์์ ์ฌ์ฉ๋๋ ํ๋ ์ ํ ์ด์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค.
- ์ฃผ๋ก UI ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ํ๋ฉด์ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํ๋ฉด ํ์ ๋ฑ์ผ๋ก ์ธํด ์กํฐ๋นํฐ๊ฐ ๋ค์ ์์ฑ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๋ ์ญํ ์ ํ๋ค.
- ํน์ง์ ํน์ ํ๋ซํผ์ ์ข ์๋์ง ์๊ณ , UI์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๋ ๋ฐ ์ง์คํ๋ค.
Jetpack AAC ViewModel
- Jetpack์ AAC(ViewModel)๋ Android Jetpack์ Architecture Component์ ์ผ๋ถ๋ก, Android ์ฑ์ ์๋ช ์ฃผ๊ธฐ์ ๊ธด๋ฐํ๊ฒ ํตํฉ๋ ViewModel์ด๋ค.
- Android์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, ํ๋ฉด ํ์ ์ด๋ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์์๋ ์กํฐ๋นํฐ๋ ํ๋๊ทธ๋จผํธ๊ฐ ์๋ฉธ๋์ง ์๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๋ค.
- ํน์ง์ ์กํฐ๋นํฐ๋ ํ๋๊ทธ๋จผํธ์ ์๋ช ์ฃผ๊ธฐ์ ๋ง์ถฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ฉด์๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค๋ ์ ์ด๋ค.
- AAC ViewModel์ ViewModelProviders๋ Hilt์ ๊ฐ์ DI ํ๋ ์์ํฌ๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฃผ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ฐ๋ผ์, ViewModel์ ๋ค์ํ ์ํคํ ์ฒ์์ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ด๋ผ๋ฉด, Jetpack AAC ViewModel์ Android์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ์ฌ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์์๋ UI ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ํนํ๋ ๊ตฌํ์ด๋ค.
์กํฐ๋นํฐ์ ํ๋๊ทธ๋จผํธ์ ์ฐจ์ด?
๊ฐ ์กํฐ๋นํฐ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ณ , ๋ค๋ฅธ ์กํฐ๋นํฐ๋ก ์ ํํ ๋์๋ ์ธํ ํธ๋ฅผ ํตํด์ผ ํ๋ค.
ํ๋๊ทธ๋จผํธ๋ ํ๋์ ์กํฐ๋นํฐ ์์์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ํ๋ฉด์ ์๋ฏธํ๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์๊ณ ํญ์ ์กํฐ๋นํฐ ๋ด์ ํธ์คํ ๋์ด์ผ ํ๋ค.
ํ๋๊ทธ๋จผํธ๊ฐ ํธ๋์ญ์ ์ ์ฌ์ฉํ ๋๋, ํ๋๊ทธ๋จผํธ ๋งค๋์ ๋ฅผ ์ฌ์ฉํ๋๋ฐ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์๋์ ๊ฐ๋ค.

- Host Activity (ํธ์คํธ ์กํฐ๋นํฐ)
- FragmentActivity: ํ๋๊ทธ๋จผํธ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์กํฐ๋นํฐ๋ค. ์กํฐ๋นํฐ๋ ์์ ์ supportFragmentManager๋ฅผ ์ฌ์ฉํ์ฌ ํ๋๊ทธ๋จผํธ๋ฅผ ๊ด๋ฆฌํ๋ค.
- supportFragmentManager: ์กํฐ๋นํฐ์ ํ๋๊ทธ๋จผํธ๋ค์ ๊ด๋ฆฌํ๋ค. ์กํฐ๋นํฐ๊ฐ ์์ฑ๋ ๋ ์ด๊ธฐํ๋๋ฉฐ, ์กํฐ๋นํฐ(ํธ์คํธ) ๋ด์์ ํ๋๊ทธ๋จผํธ์ ์ถ๊ฐ, ์ ๊ฑฐ, ๊ต์ฒด ๋ฑ ํธ๋์ญ์ ์์ ์ ์ํํ ์ ์๋ค.
- Host Fragment (ํธ์คํธ ํ๋๊ทธ๋จผํธ)
- Fragment: ํ๋๊ทธ๋จผํธ๋ ๋ ๋ค๋ฅธ ํ๋๊ทธ๋จผํธ๋ฅผ ํฌํจํ ์ ์๋ค. ์ด๋ฐ ํ๋๊ทธ๋จผํธ๋ ํธ์คํธ ํ๋๊ทธ๋จผํธ๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ์์ ์parentFragmentManager(ํธ์คํธ์ ๋งค๋์ )์ childFragmentManager(ํธ์คํธํด์ค ๋งค๋์ )๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- parentFragmentManager: ํธ์คํธ ํ๋๊ทธ๋จผํธ๊ฐ ํฌํจ๋ ์กํฐ๋นํฐ๋ ์์ ํ๋๊ทธ๋จผํธ์ FragmentManager๋ค.
- childFragmentManager: ํ๋๊ทธ๋จผํธ ์์ ํฌํจ๋ ์์ ํ๋๊ทธ๋จผํธ๋ฅผ ๊ด๋ฆฌํ๋ค. ํ๋๊ทธ๋จผํธ ๋ด์์ ๋ค๋ฅธ ํ๋๊ทธ๋จผํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ด๋ฆฌํ ์ ์๋ค.
- Child Fragment (์์ ํ๋๊ทธ๋จผํธ)
์์ ํ๋๊ทธ๋จผํธ๋ ํธ์คํธ ํ๋๊ทธ๋จผํธ์ ์ํ ํ๋๊ทธ๋จผํธ๋ค. parentFragmentManager๋ฅผ ํตํด ์์ ํธ์คํธ ํ๋๊ทธ๋จผํธ์ ์ฐ๊ฒฐ๋๋ค.
๊ทธ๋ผ Intent๋?
์ปดํฌ๋ํธ(4๋ ์ปดํฌ๋ํธ ๋ชจ๋ ํฌํจ) ๊ฐ์ ์์
์ ์ํํ๋๋ก ์์ฒญํ๋ ๋ฉ์์ง ๊ฐ์ฒด์ด ๋ช
์์ , ์์์ ์ธํ
ํธ๋ก ๋๋๋ค.
๋ช
์์ Intent๋ ๋ช
ํํ๊ฒ ์์ํ ์ปดํฌ๋ํธ๋ ์กํฐ๋นํฐ๋ฅผ ์ง์ ํ๋ ๊ฒ,
์์์ Intent๋ ํน์ ์ก์
์ ์ํํ ์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์ ์คํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.(urlScheme๊ณผ ๊ฐ์)
์์์ Intent๋ Intent filter๋ฅผ ์ฌ์ฉํด์ ์ ์ดํ ์ ์๋ค.
> PendingIntent
๋ ์๋ค.
Intent๋ฅผ ๊ฐ๋ ํด๋์ค๋ก, ๊ธฐ๋ณธ ๋ชฉ์ ์ ๋ค๋ฅธ ํ๋ก์ธ์ค(์ ํ๋ฆฌ์ผ์ด์
)์ ๊ถํ์ ํ๊ฐํ์ฌ ๊ฐ์ง๊ณ ์๋ Intent๋ฅผ ๋ง์น ๋ณธ์ธ ์ฑ์ ํ๋ก์ธ์ค์์ ์คํํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. Notification ์ค์ ํ ๋ ๋ดค์ ๊ฒ์ด๋ค.
Notification์ ํด๋ฆญํด์ ๊ทธ ์ฑ์ผ๋ก ์ด๋ํ๋ ๊ฑด, ๋ค๋ฅธ ํ๋ก์ธ์ค์์ PendingIntent๋ฅผ ์ฌ์ฉํด์ NotificationManager๋ก ํ์ฌ๊ธ ์ฑ์ ์คํ์ํค๋ ๊ฒ์ด๋ค.
์๋น์ค๋?
- ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค - ์๋ฆผ์ ํ์ํด ๋๊ณ ์ฌ์ฉ์์ ์ํธ ์์ฉํ์ง ์์๋ ๊ณ์ ์คํ๋๋ ๊ฑธ ๋งํจ(์์ ํ๋ ์ด์ด ๊ฐ์)
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค - ์ฌ์ฉ์๊ฐ ์ง์ ์์ง ๋ชปํ๋ ์์ ์ ์ํํ ๋ ์ฌ์ฉ
- ๋ฐ์ด๋ ์๋น์ค - ์ฑ ๋ด์์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ํด๋ผ์ด์ธํธ - ์๋ฒ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋งํจ(ํน์ ์ปดํฌ๋ํธ์ ์๋น์ค๊ฐ ์ํธ์์ฉ) -> onBind, onUnbind๊ฐ ํธ์ถ๋๋
์ต์ 3๊ฐ๊ฐ ์๋ค.
START_STICKY
- ์๋๋ก์ด๋๊ฐ ์๋น์ค๋ฅผ ๊ฐ์ ์ค์งํ ๊ฒฝ์ฐ, null intent๋ฅผ ๋ณด๋ด์ ์ฌ์์ํ๋ค.START_NOT_STICKY
- ์๋๋ก์ด๋๊ฐ ์๋น์ค๋ฅผ ๊ฐ์ ์ค์งํ ๊ฒฝ์ฐ, ์ฌ์์ ํ์ง ์๋๋ค.START_REDELIVER_INTENT
- ์๋๋ก์ด๋๊ฐ ์๋น์ค๋ฅผ ๊ฐ์ ์ค์งํ ๊ฒฝ์ฐ, ์ด์ ๊ณผ ๋์ผํ intent๋ฅผ ๋ณด๋ด์ ์ฌ์์ํ๋ค.
๋์์ธ ํจํด? - MVC, MVP, MVVM
๋์์ธ ํจํด์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ๋์ ๋, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ค๊ณ๋ฅผ ์๋ฏธํ๋ค.
- MVC - ๋ชจ๋ธ - ๋ทฐ - ์ปจํธ๋กค๋ฌ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๋ชจ๋ธ, UI๋ฅผ ๋ด๋นํ๋ ๋ทฐ, ์ด๊ฑธ ์ฐ๊ฒฐํ๋ ์ปจํธ๋กค๋ฌ๋ก ๊ตฌ์ฑ๋๋ค.
- MVP - ๋ทฐ์ ๋ชจ๋ธ ์ฌ์ด์ ํ๋ ์ ํฐ๋ฅผ ๋ฌ์ M-V ๊ฐ์ ์ง์ ์ฐ๊ฒฐ์ ๋๊ณ , ๋ทฐ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ๋ ์ญํ ์ ํ๋ค. MVC์ ์งํ
- MVVM - ๋ทฐ์ ๋ชจ๋ธ ์ฌ์ด์ ๋ทฐ ๋ชจ๋ธ์ด ์๋ ๊ตฌ์กฐ๋ก, ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด ๋ทฐ์ ๋ทฐ๋ชจ๋ธ์ด ์ ๋ฐ์ดํธ ๋๋ ๋ฐฉ์. ๋ทฐ ๋ชจ๋ธ์ด ์ค๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ด๋นํ๊ณ ๋ทฐ๋ ์ด๋ฒคํธ๋ง ๋ฐ๋ ๋ฐฉ์์ ์ ์ฉํ์ฌ, ๋ทฐ์ ๋ชจ๋ธ ์ฌ์ด์ ์์กด์ฑ์ ๋ฎ์ถ ์ ์๋ค.
๋ ๊ฑฐ์ ๋๋น - AsyncTask๊ฐ ๋ฌด์์ธ์ง? ์ฌ์ฉ์ ๋จ์ ์?
AsyncTask๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ UI ์ค๋ ๋์์ ์ฝ๊ฒ ์
๋ฐ์ดํธํ ์ ์๋๋ก ์ค๊ณ๋ ํด๋์ค์ด๋ค.
Android 11(API ๋ ๋ฒจ 30)์์ Deprecated๋์ด, ์ฝ๋ฃจํด, WorkManager, Handler๊ณผ ๊ฐ์ ๋์์ ์ฌ์ฉํ๋ค.
๋จ์ ์ผ๋ก๋ ์๋์ ๊ฐ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์ (Memory Leaks):
AsyncTask๋ ์กํฐ๋นํฐ์ ํ๋๊ทธ๋จผํธ์์ ์์ฃผ ์ฌ์ฉ๋์๋๋ฐ, ๋ง์ฝ ์กํฐ๋นํฐ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋๊ฑฐ๋ ์๋ฉธ๋๋ ๋์ AsyncTask๊ฐ ๊ณ์ ์คํ ์ค์ผ ๊ฒฝ์ฐ, ์กํฐ๋นํฐ๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ์ํด ์์ง๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค. - ์ทจ์ ๋ฐ ์ค๋จ์ ์ด๋ ค์:
AsyncTask๋ cancel() ๋ฉ์๋๋ฅผ ํตํด ์์ ์ ์ทจ์ํ ์ ์์ง๋ง, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ด ์ด๋ฏธ ์งํ ์ค์ธ ๊ฒฝ์ฐ, ์์ ์ด ์ค๋จ๋์ง ์๊ณ ๊ณ์ ์งํ๋๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค.cancel(true)
๋ฅผ ํธ์ถํ๋ฉด,isCancelled()
๊ฐ์ด true๋ก ์ค์ ๋์ง๋ง, ์ค์ ๋ก ์คํ ์ค์ธ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๊ฐ์ ๋ก ์ค๋จํ์ง ์์. -> ํ๋๊ทธ๋ง ๋ฐ๊พผ๋ค.
์ฆ, ๊ฐ๋ฐ์๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ด๋ถ์์ ์ทจ์ ์์ฒญ์ ํ์ธํ๊ณ ์ฒ๋ฆฌํด์ผ ํ๋ค.Thread.interrupt()
๋ก ์ง์ ๊บผ๋ฒ๋ ค์ผํ๋ค. - ์์
๊ด๋ฆฌ์ ์ด๋ ค์:
๋น๋๊ธฐ ์์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์คํ ์ค์ธ ์์ ์ ์ ์ ํ ์ทจ์ํ๋ ๊ฒ์ ์์์ ๋งํ๋ฏ AsyncTask์์ ์ง์ ์ ์ผ๋ก ์ง์๋์ง ์์์, ์ฌ๋ฌ AsyncTask๊ฐ ๋์์ ์คํ๋๊ฑฐ๋ ์ฐ์์ ์ผ๋ก ์คํ๋ ๋๋ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค. - ThreadPool ์ ํ:
AsyncTask๋ ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ํ์ ์ฌ์ฉํ๋๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์ค๋ ๋ ํ์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋ง์ AsyncTask๋ฅผ ๋์์ ์คํํ ๊ฒฝ์ฐ ์ค๋ ๋ ํ์ ๋๊ธฐ์ด์ ์์ฌ ์์ ์ด ์ง์ฐ๋ ์ ์์๋ค. - ์์
์์ ๋ถํ์ค์ฑ:
AsyncTask๋ Android 3.0(Honeycomb) ์ดํ๋ก execute()๋ฅผ ํธ์ถํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง๋ ฌ ์คํ๋์์ง๋ง, ์ด์ ๋ฒ์ ์์๋ ๋ณ๋ ฌ ์คํ์ด ๊ธฐ๋ณธ๊ฐ์ด์๋ค. ์ด๋ก ์ธํด ๋์์ด ๋ฒ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ก๊ณ , ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก executeOnExecutor()๋ฅผ ํธ์ถํ์ฌ ๋ณ๋ ฌ ์คํ์ ๋ช ์ํด์ผ ํ๋ค. ์์ ์ฑ์ด ๋จ์ด์ง๋ค๋ ๋ง.
๋์์ผ๋ก ์ฌ์ฉ๋๋ WorkManager๋ JetPack์ ํฌํจ๋ Android์ ์๋ก์ด ์์ ์ค์ผ์ค๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ํนํ, ๊ธด ์๊ฐ ์คํ๋๊ฑฐ๋ ๋คํธ์ํฌ์ ์์กดํ๋ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๋ค. ์์ ์ด ์ทจ์๋์๊ฑฐ๋ ์ฅ์น๊ฐ ์ฌ๋ถํ ๋ ๊ฒฝ์ฐ์๋ ์์ ์ ๋ค์ ์์ํ ์ ์๋๋ก ์ค๊ณ๋์ด ์๋ค.
์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉํด๋ดค๋์ง? ์ ์ผ๋์ง?
์์กด์ฑ ์ฃผ์ (Dependency Injection, DI)์ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก, ์ฝ๋์ ์ ์ง๋ณด์์ฑ, ํ ์คํธ ์ฉ์ด์ฑ, ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
์ ๋ Hilt๋ฅผ ์ฌ์ฉํ๋๋ฐ, Hilt๋ Google์ด ๊ด๋ฆฌํ๋ Android ํนํ DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ณต์กํ ์ค์ ์์ด DI๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ์ฅ์ ์ด ์๋ค.Dagger์ ๋นํด ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ๋ํญ ์ค์ฌ์ฃผ๊ณ , ๋ช ์์ ์ธ ์ปดํฌ๋ํธ ์ค์ ์์ด๋ ๊ฐํธํ๊ฒ ์์กด์ฑ์ ์ฃผ์ ํ ์ ์๋ค.
Hilt | Dagger | |
์ค์ ๋ณต์ก๋ | ๊ฐ๋จํจ, ์๋ ์ปดํฌ๋ํธ ์ค์ | ๋ณต์กํจ, ์๋ ์ปดํฌ๋ํธ ์ค์ |
๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ | ์ ์ | ๋ง์ |
Android ํนํ | Android์ ์ต์ ํ๋จ | Android ํนํ ์๋, Dagger-Android ํ์ |
์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ | Android ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ์๋ํ | ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ์๋ ์ค์ ํ์ |
ํ ์คํธ ์ฉ์ด์ฑ | Hilt ํ ์คํธ ๋ชจ๋ ์ ๊ณต, ๊ฐํธํ ํ ์คํธ ์์ฑ | ํ ์คํธ์ฉ ์ปดํฌ๋ํธ/๋ชจ๋์ ์๋์ผ๋ก ์ค์ ํด์ผ ํจ |
์ฌ์ฉ์ฑ | Android ํ๋ก์ ํธ์ ์ต์ ํ | ๋ค์ํ ํ๊ฒฝ์์ ์ฌ์ฉ ๊ฐ๋ฅ |
๋น๋ ์๋ | ์๋์ ์ผ๋ก ๋น ๋ฆ | ์ปดํฌ๋ํธ๊ฐ ๋ณต์กํ ๊ฒฝ์ฐ ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ |
Jetpack Navigation์์ popUpTo์ popUpToInclusive ์ฐจ์ด
popUpTo
- popUpTo๋ ์ญ๋ฐฉํฅ ํ์ ์ ๋ฐฑ ์คํ์์ ํน์ ๋ชฉ์ ์ง๊น์ง์ ํ๋๊ทธ๋จผํธ๋ฅผ ์ ๊ฑฐํ๋ ์์ฑ์ด๋ค.
- ์ด ์์ฑ์ ํ์ํ ๋ ํน์ ๋ชฉ์ ์ง ์ดํ์ ์๋ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๋ฅผ ๋ฐฑ ์คํ์์ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, popUpTo="@+id/destination_home"๋ก ์ค์ ํ๋ฉด destination_home ๋ชฉ์ ์ง๊น์ง ์ญ๋ฐฉํฅ์ผ๋ก ํ์ํ๋ฉฐ, destination_home ์ดํ์ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๊ฐ ์ ๊ฑฐ๋๋ค.
- destination_home ์์ฒด๋ ๋ฐฑ ์คํ์ ๋จ์ ์์ด, ์ฌ์ ํ ๊ทธ ํ๋๊ทธ๋จผํธ๋ก ๋์๊ฐ๊ฒ ๋๋ค.
popUpToInclusive
popUpToInclusive
๋popUpTo
์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ์ง์ ๋ ๋ชฉ์ ์ง ์์ฒด๋ฅผ ๋ฐฑ ์คํ์์ ์ ๊ฑฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ์ด๋ค.- ๊ธฐ๋ณธ๊ฐ์ false๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ์ด๋๋ popUpTo๋ก ์ง์ ๋ ๋ชฉ์ ์ง ์์ฒด๋ ๋ฐฑ ์คํ์์ ์ ๊ฑฐ๋์ง ์๊ณ ๋จ์ ์๋ค.
popUpToInclusive="true"
๋ก ์ค์ ํ๋ฉด, ์ง์ ๋ ๋ชฉ์ ์ง๋ ํฌํจํ์ฌ ๋ฐฑ ์คํ์์ ์ ๊ฑฐ๋๋ค.- ์๋ฅผ ๋ค์ด,
popUpTo="@+id/destination_home" popUpToInclusive="true"
๋ก ์ค์ ํ๋ฉด,destination_home
๊ณผ ๊ทธ ์ดํ์ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๊ฐ ์ ๊ฑฐ๋๋ค.
๋ฐ๋ผ์, popUpTo
๋ ํน์ ๋ชฉ์ ์ง ์ดํ์ ํ๋๊ทธ๋จผํธ๋ฅผ ์ ๊ฑฐํ๊ณ , popUpToInclusive
๋ ๊ทธ ์ง์ ๋ ๋ชฉ์ ์ง ์์ฒด๋ ์ ๊ฑฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ์ด๋ค.
์ข ๋ ๋ถ์ฐ์ค๋ช ํ๋ฉด,
- ๋ค๋น๊ฒ์ด์ ๊ทธ๋ํ๊ฐ A -> B -> C -> D ๋ผ๊ณ ๊ฐ์ ํ์.
- ์ฌ๊ธฐ์ D์์ A๋ก ๋์๊ฐ๋ฉด์ B์ C๋ฅผ ๋ฐฑ์คํ์์ ์ ๊ฑฐํ๋ ค๋ฉด popUpTo="B"์ ํจ๊ป popUpToInclusive=true๋ฅผ ์ค์ ํ๋ฉด ๋๋ค. ๊ทธ๋ผ ๋ชฉ์ ์ง์ธ B๋ก ๊ฐ ๋, B๋ ๋ ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ทธ ์ ์ backstack์ธ A๋ง ๋จ๊ณ B, C, D๊ฐ ๋ฐฑ์คํ์์ ๋ชจ๋ ์ ๊ฑฐ๋๋ค.
popUpTo | popUpToInclusive | |
๊ธฐ๋ฅ | ๋ฐฑ ์คํ์์ ํน์ ๋ชฉ์ ์ง๊น์ง์ ํ๋๊ทธ๋จผํธ๋ฅผ ์ ๊ฑฐํ์ง๋ง, ์ง์ ๋ ๋ชฉ์ ์ง ์์ฒด๋ ๋จ๊ฒจ๋ | ๋ฐฑ ์คํ์์ ํน์ ๋ชฉ์ ์ง์ ๊ทธ ์ดํ์ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๋ฅผ ์ ๊ฑฐํ๋ฉฐ, ์ง์ ๋ ๋ชฉ์ ์ง ์์ฒด๋ ์ ๊ฑฐํจ |
๋์ ๋ฐฉ์ | ์ง์ ๋ ๋ชฉ์ ์ง๊น์ง์ ๊ฒฝ๋ก์์ ๊ทธ ๋ชฉ์ ์ง ์ดํ์ ํ๋๊ทธ๋จผํธ๋ง ์ ๊ฑฐํจ | ์ง์ ๋ ๋ชฉ์ ์ง๋ฟ๋ง ์๋๋ผ ๊ทธ ์ด์ ์ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๋ฅผ ํจ๊ป ์ ๊ฑฐํจ |
์ฌ์ฉ ์์ | popUpTo="@+id/home": home ๋ชฉ์ ์ง ์ดํ์ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๋ฅผ ์ ๊ฑฐํ๊ณ home์ ๋จ๊ฒจ๋ | popUpTo="@+id/home" popUpToInclusive="true": home๊ณผ ๊ทธ ์ดํ์ ๋ชจ๋ ํ๋๊ทธ๋จผํธ๋ฅผ ํจ๊ป ์ ๊ฑฐํจ |
์ฌ์ฉ ๋ชฉ์ | ํน์ ๋ชฉ์ ์ง ์ดํ์ ๋ฐฑ ์คํ์ ์ ๋ฆฌํ๊ณ , ์ง์ ๋ ๋ชฉ์ ์ง๋ก ๋์๊ฐ๊ธฐ ์ํด ์ฌ์ฉ | ํน์ ๋ชฉ์ ์ง ์์ฒด๋ ์ ๊ฑฐํ์ฌ, ๊ทธ ์ด์ ์ ํ๋๊ทธ๋จผํธ๋ก ๋์๊ฐ๊ฑฐ๋ ์๋ก์ด ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉ |
Dispatchers์ ์ข ๋ฅ์ ํน์ง?
- Dispatchers.Main: UI ๊ด๋ จ ์์ (๋ฉ์ธ ์ค๋ ๋).
- Dispatchers.IO: ๋คํธ์ํฌ, ํ์ผ ์ ์ถ๋ ฅ ์์ (I/O ๋ฐ์ด๋ ์์ ).
- Dispatchers.Default: CPU ์ง์ฝ์ ์ธ ์์ (CPU ๋ฐ์ด๋ ์์ ).
- Dispatchers.Unconfined: ํน์ ์ค๋ ๋์ ์ฝ๋งค์ด์ง ์์ผ๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ ์คํ ์ค๋ ๋๊ฐ ๋ฌ๋ผ์ง.
๋๊ธฐ ๋น๋๊ธฐ, Blocking Non-Blocking
๋๊ธฐ์ ๋น๋๊ธฐ๋ ์์ ์ ์์ฐจ์ฑ๊ณผ ๋๊ธฐ ์ํ์ ๋ํ ์ฐจ์ด๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ธ๋กํน๊ณผ ๋๋ธ๋กํน์ ์์ ์ค ๋๊ธฐ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋ ๊ฐ๋ ์ด๋ค.
๋๊ธฐ(Synchronous)
- ๋๊ธฐ ๋ฐฉ์์ ์์ ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉฐ, ํ๋์ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ์๋ ๋ค์ ์์ ์ด ์์๋์ง ์๋๋ค.
- ๊ฐ ์์ ์ ์๋ก ์์กดํ๋ฉฐ, ์์ A๊ฐ ์๋ฃ๋์ด์ผ ์์ B๊ฐ ์์๋๋ค.
- ์ด ๋ฐฉ์์ ๋ธ๋กํน ์ํ๋ฅผ ์ด๋ํ ์ ์๋ค. ์ฆ, ์ด์ ์์ ์ด ๋๋ ๋๊น์ง ๋ค์ ์์ ์ด ๋๊ธฐ ์ํ์ ๋์ด๊ฒ ๋๋ค.
- ์: ํ์ผ์ ์ฝ์ ๋, ํ์ผ์ด ์์ ํ ์ฝํ ๋๊น์ง ์ฝ๋๊ฐ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ์ง ์๋๋ค.
๋น๋๊ธฐ(Asynchronous)
- ๋น๋๊ธฐ ๋ฐฉ์์ ์ฌ๋ฌ ์์ ์ด ๋์์ ์คํ๋ ์ ์์ผ๋ฉฐ, ํ๋์ ์์ ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ด ์งํ๋๋ค.
- ์์ ๊ฐ์ ์์กด์ฑ์ด ์์ผ๋ฉฐ, ๊ฐ ์์ ์ด ๋ณ๋์ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค์์ ์คํ๋ ์ ์๋ค.
- ์ด ๋ฐฉ์์ ๋๋ธ๋กํน ์ํ๋ฅผ ์ ์งํ์ฌ, ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ์์ ์ ๋์์ ์ํํ ์ ์๋ค.
- ์: ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ด ์ฌ ๋๊น์ง ๋ค๋ฅธ ์ฝ๋๋ฅผ ๊ณ์ ์คํํ๋ค.
Blocking
- ๋ธ๋กํน ์์ ์ ํธ์ถ๋ ํจ์๋ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์คํ ํ๋ฆ์ด ๋ฉ์ถ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ฆ, ์์ ์ด ์๋ฃ๋ ๋๊น์ง ํ๋ก๊ทธ๋จ์ด ๋๊ธฐ ์ํ์ ๋น ์ง๋ฉฐ ๋ค๋ฅธ ์์ ์ ํ ์ ์๋ค.
- ์: ํ์ผ์ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์ฝ์ผ๋ฉด, ํ์ผ์ด ์์ ํ ์ฝํ์ง ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
Non-blocking
- ๋ ผ๋ธ๋กํน ์์ ์ ํธ์ถ๋ ์์ ์ด ์ฆ์ ๋ฐํ๋๋ฉฐ, ์คํ ํ๋ฆ์ด ์ค๋จ๋์ง ์๊ณ ๊ณ์ ์งํ๋๋ค.
- ์์ ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ๋์์ ์งํํ ์ ์๋ค.
- ์: ํ์ผ์ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์ฝ์ผ๋ฉด, ํ์ผ ์ฝ๊ธฐ ์์ฒญ ํ ์ฆ์ ๋ค์ ์์ ์ ์งํํ๋ฉฐ, ๋์ค์ ํ์ผ ์ฝ๊ธฐ๊ฐ ์๋ฃ๋๋ฉด ์๋ฆผ์ ๋ฐ๋๋ค.
์๋๋ค๋ฉด ์๋์ ๊ฐ์ด ์ ์ฉ๋๋ค.
- Sync + Blocking: ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ , ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค.
- Async + Blocking: ๋น๋๊ธฐ์ ์์ ์ด์ง๋ง, ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- Sync + Non-blocking: ์์ฐจ์ ์ผ๋ก ์คํ๋์ง๋ง, ์ฆ์ ๋ฐํ๋๋ฏ๋ก ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
- Async + Non-blocking: ๋น๋๊ธฐ์ ์์ ์ด๋ฉฐ ์ฆ์ ๋ฐํ๋์ด ๋ค๋ฅธ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค.
Serializable๊ณผ Pacelable ์ฐจ์ด
Serializable | Parcelable | |
์ฑ๋ฅ | ๋๋ฆผ: Java Reflection์ ์ฌ์ฉํ์ฌ ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ณ ์๋๊ฐ ๋๋ฆผ. ๋๋์ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ ์ฌํด์ง ์ ์์. | ๋น ๋ฆ: ํ๋๋ฅผ ๋ช ์์ ์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํํ๋ฉฐ, Android์ Binder ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด ์ต์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ฑ๋ฅ์ด ๋ฐ์ด๋จ. |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ: Java์ ๊ธฐ๋ณธ ์ง๋ ฌํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉฐ, ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์์ง. | ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ: ํ์ํ ๋ฐ์ดํฐ๋ง ์ง๋ ฌํํ๋ฉฐ ๋ถํ์ํ ๋ฐ์ดํฐ๋ ํฌํจ๋์ง ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์. |
๊ตฌํ ๋ณต์ก๋ | ๊ตฌํ์ด ๊ฐ๋จ: 'implements Serializable'๋ง ์ถ๊ฐํ๋ฉด ๋๋ฉฐ, ๋ณ๋์ ๋ฉ์๋ ์์ฑ ์์ด๋ ์๋์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํจ. | ๊ตฌํ์ด ๋ณต์ก: ๊ฐ ํ๋๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ 'writeToParcel' ๋ฐ 'createFromParcel' ๋ฉ์๋๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฑํด์ผ ํ๋ฏ๋ก ์ฝ๋ ์์ฑ์ด ๋ณต์กํจ. |
ํธํ์ฑ | ํธํ์ฑ ๋ฌธ์ : ํด๋์ค ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ญ์ง๋ ฌํ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๋ฒ์ ๋ถ์ผ์น๋ ํ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ญ์ง๋ ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์. | ์ ์ฐํ ํธํ์ฑ: ๋ช ์์ ์ผ๋ก ์ง๋ ฌํ ๋ฉ์๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ํด๋์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ๋ ์ ์ฐํ๊ฒ ๋์ํ ์ ์์. ํ๋ ์ถ๊ฐ๋ ์ญ์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์. |
์ฌ์ฉ ํ๊ฒฝ | Java ๋ฐ Android์์ ์ฌ์ฉ ๊ฐ๋ฅ: Android๋ฟ๋ง ์๋๋ผ Java ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ. | Android ์ ์ฉ: Android IPC ๋ฐ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, Java ํ์ค ํ๊ฒฝ์์๋ ์ฌ์ฉ ๋ถ๊ฐ. |
OkHttp์ Retrofit2์ ์ฐจ์ด
OkHttp์ Retrofit์ ๋ ๋ค ๋คํธ์ํฌ ํต์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง๋ง, OkHttp๋ ๋ ๋ฎ์ ์์ค์ HTTP ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ , Retrofit์ OkHttp๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๊ณ ์์ค์ REST ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. Wrapping๋๊ฒ Retrofit์ด๋ผ๊ณ ๋ด์ผ๋๋ค.
OkHttp | Retrofit | |
์ญํ | ์ ์์ค HTTP ํด๋ผ์ด์ธํธ | ๊ณ ์์ค REST ํด๋ผ์ด์ธํธ |
API ์ค๊ณ | URL, ํค๋, HTTP ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ผ ํจ | ์ธํฐํ์ด์ค(์ด๋ ธํ ์ด์ )๋ก API ์๋ํฌ์ธํธ๋ฅผ ์ ์ธํ๊ณ ์๋์ผ๋ก HTTP ์์ฒญ์ ์์ฑํจ |
๋ฐ์ดํฐ ๋ณํ | JSON ํ์ฑ์ ์ง์ ์ฒ๋ฆฌํด์ผ ํจ | Gson, Moshi ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์๋์ผ๋ก JSON์ Java/Kotlin ๊ฐ์ฒด๋ก ๋ณํํจ |
๋น๋๊ธฐ ์ฒ๋ฆฌ | ์๋ ์ฝ๋ฐฑ์ ํตํด ๋น๋๊ธฐ ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํจ | ์ฝ๋ฃจํด ๋๋ RxJava์ ํตํฉ๋์ด ๋น๋๊ธฐ ์์ฒญ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ |
๊ธฐ๋ฅ | HTTP/2, WebSocket, ์บ์ฑ, ํ์์์ ์ค์ ๋ฑ ๋คํธ์ํฌ ํ๋กํ ์ฝ๊ณผ ๊ด๋ จ๋ ์ ์์ค ๊ธฐ๋ฅ ์ ๊ณต | ์๋ ๋ฐ์ดํฐ ๋ณํ, ๋ ๊ฐํธํ API ํธ์ถ, ์๋ฌ ์ฒ๋ฆฌ ๋ฑ REST API ํธ์ถ์ ์ํ ๊ณ ์์ค ๊ธฐ๋ฅ ์ ๊ณต |
์ฌ์ฉ ์ฌ๋ก | ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ธ๋ถ ์ ์ด ๋ฐ HTTP ํ๋กํ ์ฝ์ ์ง์ ๊ตฌํ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ | REST API ํต์ ์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์๋ ๋ฐ์ดํฐ ๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ |
git merge์ rebase์ ์ฐจ์ด?
git merge | git rebase | |
๋์ ๋ฐฉ์ | ๋ ๋ธ๋์น์ ์ด๋ ฅ์ ๋ณํฉํ๊ณ , ์๋ก์ด **๋จธ์ง ์ปค๋ฐ(Merge Commit)**์ ์์ฑํจ | ํ ๋ธ๋์น์ ์ปค๋ฐ๋ค์ ๋ค๋ฅธ ๋ธ๋์น ์์ ์ฌ๋ฐฐ์นํ์ฌ ์ด๋ ฅ์ ์ฌ์์ฑํจ |
์ปค๋ฐ ํ์คํ ๋ฆฌ | ๋ณํฉ ์, ๋ ๋ธ๋์น์ ์ด๋ ฅ์ ๊ทธ๋๋ก ์ ์งํ๋ฉฐ, ๋ณํฉ ์ปค๋ฐ์ ์ถ๊ฐํด ์ด๋ ฅ์ ๋ถ๊ธฐ์ ์ด ์๊น | ๋ธ๋์น์ ์ปค๋ฐ๋ค์ ๋ค๋ฅธ ๋ธ๋์น ์์ ์ฌ๋ฐฐ์นํ๋ฏ๋ก, ํ์คํ ๋ฆฌ๊ฐ ๊น๋ํ๊ฒ ์ง์ ํ์ผ๋ก ์ ์ง๋จ |
์ฌ์ฉ ์์ | ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ, ๊ธฐ์กด ์ด๋ ฅ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณํฉํ ๋ ์ฌ์ฉ | ๊ธฐ๋ฅ ๋ธ๋์น๋ฅผ ๋ฉ์ธ ๋ธ๋์น ์์ ์ฌ๋ฐฐ์นํ์ฌ ์ด๋ ฅ์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ๋ ์ฌ์ฉ |
์ถฉ๋ ํด๊ฒฐ | ๋ณํฉ ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, ์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋ณํฉ ์ปค๋ฐ์ ์์ฑํจ | ์ฌ๋ฐฐ์น ๊ณผ์ ์์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, ๊ฐ ์ปค๋ฐ๋ง๋ค ์ถฉ๋์ ํด๊ฒฐํ๊ณ ์ปค๋ฐ์ ๋ค์ ์์ฑํด์ผ ํจ |
์ฅ์ | ์ด๋ ฅ์ ๋ชจ๋ ์ปค๋ฐ์ ์ ์งํ ์ ์์ผ๋ฉฐ, ํ์ ์ ์ด๋ ฅ์ ๋ช ํํ ๊ตฌ๋ถํ ์ ์์ | ๊ฐ๊ฒฐํ ์ด๋ ฅ์ ์ ์งํ ์ ์์ผ๋ฉฐ, ๋ธ๋์น๊ฐ ์ง์ ํ์ผ๋ก ๊น๋ํ๊ฒ ๊ด๋ฆฌ๋จ |
๋จ์ | ๋ณํฉ ์ปค๋ฐ์ผ๋ก ์ธํด ์ด๋ ฅ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์์ | ํ์คํ ๋ฆฌ๊ฐ ์ฌ์์ฑ๋๋ฏ๋ก, ํ์ ์ค์ธ ๋ธ๋์น์์ rebase๋ฅผ ์๋ชป ์ฌ์ฉํ ๊ฒฝ์ฐ ํผ๋์ ์ด๋ํ ์ ์์ |
์ฌ์ฉ ์ํฉ | ํ์ ๋ธ๋์น ๋ณํฉ ์ ๊ธฐ์กด ์ด๋ ฅ ์ ์ง๊ฐ ์ค์ํ ๊ฒฝ์ฐ | ๊ฐ์ธ ์์ ๋ธ๋์น์์ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํ๊ณ ์ ํ ๋ ์ฌ์ฉ |
rebase๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ์ฌ๊ตฌ์ฑํด์ ๊น๋ํ ์ปค๋ฐ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ค๋ค.
git๊ณผ git flow์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
Git | Git Flow | |
์ ์ | ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ผ๋ก, ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๋ฆฌํ๊ณ ํ์ ์ ๋์์ฃผ๋ ๋๊ตฌ | Git์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ธ๋์นญ ์ ๋ต์ผ๋ก, ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์กฐํํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ก |
๊ธฐ๋ฅ | ํ์ผ์ ์ถ์ ํ๊ณ ๋ฒ์ ๊ธฐ๋ก์ ๋จ๊ธฐ๋ฉฐ, ๋ถ์ฐ ํ๊ฒฝ์์ ํ์ ์ ๊ฐ๋ฅํ๊ฒ ํจ | ๊ธฐ๋ฅ ๋ธ๋์น, ๋ฆด๋ฆฌ์ค ๋ธ๋์น, ํซํฝ์ค ๋ธ๋์น ๋ฑ ๋ช ํํ ๋ธ๋์นญ ๊ท์น์ ์ ํ๊ณ , ์ด๋ฅผ ํตํด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํจ |
์ฃผ์ ๋ช ๋ น์ด | git init, git add, git commit, git push, git merge, git rebase ๋ฑ | Git ๋ช ๋ น์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ํน์ ๋ธ๋์น ์ ๋ต์ ๋ฐ๋ฆ. develop, feature, release, hotfix, master ๋ธ๋์น๋ฅผ ์ฌ์ฉ |
์ฌ์ฉ ๋ชฉ์ | ์์ค ์ฝ๋์ ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ํ์ ์ ์ง์ํ๋ฉฐ, ๋ชจ๋ ํ์์ ํ๋ก์ ํธ์ ์ฌ์ฉ ๊ฐ๋ฅ | ์ฃผ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค์์ ์ฌ์ฉ๋๋ฉฐ, ์ฝ๋์ ๋ฆด๋ฆฌ์ค ์ค๋น์ ๋ฐฐํฌ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ธ๋์นญ ์ ๋ต |
๋ธ๋์น ๊ตฌ์กฐ | ์์ ๋กญ๊ฒ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ํน์ ๋ธ๋์นญ ๊ท์น์ ์์ | master, develop, feature, release, hotfix ๋ฑ์ ๋ช ํํ ๋ธ๋์น ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ |
๋ณต์ก๋ | Git ์์ฒด๋ ๋ธ๋์น ์ ๋ต์ด ๋ช ํํ์ง ์์ ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ | ๊ณ ์ ๋ ๋ธ๋์นญ ๊ท์น์ ๋ฐ๋ฅด๋ฏ๋ก ํ๋ก์ ํธ๊ฐ ๋ณต์กํ ์ ์์ง๋ง, ์ฒด๊ณ์ ์ธ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์งํ๋ ๋ฐ ๋์์ ์ค |
์ฌ์ฉ ์ํฉ | ๋ชจ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ, ๋จ์ผ ๋ธ๋์น๋ ๊ฐ๋จํ ๋ธ๋์นญ ์ ๋ต์ ์ฌ์ฉํ ๋ ์ ํฉ | ๋๊ท๋ชจ ํ๋ก์ ํธ๋ ํ ํ์ ์์ ์ฒด๊ณ์ ์ธ ๋ธ๋์นญ ์ ๋ต์ ํ์๋ก ํ ๋ ์ ํฉ. ๋ช ํํ ๋ฆด๋ฆฌ์ค ๊ด๋ฆฌ์ ๋ฐฐํฌ ์ฃผ๊ธฐ๊ฐ ํ์ํ ๋ ์ฌ์ฉ |
- Git์ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ฉฐ, ์์ค ์ฝ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๋ฆฌํ๋ ์์คํ ์ด๋ค.
- Git Flow๋ Git์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ธ๋์นญ ์ ๋ต์ผ๋ก, ๊ฐ๋ฐ, ๋ฆด๋ฆฌ์ค, ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
interface์ abstract ์ฐจ์ด? -> ์ผ๋ฐ์ ์ธ ์ ์, ์ฝํ๋ฆฐ์์์ ์ ์
์ผ๋ฐ | Interface | Abstract Class |
๊ตฌํ ๋ด์ฉ | ๊ตฌํ์ด ์๋ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ฉฐ, ๋ํดํธ ๋ฉ์๋๋ก ์ผ๋ถ ๊ตฌํ ๊ฐ๋ฅ | ์ผ๋ฐ ๋ฉ์๋์ ์ถ์ ๋ฉ์๋ ๋ชจ๋ ํฌํจ ๊ฐ๋ฅ. ์ผ๋ฐ ๋ฉ์๋๋ ๊ตฌํ ๋ด์ฉ์ ๊ฐ์ง |
๋ค์ค ์์ | ํ ํด๋์ค๊ฐ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ | ํ ํด๋์ค๋ ํ๋์ ์ถ์ ํด๋์ค๋ง ์์ ๊ฐ๋ฅ |
๋ฉค๋ฒ ๋ณ์ | ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ฐ์ง ์ ์์. ์์๋ง ์ ์ธ ๊ฐ๋ฅ | ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ณตํต ์ํ๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅ |
์์ฑ์ | ์์ฑ์ ์์ | ์์ฑ์ ์์. ์์๋ ํด๋์ค์์ ์์ฑ์๋ฅผ ํตํด ์ด๊ธฐํ ๊ฐ๋ฅ |
๋ชฉ์ | ์ฃผ๋ก **๋์(ํ๋)**์ ์ ์ํ๊ณ , ์๋ก ๋ค๋ฅธ ํด๋์ค๋ค์ด ๊ฐ์ ๋์์ ๊ตฌํํ๋๋ก ์๊ตฌํ ๋ ์ฌ์ฉ | ๊ณตํต๋ ํน์ฑ ๋ฐ ๋์์ ๊ฐ์ง ํด๋์ค๋ค ๊ฐ์ ์์ ๊ด๊ณ๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ |
์ธ์คํด์คํ | ์ธํฐํ์ด์ค๋ ์ธ์คํด์คํ ๋ถ๊ฐ, ๊ตฌํํ ํด๋์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ | ์ถ์ ํด๋์ค๋ ์ธ์คํด์คํ ๋ถ๊ฐ, ๋ฐ๋์ ํ์ ํด๋์ค์์ ๊ตฌํ๋์ด์ผ ํจ |
์ฌ์ฉ ์ํฉ | ํด๋์ค ๊ฐ ๊ณตํต์ ์ธ ํ๋์ ์ ์ํ๊ฑฐ๋, ์ฌ๋ฌ ๊ตฌํ์ฒด๊ฐ ํ์ํ ๋ ์ฌ์ฉ | ๊ณตํต์ ์ธ ์์ฑ๊ณผ ๋์์ ๊ฐ์ง ์ฌ๋ฌ ํด๋์ค์์ ๊ธฐ๋ณธ ๋์์ ๊ณต์ ํ๊ฑฐ๋ ์ผ๋ถ๋ง ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํํด์ผ ํ ๋ ์ฌ์ฉ |
- ์ธํฐํ์ด์ค๋ ๊ตฌํ์ด ์๋ ๋ฉ์๋ ์ ์ธ์ ์ ๊ณตํ๋ฉฐ, ์ฌ๋ฌ ํด๋์ค์์ ๊ณตํต์ ์ผ๋ก ๊ตฌํํ ๋์์ ์ ์ํ๊ณ , ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค.
- ์ถ์ ํด๋์ค๋ ์ถ์ ๋ฉ์๋์ ์ผ๋ฐ ๋ฉ์๋๋ฅผ ๋ชจ๋ ํฌํจํ๋ฉฐ, ์์์ ํตํด ๊ณตํต ๋์์ ์ฌ์ฌ์ฉํ ์ ์๋ค. ๋จ์ผ ์์๋ง ๊ฐ๋ฅํ๋ค.
kotlin | Interface(์ฌ๊ธฐ์ ์ข ์ฐจ์ด๊ฐ ์๋ค) | Abstract Class |
๊ตฌํ ๋ด์ฉ | ์ถ์ ๋ฉ์๋์ ๊ธฐ๋ณธ ๊ตฌํ์ ํฌํจํ ๋ฉ์๋ ๋ชจ๋ ์ ์ธ ๊ฐ๋ฅ | ์ถ์ ๋ฉ์๋์ ๊ตฌํ๋ ๋ฉ์๋ ๋ชจ๋ ํฌํจ ๊ฐ๋ฅ |
๋ค์ค ์์ | ํ ํด๋์ค๊ฐ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ | ํ ํด๋์ค๋ ํ๋์ ์ถ์ ํด๋์ค๋ง ์์ ๊ฐ๋ฅ |
ํ๋กํผํฐ(์ค์) | ์ถ์ ํ๋กํผํฐ์ ๊ธฐ๋ณธ getter๋ฅผ ์ ์ธ ๊ฐ๋ฅ. **์ํ(๋ฉค๋ฒ ๋ณ์)**๋ ๊ฐ์ง ์ ์์ | ํ๋กํผํฐ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ํ๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅ |
์์ฑ์ | ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์์ | ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์์. ํ์ ํด๋์ค์์ ์์์ ํตํด ์์ฑ์ ํธ์ถ ๊ฐ๋ฅ |
๋ชฉ์ | ์ฌ๋ฌ ํด๋์ค์ ๊ณตํต ๋์์ ์ ์ํ๊ณ , ๊ฐ์ ๋์์ ๊ตฌํํ๋๋ก ์๊ตฌํ ๋ ์ฌ์ฉ | ๊ณตํต๋ ์ํ์ ๋์์ ๊ฐ์ง ํด๋์ค๋ค ๊ฐ์ ๊ณตํต ๊ตฌํ์ ๊ณต์ ํ ๋ ์ฌ์ฉ |
์ธ์คํด์คํ | ์ธํฐํ์ด์ค๋ ์ธ์คํด์คํ ๋ถ๊ฐ, ๊ตฌํํ ํด๋์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ | ์ถ์ ํด๋์ค๋ ์ธ์คํด์คํ ๋ถ๊ฐ, ๋ฐ๋์ ํ์ ํด๋์ค์์ ๊ตฌํ๋์ด์ผ ํจ |
์ฌ์ฉ ์ํฉ | ์ฌ๋ฌ ํด๋์ค๊ฐ ๋์ผํ ๋์์ ๊ตฌํํด์ผ ํ๋ฉฐ, ๋ค์ค ์์์ด ํ์ํ ๊ฒฝ์ฐ | ํด๋์ค ๊ฐ์ ๊ณตํต๋ ์ํ์ ๋์์ ๊ณต์ ํ๊ณ , ๋จ์ผ ์์ ๊ตฌ์กฐ๋ฅผ ์ ์งํด์ผ ํ ๋ ์ฌ์ฉ |
์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ณ?
์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋ | Android Developers
์ด ํ์ด์ง๋ Cloud Translation API๋ฅผ ํตํด ๋ฒ์ญ๋์์ต๋๋ค. ์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋ ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. ์ด ๊ฐ์ด๋์๋ ๊ณ ํ์ง์ ๊ฐ๋ ฅํ
developer.android.com



- ๋ชจ๋ํ: ๊ฐ ๋ ์ด์ด๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ค๊ณ๋์ด ์์ด ์ฝ๋๊ฐ ๋ถ๋ฆฌ๋์ด ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ , ํ์์ ํ์ ํ๊ธฐ ์ฉ์ดํด์ง๋ค.
- ์ ์ง๋ณด์์ฑ: ๊ฐ ๋ ์ด์ด๊ฐ ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก, ํน์ ๊ธฐ๋ฅ์ด ์์ ๋๋๋ผ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- ํ์ฅ์ฑ: ๋ ์ด์ด ๊ฐ์ ์์กด์ฑ์ด ๋ฎ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ํ์ฅํ๊ธฐ ์ฝ๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ: ๊ฐ ๋ ์ด์ด๋ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์ด ๋จ์ ํ ์คํธ ๋ฐ ํตํฉ ํ ์คํธ๊ฐ ์ฉ์ดํ๋ค.
Google์ ์ฑ์ํคํ
์ณ์์๋ โdomain layer๊ฐ data layer๋ฅผ ์๊ณ ์๋คโ์ด๊ณ ,
๋ฐฅ์ ํด๋ฆฐ ์ํคํ
์ณ๋ Domain layer๋ ์๋ฌด๋ ๋ชฐ๋ผ์ผ ํ๊ณ ,Presentation layer, Data layer๊ฐ Domain layer์ ์์กดํด์ผ ํ๋ค.
๊ทผ๋ฐ ๊ตฌ๊ธ์ ์ฑ ์ํคํ ์ณ์์ Domain๋ ์ด์ด๋ optional์ด๋ค. ๋ทฐ๋ชจ๋ธ์์ ์กฐํฉํด์ ์ฌ์ฉํด๋ ๋ฌด๊ดํ๋ค.
::์ถ์ฒ::
https://1-three.tistory.com/129
https://github.com/devSquad-study/2023-CS-Study/tree/main
https://github.com/4z7l/tech_interview.zip
https://github.com/VSFe/Tech-Interview?tab=readme-ov-file
https://github.com/WooVictory/Ready-For-Tech-Interview
https://github.com/gyoogle/tech-interview-for-developer
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!