[Android TIL] 240419 (๋‹น๊ทผ๋งˆ์ผ“ ํ•„์ˆ˜๊ณผ์ œ ๊ตฌํ˜„ ์™„๋ฃŒ, ๊นƒ ์†Œ์ŠคํŠธ๋ฆฌ ํŠน๊ฐ•)
๋ฐ˜์‘ํ˜•

 

 

 

 

 

๐ŸŒฑ Today I Learned (์ง‘์ค‘์‹œ๊ฐ„: 9์‹œ๊ฐ„ 30๋ถ„)

  1. (01:00 ~ 06:00 / 5์‹œ๊ฐ„) ๊ฐœ์ธ๊ณผ์ œ ํ•„์ˆ˜ ๊ตฌํ˜„ ํ›„ ์ทจ์นจ
  2. (09:30 ~ 10:30 / 1์‹œ๊ฐ„) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด ๋ฐ ํŒ€ ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ
  3. (16:40 ~ 18:20 / 1์‹œ๊ฐ„ 40๋ถ„) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž‘์„ฑ ๋ฐ ์ •๋ฆฌ, Git SourceTree ํŠน๊ฐ•
  4. (18:20 ~ 20:10 / 1์‹œ๊ฐ„ 50๋ถ„) ๋‹น๊ทผ๋งˆ์ผ“ ๊ฐœ์ธ๊ณผ์ œ ์ˆ˜์ • : Adapter, Parcelize๋กœ ๊ฐ’ ๋„˜๊ฒจ์ฃผ๊ธฐ ๊ตฌํ˜„ ์ค‘

*** ์ ์‹ฌ 13:00 ~ 14:00 / ์ €๋… 18:00 ~ 19:00 ์ œ์™ธ

โ€‹

๐Ÿ“… ์ด๋ฒˆ ์ฃผ ๋ชฉํ‘œ

  • [V] ์ˆ™๋ จ ๊ฐ•์˜ ๋‹ค ๋“ฃ๊ธฐ
  • [  ] ์Šคํƒ ๋‹ค๋“œ 2์ฃผ์ฐจ ์‹ฌํ™” ๊ตฌํ˜„ : ์ˆ™๋ จ ๊ฐ•์˜ ์ฒดํ™”(fragment, fragment ๊ฐ„์˜ ๋ฐ์ดํ„ฐ์ „๋‹ฌ) ํฌ๊ธฐ
  • [V] ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ๋ฐ€๋ฆฐ ๊ฐ•์˜ ๋“ฃ๊ธฐ
  • [V] ์ž…๋ฌธ ๊ฐœ์ธ ๊ณผ์ œ ํ•ด์„ค ํ•™์Šต
  • [V] ๋ฒ ์ด์ง๋ฐ˜ ๊ฐ•์˜ 4์ฃผ์ฐจ๊นŒ์ง€
  • [V] ์Šคํƒ ๋‹ค๋“œ 4์ฃผ์ฐจ ๊ณผ์ œ ๊ตฌํ˜„ 
  • [V] ์ˆ™๋ จ ๊ฐœ์ธ ๊ณผ์ œ ํ•„์ˆ˜ ๊ตฌํ˜„ : ์ˆ™๋ จ ๊ฐ•์˜ ์ฒดํ™”(notification, dialog, recyclerview, fragment ์ข…ํ•ฉ)
  • [  ] ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 5์ฃผ์ฐจ MVVM ๊ณผ์ œ ๊ตฌํ˜„
  • [  ] ์ •์ฐฝ๊ฒฝ ๋‚ด์šฉ ์ •๋ฆฌ
  • [  ] ๋ฐ€๋ฆฌ์˜ ์„œ์žฌ ์•ˆ๋“œ๋กœ์ด๋“œ ์„œ์  ์ง„๋„ ๋ถ€๋ถ„๊นŒ์ง€ ๋‹ค ํ›‘๊ธฐ
  • [  ] Fragment ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๊ตฌํ˜„ํ•œ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ
  • [  ] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง‘์ค‘ ์ฝ”๋“œ์นดํƒ€
  • [  ] ๋งํฌ ์ˆ˜๊ฐ•
  • [  ] (์‹ฌํ™”) KIA ๊ฐœ๋… ํ›‘๊ธฐ
  • [  ] (์‹ฌํ™”) Android Developer ์ฝ๊ธฐ
  • [  ] (์‹ฌํ™”) ๊ฐœ์ธํ”„๋กœ์ ํŠธ UI ๊ตฌํ˜„
  • [  ] (์‹ฌํ™”) ์ €๋ฒˆ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋œฏ์–ด๋ณด๊ธฐ

