๐ฑ Today I Learned (์ง์ค์๊ฐ : 7์๊ฐ 35๋ถ)
- (9:30 ~ 9:50 / 20๋ถ) TIL ์ ๋ฆฌ ๋ฐ ์์ ์ค๋น
- (10:00 ~ 11:00 / 1์๊ฐ) ํ ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- (11:00 ~ 12:25 / 1์๊ฐ 25๋ถ) ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ํ์ด
- (12:25 ~ 12:45 / 20๋ถ) ๊ฐ์ ์๊ฐ, ํ๋๊ทธ๋จผํธ ์ค์ต
- (19:00 ~ 20:30 / 1์๊ฐ 30๋ถ) ๊ฐ์ ์๊ฐ, ํ๋๊ทธ๋จผํธ ์ค์ต
- (20:30 ~ 21:00 / 30๋ถ) ํ ๋ฐ์ผ๋ฆฌ ํ๊ณ
- (21:00 ~ 22:30 / 1์๊ฐ 30๋ถ) ์ด์ ๋ก๊ทธ์ธ ๊ณผ์ ํผ๋๋ฐฑ ์ ๋ฆฌ ๋ฐ ํด์ค ๊ฐ์
- (22:30 ~ 23:30 / 1์๊ฐ) ๋ฒ ์ด์ง๋ฐ ๊ฐ์ ์๊ฐ
*** ์ ์ฌ 13:00 ~ 14:00 / ์ ๋ 18:00 ~ 19:00 ์ ์ธ
โ
๐ ์ด๋ฒ ์ฃผ ๋ชฉํ
[V] ์๋ จ ๊ฐ์ ๋ค ๋ฃ๊ธฐ- [ ] ์คํ ๋ค๋ 2์ฃผ์ฐจ ์ฌํ ๊ตฌํ : ์๋ จ ๊ฐ์ ์ฒดํ(fragment, fragment ๊ฐ์ ๋ฐ์ดํฐ์ ๋ฌ)
- [ ] ์๋ จ ๊ฐ์ธ ๊ณผ์ ํ์ ๊ตฌํ : ์๋ จ ๊ฐ์ ์ฒดํ(notification, dialog, recyclerview, fragment ์ข ํฉ)
- [ ] ์คํ ๋ค๋๋ฐ ๋ฐ๋ฆฐ ๊ฐ์, ๊ณผ์ ๋ฃ๊ธฐ
- [ ] ์ ์ฐฝ๊ฒฝ ๋ด์ฉ ์ ๋ฆฌ
[V] ์ ๋ฌธ ๊ฐ์ธ ๊ณผ์ ํด์ค ํ์ต- [ ] ๋ฒ ์ด์ง๋ฐ ๊ฐ์ 4์ฃผ์ฐจ๊น์ง
- [ ] ๋ฐ๋ฆฌ์ ์์ฌ ์๋๋ก์ด๋ ์์ ์ง๋ ๋ถ๋ถ๊น์ง ๋ค ํ๊ธฐ
- [ ] ์๊ณ ๋ฆฌ์ฆ ์ง์ค ์ฝ๋์นดํ
- [ ] ๋งํฌ ์๊ฐ
- [ ] (์ฌํ) KIA ๊ฐ๋ ํ๊ธฐ
- [ ] (์ฌํ) Android Developer ์ฝ๊ธฐ
- [ ] (์ฌํ) ๊ฐ์ธํ๋ก์ ํธ UI ๊ตฌํ
- [ ] (์ฌํ) ์ ๋ฒ ํ๋ก์ ํธ ์ฝ๋ ๋ฏ์ด๋ณด๊ธฐ
โ
1. ์๊ณ ๋ฆฌ์ฆ ํ์ด (3์ง๋ฒ ๋ค์ง๊ธฐ)
- Array์ List์์์ plus/add ์ฐจ์ด๋ฅผ ๋ชฐ๋ผ์ ์๋ชป ๊ตฌํํ ์ฝ๋๊ฐ ์์๋ค.
- toInt()์ toString()์ ์ด์ฉํ์ฌ ์ง๋ฒ ๋ณํ์ ํ ์ ์๋ค๋ ๊ฒ์ ์ฒ์ ์๊ฒ๋์๋ค.
- ๋ค๋ง toInt() toString()์ ์ฌ์ฉํ ๊ฐ๋จํ ๋ฐฉ๋ฒ๋ณด๋ค, ๋ด๊ฐ ๊ธธ๊ฒ ์ ์ ์ฝ๋์ ์คํ์๋๊ฐ ๋ ๋น ๋ฅธ ๊ฒ์ ์๊ฒ๋์๋ค. ์ฝ๋์ ๊ธธ์ด์ ๊ด๊ณ์์ด ๋ก์ง์ ๋ฐ๋ผ ์คํ์๋๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ํ์ ํ๊ณ ์ด์ ๋ฅผ ์ฐพ๊ณ ์ถ์๋ค.
2. ๊ฐ์ ์๊ฐ ๋ฐ ๊ตฌํ ์ค์ ๊ถ๊ธ์ฆ
๐กConstraintLayout ์์์์ ๋น์จ ์ค์
- Constraint Layout์์ ํ๋ฉด ๋น์จ์ ์ค์ ํ๊ธฐ ์ํด layout_constraintHeight_percent๋ฅผ ์ด์ฉ
- ์ด ๊ฒฝ์ฐ layout_height๊ฐ์ 0dp๋ก ์ค์ ํด์ผ constraint์ ๋งค์น๋์ด ๊ตฌ์กฐ๊ฐ ์กํ๋ค.
- ๋ฐ๋๋ก constraintWidth_percent๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ layout_width๊ฐ์ 0dp๋ก ์ค์ ํด์ผํ๋ค. - ํด๋น ๋ด์ฉ์ ์ ๋ฒ ํ๋ก์ ํธ ์งํํ๋ฉด์๋ ๋ฐฐ์ ์๋๋ฐ, 1์ด๋ ๊ณ ๋ฏผ ์๊ณ ์ฒดํ๋ ๋๊น์ง๋ ์ฐ์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ: https://yang-droid.tistory.com/9
๐กCompanion Object?
class TestClass {
companion object {
val name = "TestClass"
fun method() {}
}
}
fun main() {
TestClass.name
TestClass.Companion.name
TestClass.method()
TestClass.Companion.method()
}
- ํ๋๊ทธ๋จผํธ์์ ํ๋๊ทธ๋จผํธ๋ก ๊ฐ์ ๋๊ฒจ ๋ฐ์๋, companion object๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์๋ค.
์ด์ ํ๋ก์ ํธ์์๋ ํด๋น ๊ฐ๋ ์ ๋ํ ์ ํํ ์ดํด ์์ด ์ฌ์ฉํ ๊ฒฝํ์ด ์๋ค. - companion object์ ๊ด๋ จํ์ฌ ์๋ฐ static๊ณผ์ ์ฐ๊ด์ฑ, ์ค์ ์ด๋ ์ผ์ด์ค์์ ์ ํํ ์ฌ์ฉํ๋์ง์ ๋ํด ํ๊ตฌ๊ฐ ํ์ํด๋ณด์๋ค. ์ฝํ๋ฆฐ์ object ํค์๋๋ ์๋ฐ์ static ํค์๋์ new ํค์๋๋ฅผ ๋์ ํ๋ค. ํด๋์ค ์ ๋ณด ์ ์ฌ์ ๊ฐ์ฒด ์ ์ธ์ด ๋์์ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฒ์ด๋ค.
- object ํค์๋์์ ์ฐจ์ด์ ์
1. 'ํด๋์ค ๋ด๋ถ์ ์๋ object'๋ฅผ ๊ตณํ ํํ
2. companion object ๋ด๋ถ์ ์๋ ๋ณ์,๋ฉ์๋์ ๋ํ ์ ๊ทผ์ ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ณด์ด๋๋ก ๋์์ํ ๊ฒ - ์ฐธ๊ณ ๋ธ๋ก๊ทธ : (๋งํฌ1) (๋งํฌ2)
3. ์ด์ ๋ฐ์ ๊ฐ์ธ๊ณผ์ ํผ๋๋ฐฑ ๋ฐ ํด์ค
๐กํผ๋๋ฐฑ ๋ด์ฉ ์ ๋ฆฌ
COMPONENT TYPE ABBREVIATIONS (This list shows two letters which is plenty)
Frame Layout: fl
Linear Layout: ll
Table Layout: tl
Table Row: tr
Grid Layout: gl
Relative Layout: rl
Text View: tv
Button: bt
Check Box: cb
Switch: sw
Toggle Button: tb
Image Button: ib
Image View: iv
Edit Text: et
Radio Group: rg
List View: lv
Grid View: gv
Fragment: fr
- ๋ณดํต xmlํ์ผ์์ ์ปดํฌ๋ํธ ํ์
์ปจ๋ฒค์
์ ๋ฐ๋ผ btn_back, ll_linearlayout ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ช
๋ช
์ ํ์๋ค.
(์ฝ๋ ์ปจ๋ฒค์ ์ ๋ํ ์ ๋ณด: ๋งํฌ) - ๋ค๋ง ์ด๋ฐ xml ์ปดํฌ๋ํธ์ ์์ด๋๋ฅผ ๊ฐ์ ธ์ findViewById๋ก ๋ณ์/์์์ ๋ฃ์ด์ค ๋๋ xml ์ปดํฌ๋ํธ ํ์
์ปจ๋ฒค์
์ผ๋ก ๋ช
๋ช
ํ๋ ๊ฒ์ด ์๋๋ผ, val btnBack์ฒ๋ผ ์นด๋ฉ์ผ์ด์ค๋ก ๋ช
๋ช
ํด์ผ ํ๋ค๊ณ ํ๋ค.
์ฌ์ค ๋์ค์๋ ๋๋ถ๋ถ ๋ทฐ๋ฐ์ธ๋ฉ์ ์ด์ฉํ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ธด ํ์ง๋ง, ๊ฐํน ์ด์ ์ ๊ตฌํ๋ ์ฝ๋๋ ์ฌ์ ํ findViewByID๋ก ๋์ด ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ์์๋๊ธด ํด์ผํ ๊ฒ ๊ฐ๋ค. - ํ ์คํธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํ์๋ค.
- Toast.makeText(this.applicationContext,"ํ ์คํธ ๋ฉ์์ง", Toast.LENGTH_SHORT).show()
๊ทธ๋ฐ๋ฐ this.applicationContext๊ฐ ์๋ this๋ก ์ ๋ ฅํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค.
- this: this๋ ํ์ฌ ์กํฐ๋นํฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ฐ๋ผ์ this๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์กํฐ๋นํฐ์ ์ปจํ
์คํธ๊ฐ ์ ๋ฌ๋๋ค.
์ด ๊ฒฝ์ฐ, ํ ์คํธ ๋ฉ์์ง๊ฐ ํ์ฌ ์กํฐ๋นํฐ์ ๊ด๋ จ๋ ์ปจํ ์คํธ์์ ๋ณด์ฌ์ง๋ค. - this.applicationContext: this.applicationContext๋ ํ์ฌ ์กํฐ๋นํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์กํฐ๋นํฐ์๋ ๋ ๋ฆฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๋ํ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ๋ค. ๋ฐ๋ผ์ this.applicationContext๋ฅผ ์ฌ์ฉํ๋ฉด ์กํฐ๋นํฐ์๋ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ ๋ฉ์์ง๊ฐ ๋ณด์ฌ์ง๋ค.
- this: this๋ ํ์ฌ ์กํฐ๋นํฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ฐ๋ผ์ this๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์กํฐ๋นํฐ์ ์ปจํ
์คํธ๊ฐ ์ ๋ฌ๋๋ค.
- ์๋ ์ ๋ ฌ๊ณผ ํด๋ฆฐ ์ฝ๋์ ๋ํด์๋, ๊ฐ์ธ๊ณผ์ ์ดํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์๋ ๋ง์ด ๋๊ผ๋ ๋ถ๋ถ์ด๋ค.
ctrl + alt + l์ ์ต๊ดํํ์.
๐ก๊ณผ์ ํด์ค
- ์์ผ๋ก ํ๋์ฝ๋ฉ ์์ด ์ฌ๋งํ๋ฉด strings.xml๊ณผ colors.xml ์ ์ฌ์ฉํ์. ๋น๋จ ๋ฒ์ญ ์์ ๋ฟ๋ง์๋๋ผ, ๋์์ธ ์์ 50๊ฐ์ ๊ฐ๊ฐ #FA30F9๊ณผ ๊ฐ์ RGB ์ฝ๋๊ฐ์ผ๋ก ์ ๋ ฅํด๋๊ณ ๋์ค์ ๋ค์ ์์ ํ๊ณ ์ ํ๋ฉด ๋ต๋ ์๋ค.
- ํ์๊ฐ์ ์์ ๋ก๊ทธ์ธ์ผ๋ก ๋ค์ ๋ณด๋ด์ง ๋, ๋ ๊ทธ๋ฅ finish()๋ฅผ ์ฌ์ฉํ๋๋ฐ ํํฐ๋์ if(!isFinishing) finish() ๋ฅผ ์ฌ์ฉํ๋ค. ํน์๋ผ๋ ์กํฐ๋นํฐ๊ฐ ๋ค๋ฅธ ์์ธ์ ์ํด ์ข ๋ฃ์ค์ผ ๋ finish()๊ฐ ๋ค์ ํธ์ถ๋๋ฉด ์๋๊ธฐ์ ํ ๋ฒ ๋ ํ์ธ์์ ์ ๊ฑฐ์น๋ ๊ฒ์ด๋ผ ํ๋ค.
activityResultLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){
if (it.resultCode == RESULT_OK) {
val user_id = it.data?.getStringExtra("id") ?: ""
...
}
}
- ๋ํ setResult(RESULT_OK, intent)๋ฅผ ํ์๊ฐ์ ์์ ๋ณด๋ผ ๋ ์คํํ์์๋ ๋ถ๊ตฌํ๊ณ , ๋ก๊ทธ์ธ ํ์ด์ง์์ ๋ค์ ๋ฐ์ ๋ ์๋์ ๊ฐ์ด if๋ฌธ์ผ๋ก resultCode๊ฐ RESULT_OK๊ฐ ๋ง๋์ง ํ ๋ฒ ๋ ํ์ธํ์ จ๋ค.
๋ด๊ฐ ํ ์ด๋ฏธ์ง ๋๋ค ๊ตฌํ
val profilePic = findViewById<ImageView>(R.id.img_profile)
val img : IntArray = intArrayOf(R.drawable.pic1, R.drawable.pic2,...)
val random = Random()
val num = random.nextInt(img.size)
// num ๋ณ์์ 0๋ถํฐ (images์ ๊ธธ์ด - 1) ๋งํผ ์ซ์ ์ค ๋ฌด์์ Int ์ ์ฅ
profilePic.setImageResource(img[num])
// ๋๋ค์ผ๋ก ๋ฝ์ ์ซ์์ ์ฌ์ง์ ๋ฃ์
ํํฐ๋์ด ํ์ ๋๋ค ๊ตฌํ
val iv_logo = findViewById<ImageView>(R.id.iv_home_logo)
val id = when ((1..6).random()) {
1 -> R.drawable.ca1
2 -> R.drawable.ca2
3 -> R.drawable.ca3
4 -> R.drawable.ca4
5 -> R.drawable.ca5
else -> R.drawable.ca1
}
iv_logo.setImageDrawable(ResourcesCompat.getDrawable(resources, id, null))
- ์ด๋ฏธ์ง ๋๋ค ๊ตฌํ์ ๋ํ ๋ฐฉ๋ฒ๋ ์กฐ๊ธ ๋ฌ๋๋ค.
- when ๋ด์์ ๊ทธ๋ฅ .random()์ ๋ฐ๋ก ์จ์ ์ด๋ฏธ์ง๋ฅผ ๊บผ๋ด์คฌ๋ค. ์์ฒญ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์๋ค.
selector_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent"/>
<corners android:radius="10dp"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/yellow"/>
<corners android:radius="10dp"/>
</shape>
</item>
</selector>
selector_pic.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sad" android:state_pressed="true"/>
<item android:drawable="@drawable/happy" android:state_focused="true"/>
<item android:drawable="@drawable/happy"/>
</selector>
- ํด์ค ์์์ด ๊ธฐ์กด์ ์ฃผ์ด์ง ๊ณผ์ ๋ ์กฐ๊ธ ๋ฌ๋๋๋ฐ, ๋ฒํผ์ ๋๋ ์ ๋ ์๊น์ด ๋ณํ๋ ๋ถ๋ถ์ ๋ํ ๋ด์ฉ๋ ์์๋ค.
- (1) ๋ฒํผ ์์ญ์ ๋ ์ด์์์ผ๋ก ๋ง๋ค๊ณ ํด๋น ๋ ์ด์์์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ฅผ selector_button.xml ํ์ผ๋ก ์ง์
(2) item์ ์ํ์ ๋ฐ๋ผ์ ๋ ๊ฐ๋ก ๋๋๊ณ , ํ ์์ดํ ์ <item android:state_pressed="true">๋ก ๋๋ ธ์ ๋์ ์๊น์ ์ง์ ํ๋ค.
(+) ์ผ๋ฐ ์ฌ์ง์ด๋ ์์ด์ฝ์ ๊ฒฝ์ฐ์๋ ๋์ผํ๊ฒ xmlํ์ผ์ ๋ง๋ค์ด์ ์ํ๋ณ๋ก ์์ ์ด ๊ฐ๋ฅํ๋ค.
4. ๋ฒ ์ด์ง๋ฐ 2์ฃผ์ฐจ ๊ฐ์ ์ผํ
- ๊ฐ์ธ์ ์ธ ์์ฌ์ผ๋ก ์คํ ๋ค๋๋ฐ ์ด์ธ์ ๋ฒ ์ด์ง๋ฐ ๊ฐ์๋ฅผ ์๊ฐํ์๋ค.
๐ก ๋ฒ ์ด์ง๋ฐ 2์ฃผ์ฐจ
- ๋ทฐ๋ฐ์ธ๋ฉ์ด ๋ฑ์ฅํ์ง๋ ๊ต์ฅํ ์ค๋ ๋์๋ค. findViewbyID๋ฐฉ์์ ๊ฑฐ์ 10๋ ๋ ๋์ ๊ตฌ๋ฆฐ ๋ฐฉ์์ด๋ค.
- ์ฝ๋๋ฅผ ์ชผ๊ฐ๋ ๊ฒ๊ณผ ํด๋ฆฐ์ฝ๋์ ๋ํ ๋ด์ฉ์ด ์์๋ค. ์ฌ๋งํ๋ฉด ํจ์(๋ฉ์๋)๋ฅผ ๋ง์ด ๋ง๋ค๊ณ , ์กฐ๊ฑด๋ฌธ ์์ ์กฐ๊ฑด๋ ๊ธธ์ด์ง๋ฉด ๋ณ์๋ก ์ชผ๊ฐ์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๊น๋ํ๊ฒ ํ๋ค. ๊ฐ์ข ๊ฐ๋ฐ ์์ ์๋ ์ฌ๋งํ๋ฉด ๋ณ์์ ๋ฉ์๋๋ฅผ ๋ง์ด ์์ฑํ๋ ๊ฒ์ ์ถ์ฒํ๋ ๊ฒ ๊ฐ๋ค. ํจ์ ๋จ์๋ก ๋์์ ์ชผ๊ฐ๋ผ.
- ํ์ ์์๋ ์ฝ๋๋ฅผ ์ธ์์ ์น๋ ์ฌ๋์ ์๋ค. ํ์ ๊ฐ๋ฐ์ ๋ํ ๋ทฐ๋ฐ์ธ๋ฉ ๊ตฌํ์ ์ํ 4์ค์ง๋ฆฌ ์ฝ๋์กฐ์ฐจ๋ ๋ณดํต ์๋๋ก์ด๋ ๋๋ฒจ๋กํผ ํํ์ด์ง๋ฅผ ์ฐธ์กฐํ๊ณ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐํ์ฌ ์ ์ฉํ๋ค.
- ์ง์ฐ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ๋ณ์๋ช
? = null ๋ก ์ด๊ธฐํํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋ํด์๋ ์ค๋ช
์ด ์์๋ค.
์๋ฅผ ๋ค์ด private var job: Job? = null ๋ก ์ ์ธ๋ ๊ฒ์ lateinit var๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด, ์ฌ์์์ job?.cancel()์ด๋ผ๋ ์ฝ๋๊ฐ ์คํ๋๊ณ ์ดํ์ job = ~ ์ด๊ธฐํ๊ฐ ๋ ์ ์๋๋ฐ, ์ด ๊ฒฝ์ฐ ๊ฐ์ด ์ด๊ธฐํ๋์ง ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. - ๋น์ฉ์ด ํฌ๊ฒ ๋ฐ์ํ ์ ์๋ ์์ ๋ค์ lazy๋ก ์ ์ธ๋๋ฉด ์ ๋๋ค.
- ๋ณดํต setupButton()๊ณผ ๊ฐ์ด ํจ์๋ฅผ ๋ง๋ค๊ณ :๋ก ๋ฆฌํด๊ฐ์ ์ง์ ํ์ง ์์ ๋, ๊ธฐ๋ณธ๊ฐ์ผ๋ก : Unit ํ์
์ด ์จ๊ฒจ์ ธ ์๋ ๊ฒ์ด๋ค. ์๋ฐ์ void๋ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
(์ค์ ๋ก ์ ๋ ฅํ๋ฉด redundant type = ๋ถํ์ํ ํ์ ์ผ๋ก ์ง์ฐ๋ผ๊ณ ๋ธ) - Add names to call arguments(Named Parameter)๋ฅผ ์ต๊ดํํด๋ผ.
์๋ฅผ ๋ค์ด private fun add(a: Int, b: Int){} ๋ผ๋ ํจ์๊ฐ ์์ ๋, add(10, 20)์ด๋ผ๊ณ ์์ฑํ๊ณ alt+enter๋ฅผ ๋๋ฅด๋ฉด Add names to call arguments๊ฐ ๋์จ๋ค. ์ด๋ฅผ ํด๋ฆญํ๋ฉด add(a=10, b=20)๊ณผ ๊ฐ์ด ์์์ ์ด๋ฆ์ด ๋ถ์ฌ์ง๋ค.
์ด๋ ๊ฒ ์ง์ ํด์ผ ์ข์ ์ฝํ๋ฆฐ ์ปจ๋ฒค์ ์ ์ํ๋ค. ๋์ค์ ์ฝ๋๊ฐ ๋ณต์กํด์ ธ๋ ๋ณด๊ธฐ ํธ๋ฆฌํ๊ณ , ๋ํ ()๋ด์ ์์น๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์๊ด์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ์๋ฐ๊ฐ ๊ฐ์ง๊ณ ์์ง ์๋ ์ฝํ๋ฆฐ named parameter๋ง์ ์ฅ์ ์ด๋ค. - ์ฐธ๊ณ ๋ก fun add(a: Int = 10, b:Int){} ์ ๊ฐ์ด ๋ํดํธ๊ฐ์ ์ง์ ํ ์ ์๋ค. ๋ค๋ง ๋ํดํธ๊ฐ์ ์ง์ ํ๋ค๋ฉด named parameter๋ฅผ ๋ฐ๋์ ์์ฑํ์.
- ํจ์ ์ด๋ฆ์ ํญ์ ์๋ฌธ์๋ก ์์ํ์ฌ ์นด๋ฉ์ผ์ด์ค๋ก ์์ฑํ๊ณ , ๋์์ ๋ํ๋ด์ผ ํ๋ค. ํจ์๋ช
๊ธธ์ด๋ฅผ ์ ๊ฒฝ์ฐ๊ธฐ๋ณด๋จ ๊ธฐ๋ฅ์ด ์ง๊ด์ ์ผ๋ก ์ ๋ํ๋ผ ์ ์๋๋ก ์์ฑํ๋ค. ํจ์๋ช
๊ธธ์ด๊ฐ ๊ธธ์ด๋ ์๊ด ์๋ค.
ํ๋ผ๋ฏธํฐ๋ ์ต๋ 4๊ฐ๊น์ง ์์ฑํ๋ ๊ฒ ์ข๋ค. ์ฝ๋ ์ดํด๊ฐ ํ๋ค์ด์ง๋ค. (์ถ์ฒ: ์ดํํฐ๋ธ ์๋ฐ)
๋ ๋ง์ ํ๋ผ๋ฏธํฐ๊ฐ ํ์ํ๋ค๋ฉด ํจ์๋ฅผ ์ชผ๊ฐ๋ ๊ฒ ์ข๋ค. - ์ ๋ณด๋ฅผ ์ฐธ์กฐํ ๋ ๋ธ๋ก๊ทธ๋ณด๋จ ๊ณต์๋ฌธ์๊ฐ ์ข๋ค.
๐ญ Retrospect
ํ์๋ถ๋ค์ด ์ ๋ฆฌํ์ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์, ๋ด๊ฐ ๋๋ฌด ํผ์์ ์ธ ๊ฐ๋ ๊ณผ ์ค๋ช ๋ง ์ ๋ฆฌํ๊ณ ์์ง๋ ์๋ ํ๋ ๊ณ ๋ฏผ์ด ๋ค์๋ค. ์ด๋ค ํ์ต ์๋ฃ๊ฐ ์ฃผ์ด์ก์ ๋ ๊ทธ๊ฑธ ์์ ํ ์ดํดํ๊ธฐ ์ํด ์ง์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ณ , ๋ก๊ทธ๋ก ๋์ฐ๋ ์์ ๋ค์ ์์ง๊น์ง๋ ํด๋ณธ ์ ์ด ์๋ค๋๊ฒ ์ค์ค๋ก ์ถฉ๊ฒฉ์ด์๋ค. ์ด๋๋ก๋ผ๋ฉด ํฅํ ์๊ฐ์ด ์ง๋ ์๋ก ๊ฐ์ ์ฃผ์ ์ ๋ํด์ ์ฌ์ํ๋ ๊น์ด๊ฐ ๋ฌ๋ผ์ง ๊ฒ ๊ฐ์์, ์ด์ ๋ ๋ชจ๋ฅด๋ ๋ด์ฉ์ ์ด๋์ ๋ ๋ง์กฑ์ค๋ฌ์ธ ๋๊น์ง ํด๊ฒฐํด ๋ณผ ์๊ฐ์ด๋ค.
ํ๋ก์ ํธ๊ฐ ๋๋๊ณ ๋ ๋ค ๋ฉฐ์น ๊ฐ์ ์ข ํด์ดํด์ก๋ ๊ฒ ๊ฐ์์, ์ค๋ ์ ๋ ๊ณผ ๋ด์ผ(ํ ์์ผ)์ ๋จ์ ๋ชฉํ์ ๊ณผ์ ๊ตฌํ์ ํ์ ์์ ๊ณํ์ด๋ค.
โ