์ฐ๋ฆฌ๋ 'ํจ๊ป' ๋ธ ๋ ๋ ๋ง์ ์๋์ง๋ฅผ ๋ง๋ค์ด๋ ๋๋ค. ์์ฆ ์ธ๋๋ค์ ๋ฌ๋ ํฌ๋ฃจ์ ์์๋์ด ๋ฌ๋์ ์ฆ๊ธฐ๊ณค ํ์ง๋ง, Offline ๋ฌ๋ํฌ๋ฃจ๋ ๊ณ ์ ๋ ์๊ฐ๊ณผ ์ฅ์๋ผ๋ ํ๊ณ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ์ด ๋ฌ๋ฆฌ๊ณ ์ถ์ง๋ง, ๋ฌ๋ฆด ์ ์๋ ์๊ฐ๋ค์ด ์กด์ฌํ๋ค๋ ์ ์ ์ง์คํ๊ณ ์ ํฉ๋๋ค. ์ฐ๋ฆฌ์ ์๋น์ค๋ฅผ ํตํด ์๊ณต๊ฐ์ ์ ์ฝ์์ด ๋ค์ํ ์ฌ๋๋ค๊ณผ ํจ๊ป ๋ฌ๋ฆผ์ผ๋ก์จ ๊ฑด๊ฐํ ๋ผ์ดํ ์คํ์ผ์ ๋ง๋ค์ด๋๊ฐ๊ธธ ๋ฐ๋๋๋ค.
โจ ๊ธฐ์กด ๋ฌ๋ ์ดํ๋ฆฌ์ผ์ด์
๊ณผ์ ํ์คํ ์ฐจ๋ณํ ์์๋ฅผ ์ ์ฉํ์ต๋๋ค.
์ฌ์ฉ์๋ '์ค์๊ฐ ๊ฒฝ์'์ด๋ผ๋ ๊ฒ์ด๋ฏธํผ์ผ์ด์
์์๋ฅผ ํตํด ์ง๋ฃจํ ๋ฌ๋์ด ์๋, ๊ฒ์์ฒ๋ผ ์ ์พํ ๋ฌ๋์ ์ฆ๊ธธ ์ ์์ต๋๋ค.
โจ '๋ฐ๋ก, ๋ ๊ฐ์ด' ํจ๊ป ํ๋ ๊ฐ์น๋ฅผ ์ถ๊ตฌํ๊ณ ์ ํฉ๋๋ค.
์ด๋ค ๋จ์ฒด์ ์์๋์ง ์์๋, ๊ตณ์ด ์น๊ตฌ์ ์ฝ์์ ์ก๊ณ ๋ง๋์ง ์์๋, ์ฌ์ฉ์๋ ์ธ์ ์ด๋์๋ ๋์ ํจ๊ป ๋ธ ์๋๋ฅผ ์ฐพ์ ๊ฐ์ด ๋ฌ๋์ ์ฆ๊ธธ ์ ์์ต๋๋ค.
โจ ํธ๋ ๋ํ ๋์์ธ์ ์์๋ฅผ ํตํด ์๊ฐ์ ์ธ ์ฆ๊ฑฐ์์ ์ป์ ์ ์์ต๋๋ค.
ํน์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ฉด ๊ฐ์ฑ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฑ์ง๋ฅผ ํ๋ํ ์ ์์๊ณผ ๋์์ ๋ค์ํ ๋ฌ๋ ๋ญํน์ ํตํด ์ฌ์ฉ์์ ์ฆ๊ฑฐ์์ ๋๋ชจํ๊ณ ์ ํฉ๋๋ค. ๋, ๋๊ตฌ๋ ์ฌ์ฉํ๊ธฐ ์ฌ์ด UX ์์๋ ์ฆ๊ฑฐ์์ ๋ฐฐ๋ก ํฅ์์์ผ ์ค๊ฑฐ์์.
- activity_login.xml์ ๋ทฐ๋ค์ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๊ธฐ ์ํด guideline์ผ๋ก g_left,g_right๋ฅผ ์ฌ์ฉํ๋ค
- edt_login_id, edt_login_pw, btn_login_confirm์ 0dp๋ก match_constraint์์ฑ์ ์ ์ฉํ์ฌ guideline ๋ฒ์๋ด์ ๊ฝ์ฐจ๊ฒ ๋ง์ท๋ค.
- ์์ด๋/๋น๋ฐ๋ฒํธ ๋ฒํผ์ธ tv_login_sign_find๋ layout_constraintStart_toEndOf="@id/tv_login_sign_up"์ผ๋ก ํ์๊ฐ์ ๋ฒํผ๊ณผ ์ฐ๊ด์ฑ์๋ ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์๋ค.
<androidx.constraintlayout.widget.Guideline
android:id="@+id/g_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="54dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/g_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintGuide_end="54dp" />
- activity_sign_up.xml๋ด์ ๋ทฐ๋ค์ ๊ฐ์ด๋ฐ๋ก ์ ๋ ฌํ๊ธฐ ์ํด margin_vertical ๋์ guideLine์ธ g_left,g_right๋ฅผ ์ฌ์ฉํ๋ค.
- edt_sign_up_id,edt_sign_up_nick_name,edt_sign_up_pw,edt_sign_up_pw_confirm์ android:layout_width="0dp"์ผ๋ก guideLine์ ๊ฝ์ฐจ๋๋ก match_constraint์์ฑ์ ๊ฑธ์ด์ฃผ์๋ค.
- ์ค๋ณตํ์ธ๋ฒํผ์ธ btn_sign_up_id_confirm์ layout_constraintTop_toTopOf="@+id/edt_sign_up_id" ์์ฑ์ ์ฃผ์ด ์์ด๋์ ๋ ฅ์นธ๊ณผ ์ฐ๊ด์ฑ์๋ ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์๋ค.
- ์ค๋ณตํ์ธ๋ฒํผ์ธ btn_sign_up_nick_name_confirm์ layout_constraintTop_toTopOf="@+id/edt_sign_up_nick_name" ์์ฑ์ ์ฃผ์ด ๋๋ค์์ ๋ ฅ์นธ๊ณผ ์ฐ๊ด์ฑ์๋ ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์๋ค.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/g_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:orientation="vertical"
app:layout_constraintGuide_begin="30dp"
app:layout_constraintStart_toStartOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/g_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="30dp" />
- ํ๋ฉด์ ์ค์์ ์์นํ 4๋จ๊ณ๋ก ๋ถ๋ฅ๋ ์จ๋ณด๋ฉ ๋ทฐ๋ฅผ ์ข, ์ฐ๋ก ๋๊ฒจ๋ณด๊ธฐ ์ํด ViewPager๋ฅผ ํ์ฉํ์ฌ ๊ฐ ํ๋ฉด๋ค์ fragment๋ก ๊ตฌ์ฑํ๋ค.
- Fragment๊ฐ ๋ค์ด๊ฐ ViewPager๋ฅผ dot indicator๊ฐ ์๋ ์๋จ์ ConstraintLayout๊ณผ textView Button์ด ์๋ ํ๋จ ConstraintLayout์ ์ฐ๋ํ๋ค, layout_width๋ match_parent๋ก, layout_height๋ 0dp๋ก ์ค์ผ๋ก์ match_contraint๋ฅผ ์ค๋ค.
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_on_board"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="26dp"
app:layout_constraintBottom_toTopOf="@+id/constraint_id"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/indicator_on_board"
app:layout_constraintVertical_bias="1.0" />
๐ fragment_my_profile.xml4
- ๋ง์ด ํ๋กํ์ ํ๋กํ ์ฌ์ง์ ๊ฒฝ์ฐ ์ ํ๋ฆฐ์ ์ฌ๋ฆฐ ์ด๋ฏธ์ง์ ๊ธฐ๋ณธ๊ฐ(wrap_content)๊ณผ ์ ์ฉ๊ฐ์ ์ฐจ์ด๊ฐ ์์ด ์ ์ฉ๊ฐ์ ๊ธฐ์ ํ์ฌ ๋ทฐ๋ฅผ ๋ง๋ค์๋ค.
<ImageView
android:id="@+id/imgv_my_profile_img"
android:layout_width="132dp"
android:layout_height="132dp"
android:layout_marginTop="2dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imgv_my_profile_setting"
app:srcCompat="@drawable/icon_redman_shorthair" />
- ์๋ฒ์ ์๋, ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์์ผํต์ ํ๊ธฐ ์ํ์ฌ, ๊ธฐ์กด์ ArrayList๋ฅผ JSONArray๋ก ๋ณํํ๋ ํจ์
fun getCoorsJSONArr(coordsArr: ArrayList<LatLng>): JSONArray {
return JSONArray(coordsArr.map {
try{
JSONObject().apply {
this.put("latitude", it.latitude)
this.put("longitude", it.longitude)
}
}catch (e: JSONException){e.printStackTrace()}
})
}
- xml์ฝ๋์ ๋ฌ๋ฆฌ kotlin source code์์๋ px๋จ์๋ฅผ ์ฌ์ฉ, dp๋ฅผ px๋ก ๋ณํํด์ฃผ๋ ํ์ฅํจ์
fun Int.dpToPx(resources: Resources): Int = TypedValue
.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
this.toFloat(), resources.displayMetrics).toInt()
- Log ์ฝ๊ฒ ๋ณผ ์ ์๋๋ก ํด์ฃผ๋ ํ์ฅํจ์
fun String.logDebug(any: Any) {
Log.d(any::class.java.simpleName, this)
}
๐ newStartActivity.kt
- ์กํฐ๋นํฐ ์ ํ ํ์ฅํจ์
fun <T> Context.newStartActivity(toClass: Class<T>){
val intent = Intent(this, toClass)
startActivity(intent)
}
- lottie ์ฌ์ฉ, ์ฑ ์คํ์ ๋์ค๋ splash, ์๋๋ฐฉ ๋๋ ์์ ๊ณผ์ ๋๊ฒฐ์ ๋์ค๋ 10์ด ์นด์ดํธ ๋ฐ RUN! ํ๋ฉด ์ฒ๋ฆฌ๋ฅผ ์ํจ.
-> implementation 'com.airbnb.android:lottie:3.4.1'
-
๋ค์ด๋ฒ์ง๋ SDK, RUNNER'S HI ์ฑ์ ํต์ฌ๊ธฐ๋ฅ์ผ๋ก ์์ ์ ํ์ฌ์์น ๋ฐ ์ด๋๊ฒฝ๋ก, ๊ฒ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํ์ํ ์ง๋๋ก ๋ค์ด๋ฒ์ฌ์ SDK๋ฅผ ์ฌ์ฉํจ.
-> implementation 'com.naver.maps:map-sdk:3.8.0' -
Retrofit ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์๋ฒํต์ ์ ์ํจ : https://github.com/square/retrofit
-> implementation 'com.squareup.retrofit2:retrofit:2.6.2' -
Retrofit ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ต์ผ๋ก ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด
-> implementation 'com.squareup.retrofit2:retrofit-mock:2.6.2' -
๊ฐ์ฒด ์๋ฆฌ์ผ๋ผ์ด์ฆ๋ฅผ ์ํ Gson ๋ผ์ด๋ธ๋ฌ๋ฆฌ : https://github.com/google/gson
-> implementation 'com.google.code.gson:gson:2.8.6' -
Retrofit ์์ Gson ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
-> implementation 'com.squareup.retrofit2:converter-gson:2.6.2' -
Java Scalars Converter : String์ด๋ primitive ํ์ ์ text/plain boides๋ก ์ปจ๋ฒํ ํ๋๋ฐ ์ด๋ค.
-> implementation 'com.squareup.retrofit2:converter-scalars:2.8.0' -
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ
-> implementation 'androidx.recyclerview:recyclerview:1.1.0' -
material ๋์์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
-> implementation "com.google.android.material:material:1.2.0-alpha06" -
์ด๋ฏธ์ง ๋ก๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : glide
-> implementation "com.github.bumptech.glide:glide:4.11.0" annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' kapt "com.github.bumptech.glide:compiler:4.11.0" -
๋๊ทธ๋ ์ด๋ฏธ์ง ์ปค์คํ ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : https://github.com/hdodenhof/CircleImageView
-> implementation 'de.hdodenhof:circleimageview:3.1.0' -
CoordinateLayout ๋ผ์ด๋ธ๋ฌ๋ฆฌ
-> implementation 'com.google.android.material:material:1.2.0-alpha01' -> implementation 'androidx.legacy:legacy-support-v4:1.0.0' -> implementation 'androidx.recyclerview:recyclerview:1.1.0' -> testImplementation 'junit:junit:4.12'
- ํจํค์ง ์ค๋ช
package | ์ค๋ช |
---|---|
data |
ํ๋ก์ ํธ ๋ด์์ ์ฐ๋ ๋ฐ์ดํฐ๊ด๋ จ ํด๋์ค |
extension |
ํ์ฅํจ์๊ด๋ จ ํ์ผ |
feature |
๊ธฐ๋ฅ๋ณ ํด๋๋ค |
network |
Retrofit์ ์ฌ์ฉํ http ํต์ ์ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ๋ฐ ํด๋์ค |
socket |
Socket.io๋ฅผ ์ฌ์ฉํ ์์ผ ํต์ ์ ์ฌ์ฉํ๋ ํด๋์ค ๋ฐ ์๋น์ค |
util |
SharePrererence ๋ฐ ๊ธฐํ ์ฌ์ฉ ํด๋์ค |
- feature๋ด ํ์ ํจํค์ง ์ค๋ช
feature๋ด ํ์ ํจํค์ง | ํด๋น ์กํฐ๋นํฐ ๋ฐ ํ๋ ๊ทธ๋จผํธ | ์ค๋ช |
---|---|---|
badgedetail |
BadgeDetailActivity | ๋ฑ์ง ์์ธ๋ณด๊ธฐ ํ๋ฉด |
finishrun |
FinishRunActivity | ๋ฌ๋์๋ฃ ํ ํ๋ฉด |
home |
HomeActivity, HomeFragment, BottomSheetFragment | ํ ํ๋ฉด |
login |
LoginActivity | ๋ก๊ทธ์ธ ํ๋ฉด |
matchfail |
MatchFailActivity | ๋งค์นญ ์คํจ ํ๋ฉด |
myprofile |
MyProfileFragment | ๋ง์ดํ๋กํ ํ๋ฉด |
onboard |
OnBoardActivity | ์จ๋ณด๋ฉ ํ๋ฉด |
rank |
RankFragment | ๋ญํน ํ๋ฉด |
recdetail |
RecDetailActivity | ๊ธฐ๋ก์์ธ๋ณด๊ธฐ ํ๋ฉด |
record_badge |
BadgeFragment, RecBadgeFragment, RecFragment | ๋ฑ์ง ๋ชจ์๋ณด๊ธฐ ํ๋ฉด, ๊ธฐ๋ก ๋ชจ์๋ณด๊ธฐ ํ๋ฉด |
result |
ResultActivity | ๋ฌ๋ ๊ฒฐ๊ณผ ํ๋ฉด |
run |
GoalActivity, RivalActivity, MatchProcActivity, MatchSucActivity, RunActivity | ๋งค์นญ์๋์ ํ ํ๋ฉด, ๋งค์นญ ํ๋ฉด, ๋ฌ๋ฆฌ๊ธฐ ํ๋ฉด |
runalone |
WaitMeActivity, GoalRunMeActivity, FinishRunActivity | ๋์ ๋ฌ๋ฆฌ๊ธฐ ํ๋ฉด, ๋๋ฏธ์ ๋ฌ๋ฆฌ๊ธฐ ํ๋ฉด, ๋์ ๋ฌ๋ฆฌ๊ธฐ ๊ฒฐ๊ณผ ํ๋ฉด |
runcountdown |
CountDownActivity, StartRunActivity | ๋ฌ๋ฆฌ๊ธฐ์ ์นด์ดํธ ๋ค์ด ํ๋ฉด, ๋ฌ๋ฆฌ๊ธฐ ์์ ์๋ฆผ ํ๋ฉด |
rundummy |
MatchDummyActivity | ๋๋ฏธ๋ฐ์ดํฐ์ ๋ฌ๋ฆฌ๊ธฐ ๋งค์นญ ํ๋ฉด |
signup |
SignUpActivity | ํ์๊ฐ์ ํ๋ฉด |
splash |
SplashActivity | ์คํ๋์ ํ๋ฉด |
![](https://user-images.githubusercontent.com/63635840/87809124-ccceab00-c895-11ea-8dd0-be8d5585c50b.png)
![](https://user-images.githubusercontent.com/63635840/87809129-cfc99b80-c895-11ea-9729-6ed4e04e29a5.png)
![](https://user-images.githubusercontent.com/63635840/87809139-d2c48c00-c895-11ea-805c-a96e082e3669.png)
![](https://user-images.githubusercontent.com/63635840/87809146-d48e4f80-c895-11ea-8a2d-4034611cdb98.png)
![](https://user-images.githubusercontent.com/63635840/87809182-e7088900-c895-11ea-9e9c-278edffeedba.png)
![](https://user-images.githubusercontent.com/63635840/87809186-e96ae300-c895-11ea-8b69-d3af2fc3d15c.png)
![](https://user-images.githubusercontent.com/63635840/87810040-529f2600-c897-11ea-9ede-dbfe3a1d0c84.png)
![](https://user-images.githubusercontent.com/63635840/87810058-56cb4380-c897-11ea-87a0-1a096e193a6e.png)
![](https://user-images.githubusercontent.com/63635840/87810066-592d9d80-c897-11ea-84e0-e3ccc2632f63.png)
- ์คํ๋์ฌ ํ๋ฉด์์ SharedPreferences์ผ๋ก ์๋๋ก๊ทธ์ธ ๊ตฌํ
- ํ์๊ฐ์ ํ๋ฉด์์ textWatcher์ผ๋ก ์ค์๊ฐ์ผ๋ก ์ ๊ทํํ์ ๊ฒ์ฌ, ๋ชจ๋ ์กฐ๊ฑด ๋ง์กฑ์์๋ง ํ์๊ฐ์ ๋ฒํผ ํ์ฑํ
๐ ๐ฅ ํํ๋ฉด, ๋งค์นญํ๋ฉด, ๋ฌ๋ํ๋ฉด- ๋ค๋ฅธ์ฌ๋๊ณผ ๊ฒฝ์, ๋์ ๊ฒฝ์ํ๊ธฐ ๐ ํต์ฌ๊ธฐ๋ฅ
![drawing](https://user-images.githubusercontent.com/57262833/87808693-1e2a6a80-c895-11ea-8534-65c65cad4e7b.png)
![](https://user-images.githubusercontent.com/57262833/87808723-2e424a00-c895-11ea-8bf8-b8035b5cc351.png)
![](https://user-images.githubusercontent.com/57262833/87809035-ab6dbf00-c895-11ea-9072-77b27d10866f.png)
![](https://user-images.githubusercontent.com/57262833/87809063-b1fc3680-c895-11ea-865b-6028a4af1a20.png)
![](https://user-images.githubusercontent.com/57262833/87809193-f12a8780-c895-11ea-8080-2faf92af5aea.png)
- ํํ๋ฉด์์ BottomSheetNavigation ์ฌ์ฉ
- ๋งค์นญํ๋ฉด์์ Socket.io๋ฅผ ์ด์ฉํ ์ค์๊ฐ ํต์ ์ผ๋ก ์ฌ์ฉ์์ ๋งค์นญํจ
- ๋ฌ๋ํ๋ฉด์์ Socket.io๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ๋ก ๋ฌ๋ ๊ธฐ๋ก ์ ์ก, ๋งค์นญ ์๋๋ฐฉ์ ๋ฌ๋ ๊ธฐ๋ก ๋ฐ์
- ๋ฌ๋ํ๋ฉด์์ NaverMap API๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ์ด๋๊ฑฐ๋ฆฌ ๊ธฐ๋ก
- ๋ฌ๋ํ๋ฉด์์ ์ค์๊ฐ์ผ๋ก ์ด๋์๊ฐ, ๋ฌ๋๊ฑฐ๋ฆฌ, ํ์ด์ค ๋ณด์ฌ์ค
- ๋์ ๊ฒฝ์ํ๊ธฐ ํ๋ฉด์์ TextToSpeeach์ Timer๋ก ์์ฑํผ๋๋ฐฑ ๊ธฐ๋ฅ ๊ตฌํ
![drawing](https://user-images.githubusercontent.com/57262833/87809342-35b62300-c896-11ea-9b03-4a22b25458f0.png)
![drawing](https://user-images.githubusercontent.com/57262833/87809345-36e75000-c896-11ea-881e-13690eeb4895.png)
![](https://user-images.githubusercontent.com/57262833/87811322-72374e00-c899-11ea-8618-a510611fc2fe.png)
![drawing](https://user-images.githubusercontent.com/57262833/87811327-76fc0200-c899-11ea-8bc7-48b9384c8e5d.png)
- ๊ธฐ๋กํ๋ฉด์์ ๋งค์นญ์๋๋ฐฉ๊ณผ ๋ฌ๋ ๊ธฐ๋ก ๋น๊ต ๊ฐ๋ฅ ๋ฐ ์นํจ ์ฌ๋ถ ๋ณด์ฌ์ค
- ๊ธฐ๋ก์์ธํ ๋ณด๊ธฐํ๋ฉด์์ NaverMap์ฌ์ฉ์ผ๋ก ๋ฌ๋ ๊ฒฝ๋ก ๋ถ๋ฌ์ค๊ธฐ
![](https://user-images.githubusercontent.com/63635840/87827843-a836fb00-c8b6-11ea-9552-9eb459b5c2bc.png)
![](https://user-images.githubusercontent.com/63635840/87811174-32706680-c899-11ea-94e8-4ee18e71154d.png)
![](https://user-images.githubusercontent.com/63635840/87811182-343a2a00-c899-11ea-9bb7-9afbdf41b741.png)
![](https://user-images.githubusercontent.com/63635840/87828264-85f1ad00-c8b7-11ea-96c1-dd42b9717c36.png)
- ํญ ๋ ์ด์์ fragment์ ์ข, ์ฐ์ธก์ ์์นํ ๋ฌ๋๊ธฐ๋ก, ๋ฌ๋๋ฐฐ์ง ๋ทฐ์ด๋ค.
- ๋์ ๋ชจ๋ ๊ธฐ๋ก๊ณผ ์นํจ, ๊ธฐ๋ก์ ๋ณผ ์ ์์ผ๋ฉฐ ํด๋ฆญ์ ๊ธฐ๋ก ์์ธ๋ณด๊ธฐ ๋ทฐ๋ฅผ ๋ณผ ์ ์๋ค.
- ๋ฌ๋๋ฐฐ์ง๋ ์์ ์ด ๋ณด์ ํ ๋ชจ๋ ๋ฐฐ์ง๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ, ๋ฐฐ์ง ํด๋ฆญ์ ๋ฐฐ์ง ์์ธ๋ณด๊ธฐ๋ฅผ ํ ์ ์๋ค.