โ€‹

 

 

 

 

1. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด (ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด)

 

[kotlin] ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋ถ€๋ถ„๋ฌธ์ž์—ด (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜) : substring(), windowed()

๋ฌธ์ œ https://school.programmers.co.kr/learn/courses/30/lessons/147355 ์„ฑ๊ณต ์ฝ”๋“œ class Solution { fun solution(t: String, p: String): Int { var count = 0 // p์˜ ๊ธธ์ด ๋งŒํผ, t์˜ ๋ฌธ์ž์—ด์„ ๋ฝ‘์•„์„œ ๋น„๊ต for (i in 0 .. t.length - p.length){ va

limheejin.tistory.com

  • substring()์„ ์ด์šฉํ•œ ํ’€์ด๊ฐ€ ์ผ๋ฐ˜์ ์ด์—ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ํ†ตํ•ด windowed()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ ์•Œ์•˜๋‹ค.

 

๐Ÿ’ก substring()

val str = "Hello, world!"

val result1 = str.substring(7) // "world!"
val result2 = str.substring(7, 12) // "world"
val result3 = str.substring(7..11) // "world"
  • ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • substring(startIndex: Int): String: ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์˜ ๋๊นŒ์ง€ ์ถ”์ถœ
  • substring(startIndex: Int, endIndex: Int): String: ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ถ”์ถœ
  • substring(range: IntRange): String: ์ง€์ •๋œ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ถ”์ถœ

 

๐Ÿ’กmap

val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers) // ์ถœ๋ ฅ: [1, 4, 9, 16, 25]
  • ๊ฐ ์š”์†Œ๋ฅผ ์ฃผ์–ด์ง„ ๋žŒ๋‹ค ํ•จ์ˆ˜์— ์ ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ธฐ์กด ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ’กwindowed()

fun <T> Iterable<T>.windowed(
    size: Int,
    step: Int = 1,
    partialWindows: Boolean = false
): List<List<T>>
val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

// ์œˆ๋„์šฐ ํฌ๊ธฐ๊ฐ€ 3์ด๊ณ , ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ธ ๊ฒฝ์šฐ
val result1 = list.windowed(size = 3, step = 1)
// ๊ฒฐ๊ณผ: [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]

// ์œˆ๋„์šฐ ํฌ๊ธฐ๊ฐ€ 4์ด๊ณ , ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 2์ธ ๊ฒฝ์šฐ
val result2 = list.windowed(size = 4, step = 2)
// ๊ฒฐ๊ณผ: [[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8], [7, 8, 9, 10]]

// ์œˆ๋„์šฐ ํฌ๊ธฐ๊ฐ€ 2์ด๊ณ , ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 3์ธ ๊ฒฝ์šฐ
val result3 = list.windowed(size = 2, step = 3)
// ๊ฒฐ๊ณผ: [[1, 2], [4, 5], [7, 8], [10]]

// ๋ถ€๋ถ„ ์œˆ๋„์šฐ ํฌํ•จ
val result4 = list.windowed(size = 3, step = 2, partialWindows = true)
// ๊ฒฐ๊ณผ: [[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9], [9, 10]]

// ์œˆ๋„์šฐ ํฌ๊ธฐ๋งŒ ์„ค์ •, ์ด๋™ ๊ฑฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ 1๋กœ ์„ค์ •๋จ
val result5 = list.windowed(3)
// ๊ฒฐ๊ณผ : [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]
  • ์ฃผ์–ด์ง„ ํฌ๊ธฐ์˜ ์ฐฝ์„ ์ด๋™ํ•˜๋ฉด์„œ ์ปฌ๋ ‰์…˜์„ ๋ถ„ํ• ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • ๋ฐ˜ํ™˜ ๊ฐ’์€ ์ฃผ์–ด์ง„ ํฌ๊ธฐ์˜ ๋ถ€๋ถ„ ์ปฌ๋ ‰์…˜ ๋˜๋Š” ์œˆ๋„์šฐ
  • size: ์ƒ์„ฑํ•  ๊ฐ ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’
  • step: ์œˆ๋„์šฐ๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๊ฐ„๊ฒฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’. ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๋ฉฐ, ์ด๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์š”์†Œ์”ฉ ์ด๋™ํ•จ์„ ์˜๋ฏธ
  • partialWindows: ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„ ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ๊ฐ€ size๋ณด๋‹ค ์ž‘์„ ๋•Œ, ์ด ๋ถ€๋ถ„ ์œˆ๋„์šฐ๋ฅผ ํฌํ•จํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’. ๊ธฐ๋ณธ๊ฐ’์€ false์ด๋ฉฐ, ์ด ๊ฒฝ์šฐ ๋ถ€๋ถ„ ์œˆ๋„์šฐ๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ

 


 

 

2. ๊ฐœ์ธ๊ณผ์ œ ๊ตฌํ˜„

 

 

 

๐Ÿ”จ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๋‹ค์ด์–ผ๋กœ๊ทธ ์ถœ๋ ฅ ๋ฌธ์ œ

    override fun onBackPressed() {
        var builder = AlertDialog.Builder(this)
        builder.setTitle("์ข…๋ฃŒ")
        builder.setMessage("์ •๋ง ์ข…๋ฃŒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?")
        builder.setIcon(R.mipmap.ic_launcher)

        val listener = object : DialogInterface.OnClickListener{
            override fun onClick(dialog: DialogInterface?, which: Int) {
                when (which){
                    DialogInterface.BUTTON_POSITIVE -> finish()
                    DialogInterface.BUTTON_NEGATIVE -> dialog?.dismiss()
                }
            }
        }

        builder.setPositiveButton("ํ™•์ธ", listener)
        builder.setNegativeButton("์ทจ์†Œ", listener)
        builder.show()
    }
  • ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ, ๋ฐ”๋กœ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๊บผ์ง€์ง€ ์•Š๊ณ  ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
  • ๋‹ค๋งŒ ์ด ์ฝ”๋“œ๋กœ ์ž‘๋™์€ ํ•˜๋Š”๋ฐ, onBackPressed()๊ฐ€ deprecated ๋˜์–ด ๊ณ„์† ๋นจ๊ฐ„์ค„์ด ๋–ด๋‹ค.
  • deprecated๋˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

๐Ÿ”จ Notification ์ž‘๋™ ์˜ค๋ฅ˜ ๋ฌธ์ œ

(์™ผ์ชฝ) ์ˆ˜์ • ์ „ (์˜ค๋ฅธ์ชฝ) ์ˆ˜์ • ํ›„

  • ๊ฐ•์˜๋‚˜ ๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณ„์† ์ž‘๋™์„ ์•ˆํ•ด์„œ ์ฐพ์•„๋ดค๋”๋‹ˆ, notificationChannel์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜์™€ ์ƒˆ๋กœ์šด Notification์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ฑ„๋„id๊ฐ€ ๋‹ฌ๋ผ์ ธ ์ƒ๊ธด ๋ฌธ์ œ๋กœ ์ถ”์ธก๋œ๋‹ค.
  • ์ •ํ™•ํ•œ ๋ฌธ์ œ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํ˜น์‹œ๋‚˜ ํ•ด์„œ ๋‘ ๊ฐœ๋ฅผ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ํ•ฉ์ณ์ฃผ๊ณ , channelID๋ฅผ ์ŠคํŠธ๋ง์— ๋„ฃ์–ด์ฃผ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ž์ฒด์ ์œผ๋กœ ์„ ์–ธํ•˜๊ณ  ๋™์ผํ•˜๊ฒŒ ๋„ฃ์–ด์ฃผ๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค.
  • ์™œ String ๊ฐ’์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๋‹ค ๊ฐ™์ด ๋‚˜๋ˆ  ์“ธ ์ˆ˜ ์—†๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค.
    ๋ฐฉ๋ฒ•์˜ ๋ฌธ์ œ์ผ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ข€ ๋” ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.
  • ํ˜„์žฌ๋Š” notification ๊ถŒํ•œ์„ ์ˆ˜๋™์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ๋งŒ ์•Œ๋ฆผ์ด ์ž‘๋™๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์•Œ๋ฆผ์„ ํด๋ฆญํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , ์—†๋Š” ๊ฒฝ์šฐ ๊ถŒํ•œ๋ถ€์—ฌ์ฐฝ์ด ๋œจ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋ชจ์ž๋ž๋‹ค. ๋‹ค์‹œ ์ฐพ์•„๋ด์•ผ ํ•œ๋‹ค.

 

 

 

๐Ÿ”จ RecyclerView ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์„  ์ถ”๊ฐ€ (DividerItemDecoration)

(์™ผ์ชฝ) ์‚ญ์ œ๋œ xml (์˜ค๋ฅธ์ชฝ) ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ๊ตฌํ˜„๋œ  DividerItemDecoration

  • ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ ์•„์ดํ…œ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์„ ์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฏธ ์ •์˜๋˜์–ด ์žˆ๋Š” DividerItemDecoreation์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ItemDecoration์„ ์ƒ์†๋ฐ›์€ ํ›„ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ํ•ด์คŒ์œผ๋กœ์จ Custom ํ•œ ๊ตฌ๋ถ„์„  ์‚ฝ์ž…๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ธฐ์กด xml์ƒ์—์„œ View๋กœ ๊ตฌํ˜„ํ•˜๋˜ ๋ถ€๋ถ„์„ ์‚ญ์ œํ•˜๊ณ , DividerItemDecoration์„ ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

 

 

 

๐Ÿ”จ ์•Œ๋ฆผ ๊ถŒํ•œ ํ—ˆ์šฉํ•˜๊ธฐ

  • NotificationManagerCompat์˜ areNotificationsEnabled()๋ฅผ ์ด์šฉ

 

 

 

๐Ÿ–ฅ๏ธ DecimalFormat ์ด์šฉ

 

 

๐Ÿ–ฅ๏ธ UI ํ™•์ธ ๋ฐ notification

 

 

 

 

 


 

3. Git SourceTree ํŠน๊ฐ•

 

 

  • ํ•„์ˆ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ์“ฐ๊ฒŒ๋˜๋Š” ๋ช…๋ น์–ด: Commit / push / pull / request / merger
  • Git ํ•™์Šต ์‚ฌ์ดํŠธ: https://learngitbranching.js.org/
  • origin: ์›๊ฒฉ ์ €์žฅ์†Œ
    master: ๊ธฐ๋ณธ์ ์ธ ๋ธŒ๋žœ์น˜
    HEAD: ํ˜„์žฌ ์ž‘์—… ๊ณต๊ฐ„
  • git rebase์™€ merge์˜ ์ฐจ์ด?

 

๐Ÿ”จ ํ”ํ•œ Git ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ

  • ํ˜„์žฌ HEAD ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” Branch๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ( Main/Dev ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ )
  • ์ฝ”๋“œ ์ž‘์„ฑ์ด ์™„๋ฃŒ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ git ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ฒฝ์šฐ ( git ์ž‘์—…์ „ ํ•˜๋˜ ์ž‘์—… ๋งˆ๋ฌด๋ฆฌ๋Š” ํ•„์ˆ˜ )
  • ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•˜๋Š” Branch ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  merge ํ•˜๋Š” ๊ฒฝ์šฐ (git ์ž‘์—…์‹œ Tracking ํ•˜๊ณ  ์žˆ๋Š” Branch ์„  ์—…๋ฐ์ดํŠธ ํ•„์ˆ˜ )

 

๐Ÿ”จ Git ์ถฉ๋Œ ๋ฐฉ์ง€

  • Commit ๋˜์ง€ ์•Š์€ ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธ (git status ๋“ฑ ์ด์šฉ)
  • Main/Dev Branch Origin ์˜ ๋ณ€๊ฒฝ์ ์ด ์—†๋Š”์ง€ Pull
  • Merge ํ•˜๋Š” ๊ณผ์ •์—์„œ ์†Œ์Šค ์ถฉ๋Œ ๋ฐœ์ƒ์‹œ ์ •ํ•ด์ง„ ๋ฃฐ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์˜์‚ฌ์†Œํ†ต์„ ์ง„ํ–‰
  • gitignore ์„ค์ •, gitignore ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ํ™•์žฅ์ž ์ž…๋ ฅ (์ฃผ์˜ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋ฏ€๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ตœ๋Œ€ํ•œ ํ™œ๋™ํ•˜๊ธฐ)
  • ํŒ€์›๋“ค๊ณผ Platforms, SDK Tools ์„œ๋กœ์˜ ์„ค์น˜ ์ƒํ™ฉ์„ ๊ณต์œ ํ•˜์—ฌ ํ†ต์ผ
    > Show Package Details ํ™œ์„ฑํ™” ํ•ด์„œ ์ฐจ์ด์  ํ™•์ธ
  • ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋จผ์ € ์–˜๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์ข‹์Œ
    - Manifest.xml (Permission, Activity, Application) ํŒŒ์ผ
    - Resource Folder(String, Color, Style Theme...)
  • ํ•ญ์ƒ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ์ž ์ƒ์„ฑํ•ด์„œ ์ž‘์—…ํ›„ PR, Merge ์ง„ํ–‰

 

๐Ÿ”จ gitignore ์„ค์ •๋ฐฉ๋ฒ•

 

์ด๋ฏธ ์ €๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ํ„ฐ๋ฏธ๋„/์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ๋‚ด์˜ Git ํƒญ/Git Bash ๋“ฑ์— ์ต์ˆ™ํ•ด์ ธ์„œ ์•„์ง๊นŒ์ง€๋Š” GUIํˆด์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด์„œ ์ •ํ™•ํžˆ๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋Œ€๊ธฐ์—… ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์“ฐ๋Š” ํˆด์ด ์ •ํ•ด์ ธ ์žˆ์„ ์ˆ˜๋Š” ์žˆ๋Š”๋ฐ, ํšŒ์‚ฌ๋งˆ๋‹ค ์“ฐ๋Š” GUIํˆด์ด ๋‹ค๋ฅด๊ธฐ๋„ ํ•˜๊ณ  ๊ฒฐ๊ตญ์€ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™๊ธฐ์— ํŽธํ•œ๊ฑฐ ์ž˜ ์“ฐ๋Š” ๊ฒŒ ์ œ์ผ ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 

๐Ÿ’ญ Retrospect

์ด๋ฒˆ์ฃผ ๋ชฉํ‘œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋‹ค ๊ณ„ํš๋Œ€๋กœ ์ˆ˜ํ–‰์ด ๋œ ๊ฒƒ ๊ฐ™๋‹ค.
์ถ”๊ฐ€์ ์œผ๋กœ ๋” ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜, ์‹ฌํ™”์ ์ธ ๊ตฌํ˜„์€ ์ฃผ๋ง๋™์•ˆ ์ˆ˜ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.

์˜ค๋žœ๋งŒ์— ์บ ํ”„๊ฐ€ ์‹œ์ž‘ํ•˜๋˜ ๋•Œ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€์˜ TIL์„ ์ญ‰ ์ฝ์–ด๋ณด์•˜๋‹ค. ์–ธ์ œ ๋ญ˜ ์ฒ˜์Œ ๋ฐฐ์› ๊ณ , ์–ด๋–ค ๋Š๋‚Œ์„ ๋ฐ›์•˜๊ตฌ๋‚˜, ์–ด๋–ค ํšŒ๊ณ ๋ฅผ ํ–ˆ๊ตฌ๋‚˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ ์ฐธ ์œ ์ตํ•˜๋”๋ผ. ์Šค์Šค๋กœ๋ฅผ ๋Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐœ์ž์ทจ๊ฐ€ ๋‚จ๊ฒจ์ง€๊ณ  ์žˆ๋Š” ๋Š๋‚Œ. ๋‚ด๊ฐ€ ๋‚˜์ค‘์— ์–ด๋–ค ๋ถ„์•ผ์— ๋”ฅํ•˜๊ฒŒ ๋ฐœ์„ ๋“ค์—ฌ๋†“์„ ์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ, ์–ด๋Š ๋ถ„์•ผ๋ฅผ ๊ฐ€์„œ๋“  ์ตœ์†Œํ•œ WIL์€ ์ž‘์„ฑํ•  ๊ฒƒ ๊ฐ™๋‹ค.

โ€‹

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T