[Android TIL] 240415 (Joyce ์„œ์  ๊ณต๋ถ€, ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 4์ฃผ์ฐจ ๊ณผ์ œ UI ๊ตฌํ˜„, ๋ฒ ์ด์ง ๋ฐ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 3·4์ฃผ์ฐจ ๊ฐ•์˜)
๋ฐ˜์‘ํ˜•

 

 

 

 

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

  1. (09:25 ~ 11:00 / 1์‹œ๊ฐ„ 30๋ถ„) ๋ฐ์ผ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด ๋ฐ ํŒ€ ์Šคํฌ๋Ÿผ
  2. (11:00 ~ 12:10 / 1์‹œ๊ฐ„ 10๋ถ„) ๋ฒ ์ด์ง๋ฐ˜ ๊ฐ•์˜ 3์ฃผ์ฐจ, 4์ฃผ์ฐจ ์ˆ˜๊ฐ•
  3. (12:10 ~ 13:00 / 50๋ถ„) ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ๊ฐ•์˜ 3์ฃผ์ฐจ ์ˆ˜๊ฐ•
  4. (14:20 ~ 15:00 / 40๋ถ„) ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ๊ฐ•์˜ 4์ฃผ์ฐจ ์ˆ˜๊ฐ•
  5. (15:00 ~ 17:05 / 2์‹œ๊ฐ„ 5๋ถ„) Joyce ์•ˆ๋“œ๋กœ์ด๋“œ ์„œ์  ์ฝ๊ธฐ
  6. (17:05 ~ 18:45 / 1์‹œ๊ฐ„ 40๋ถ„) ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 4์ฃผ์ฐจ ๊ณผ์ œ ๊ตฌํ˜„ : ui ๊ตฌํ˜„ ์™„๋ฃŒ
  7. (19:50 ~ 20:30 / 40๋ถ„) ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 4์ฃผ์ฐจ ๊ณผ์ œ ๊ตฌํ˜„ : ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ ๊ตฌํ˜„ ์‹œ๋„
  8. (20:30 ~ 21:00 / 30๋ถ„) ๋ฐ์ผ๋ฆฌ ํŒ€ ํšŒ๊ณ 

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

โ€‹

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

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

โ€‹

 

 

 

1. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด (์ด์ƒํ•œ ๋ฌธ์ž ๋งŒ๋“ค๊ธฐ)

 

[Kotlin] ์ด์ƒํ•œ ๋ฌธ์ž ๋งŒ๋“ค๊ธฐ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜) : split(), mapIndexed(), toUpperCase(), toLowerCase()

๋ฌธ์ œ https://school.programmers.co.kr/learn/courses/30/lessons/12930 ์ ‘๊ทผ 1. ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹จ์–ด๋ฅผ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•œ๋‹ค. : split(" ").map { it } 2. ๋‚˜๋ˆ„์–ด์ง„ ๋‹จ์–ด๋งˆ๋‹ค ์ง์ˆ˜ ์ธ๋ฑ์Šค๋Š” ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์กฐ๊ฑด์‹์„ ์ž‘์„ฑ

limheejin.tistory.com

  • string์— split์„ ์‹ค์‹œํ•˜๋ฉด ๋ฐฐ์—ด์— ์ €์žฅ, toLowerCase()์™€ toUpperCase()์€ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜, mapIndexed()๋„ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋“ฑ ๊ธฐ์กด๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š”์ง€/์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ฃผ์˜ํ•ด์•ผ ํ•  ๊ฐœ๋…์ด ๋งŽ์•˜๋‹ค.
  • for(i in string)์„ ํ•˜๋ฉด string์— ์žˆ๋Š” char๊ฐ€ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์ง„๋‹ค๋Š” ๊ฒƒ๋„ ์ฒ˜์Œ ์•Œ์•˜๋‹ค.

 

 

๐Ÿ’กsplit

  • ๊ด„ํ˜ธ์•ˆ์˜ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ํŠน์ • ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ๊ฐ์˜ ๋ถ€๋ถ„์„ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
val str = "apple banana orange"
val parts = str.split(" ")
println(parts) // [apple, banana, orange]
  • ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” str ๋ฌธ์ž์—ด์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด parts ๋ฐฐ์—ด์— ์ €์žฅํ•จ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ parts ๋ฐฐ์—ด์—๋Š” "apple", "banana", "orange" ์„ธ ๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ์Œ
val str = "apple,banana,orange,grape"
val fruits = str.split(",", limit = 2)
println(fruits) // [apple, banana, orange, grape]
  • split ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์ œํ•œ๋œ ๊ฐœ์ˆ˜์˜ ๋ถ„๋ฆฌ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋‚˜๋ˆŒ ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •
  • ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” limit ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ๋ถ€๋ถ„์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ fruits ๋ฐฐ์—ด์—๋Š” "apple", "banana,orange,grape" ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ์Œ

 

 

๐Ÿ’กtoLowerCase(), toUpperCase()

val str = "Hello, World!"

val lowerCaseStr = str.toLowerCase()
println(lowerCaseStr) // ์ถœ๋ ฅ: hello, world!

val upperCaseStr = str.toUpperCase()
println(upperCaseStr) // ์ถœ๋ ฅ: HELLO, WORLD!
  • ๋ฌธ์ž์—ด์˜ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ณ€ํ™˜
  • ์ด ๋ฉ”์„œ๋“œ๋“ค์€ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›๋ณธ ๋ฌธ์ž์—ด์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ

 

 

๐Ÿ’กmapIndexed()

fun <T, R> Iterable<T>.mapIndexed(transform: (index: Int, T) -> R): List<R>
val list = listOf("apple", "banana", "orange")

// ๊ฐ ์š”์†Œ์™€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์™€ ํ•จ๊ป˜ ๋ฌธ์ž์—ด์„ ๋ณ€ํ™˜
val result = list.mapIndexed { index, element ->
    "$index: ${element.toUpperCase()}(${element.length})"
}

println(result) // ์ถœ๋ ฅ: [0: APPLE(5), 1: BANANA(6), 2: ORANGE(6)]
  • ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
  • ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์ง€์ •๋œ ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋งค๊ฐœ๋ณ€์ˆ˜(transfrom): ์š”์†Œ์™€ ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์ ์šฉํ•  ๋ณ€ํ™˜ ํ•จ์ˆ˜. ์ธ๋ฑ์Šค์™€ ์š”์†Œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ  ๋ณ€ํ™˜๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜
  • ๋ฐ˜ํ™˜๊ฐ’: ๋ณ€ํ™˜๋œ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋˜์–ด ๋ฐ˜ํ™˜

 

 

 


 

 

 

2. ๋ฒ ์ด์ง๋ฐ˜ 3/4์ฃผ์ฐจ ๊ฐ•์˜

 

 

๐Ÿ’ก ๋ฒ ์ด์ง๋ฐ˜ 3์ฃผ์ฐจ

  • ์ „์—ญ๋ณ€์ˆ˜๋Š” ํ•„์ˆ˜์ ์ธ ์ƒํ™ฉ ์ด์™ธ์—” ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž. ํ•จ์ˆ˜์™€ ํŒŒ์ผ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์ „์—ญ๋ณ€์ˆ˜์˜ ๊ฐ’์ด expectation๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๋‹ค ์ฐพ์•„๋‚ด์„œ ๋‹ค์‹œ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.
    ํŠนํžˆ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ์ง€์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜๋ฉฐ, ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉ์‹œ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ํ•ญ์ƒ val๋กœ ์„ ์–ธํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๊ณ , ๋‚ด๊ฐ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ var๋กœ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ
  • Nullability๋ฅผ ์„ค์ •ํ•  ๋•Œ, ์ฝ”ํ‹€๋ฆฐ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ปจ๋ฒค์…˜์œผ๋กœ๋Š” let์„ ์‚ฌ์šฉํ•˜์—ฌ Null์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ๋Œ€์ฒด์ ์œผ๋กœ๋Š” let์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋‹ค.
    fun main(){
        something?.let{
            println(it) // something
        }โ€‹
  • ์—˜๋น„์Šค ์—ฐ์‚ฐ์ž ?: ๋’ค์—๋Š” a = b์™€ ๊ฐ™์€ ์„ ์–ธ์‹์ด ์ง์ ‘์ ์œผ๋กœ ์˜ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ run๋ธ”๋ก์„ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
    var something: String? = null
    
    something?.let {
        println(it)
    } ?: run {
            nullCount = nullCount + 1
        }
    }โ€‹
  • ์•„๊นŒ ๋งํ–ˆ๋“ฏ, Nullability๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ณดํ†ต์€ ?.let{ } ?: ์„ ์ปจ๋ฒค์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ if-else ์‚ฌ์šฉ์ด ์˜ณ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค.
    ๋ฐ”๋กœ let ์Šค์ฝ”ํ”„ ๋‚ด์˜ ๊ฐ’์ด Null์ผ ๋•Œ๋‹ค. ์ง€์ •ํ•œ ๊ฐ’์ด null์ด ์•„๋‹ˆ์–ด๋„, ์Šค์ฝ”ํ”„ ์•ˆ์ด Null์ด ๋˜๋ฉด ์—˜๋น„์Šค์—ฐ์‚ฐ์ž ๋’ค๋ฅผ ์ถœ๋ ฅํ•ด๋ฒ„๋ฆฌ๋Š” ์œ„ํ—˜์„ฑ์ด ์žˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฒ ์ด์ง๋ฐ˜ 4์ฃผ์ฐจ

  • ๋‘ ๊ฐœ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์—ฐ๊ฒฐ ํ›„ ๋„˜๊ฒจ์ฃผ๊ณ  ๋‹ค์‹œ ๋Œ์•„์˜ค๋Š” ๊ณผ์ •
    (1-1) MainActivity์—์„œ onPause
    (1-2) SecondActivity์—์„œ onCreate - onStart - onResume
    (1-3) MainActivity์—์„œ onStop
    (2-1) SecondActivity์—์„œ onPause
    (2-2) MainActivity์—์„œ onRestart - onStart - onResume
    (2-3) SecondActivity์—์„œ onStop 
  • ํ™”๋ฉด์„ ํšŒ์ „ํ•˜๊ฒŒ ๋˜๋ฉด onSaveInstanceState - onDestroy - ๋‹ค์‹œ onCreate - onStart - onRestoreInstanceState - onResume ์ด ํ˜ธ์ถœ๋˜๋ฉด์„œ ์•ฑ์˜ ์ƒ์• ์ฃผ๊ธฐ๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜์–ด๋ฒ„๋ฆผ
  • ํ™”๋ฉด์„ ํšŒ์ „ํ•  ๋•Œ ๊ฐ’์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด์ฃผ์–ด์•ผ ํ•จ (Bundle์— ๊ธฐ๋ก)
    (1) ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์—ญ๋ณ€์ˆ˜๋กœ count๋ผ๋Š” ๊ฑธ ์„ ์–ธํ•ด์ค€๋‹ค์Œ,
    (2) onSaveInstanceState์—์„œ count ๊ฐ’์„ ์ €์žฅํ•ด๋‘๊ณ : outState.putInt("count", count)
    (3) onRestoreInstanceState์—์„œ savedInstanceState.getInt("count") ๋“ฑ์œผ๋กœ ํ‚ค๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋จ

 

 

 


 

 

3. ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 3/4์ฃผ์ฐจ ๊ฐ•์˜

 

๐Ÿ’ก ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 3์ฃผ์ฐจ

  • ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ๋ฅผ ์ƒํ™œํ™”ํ•˜๋ผ.
  • Fragment๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, Activity๋‚˜ ๋‹ค๋ฅธ ํ”„๋ž˜๊ทธ๋จผํŠธ์— ํ˜ธ์ŠคํŒ…๋˜์–ด์•ผ ํ•œ๋‹ค.
    Activity๊ฐ€ onPause() ์ƒํƒœ์ผ ๋•Œ ํ•ด๋‹น ์•กํ‹ฐ๋น„ํ‹ฐ์— ์†ํ•ด์žˆ๋˜ fragment๋„ ์ผ์‹œ ์ •์ง€๋˜๋ฉฐ, 
    ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์†Œ๋ฉธ๋˜๋ฉด ํ•ด๋‹น ํ”„๋ž˜๊ทธ๋จผํŠธ๋„ ์†Œ๋ฉธ๋œ๋‹ค.
  • ์ด์ „๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ์ธํ…ํŠธ๋ฅผ ํ•  ๋•Œ๋Š” putExtra("ํ‚ค", ๊ฐ’) ํ•˜๋‚˜ํ•˜๋‚˜ ์ž‘์„ฑํ•˜๋ฉฐ ํ‚ค์™€ ๊ฐ’์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ „๋‹ฌํ–ˆ์ง€๋งŒ,
    ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ธŒ์ ํŠธ ๋‹จ์œ„๋กœ ๋ฌถ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ (์˜ˆ: putExtras(bundleOf(*pair))
    ๋ฒˆ๋“ค์€ Parcelable๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ (Serializable ์ง๋ ฌํ™”๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์ž„)
  • (๋ผ์ด๋ธŒ์ฝ”๋”ฉ)
    - ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ data๋ฅผ ๋„ฃ๋Š” ๋ถ€๋ถ„์€ ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•ด data ํด๋”๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ์–ด์คŒ
    - data๋ฅผ ๋งŒ๋“ค๋• data class๋กœ ์ƒ์„ฑํ•˜์—ฌ val๋กœ data์˜ ๋ถ„๋ฅ˜๋ฅผ ์ƒ์„ฑํ•ด์ค€๋’ค
      datalist๋ฅผ ์ฝ”ํ‹€๋ฆฐ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ , return listOf ์•ˆ์— ๋ชฉ๋ก์„ ๋„ฃ์–ด์คŒ
    - ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด DataSource ํด๋ž˜์Šค ์ƒ์„ฑ ๋ฐ companion object ์ž…๋ ฅ (์•„์ง ํŠœํ„ฐ๋‹˜์ด ์ž‘์„ฑํ•˜์‹  ์‹ฑ๊ธ€ํ†ค์„ ๊ตฌํ˜„ DataSource.kt ๋ถ€๋ถ„์ด ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ„๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ณด์ž.)
  • inline์„ ์‚ฌ์šฉํ•˜์…จ๋Š”๋ฐ ๊ด€๋ จ ๋‚ด์šฉ์„ ์ดํ•ดํ•˜๊ณ  ์‹ถ๊ณ , ํ™•์žฅํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค!

 

๐Ÿ’ก ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 4์ฃผ์ฐจ

  • 3์ฃผ์ฐจ์— ์ง„ํ–‰ํ–ˆ๋˜ ๋ผ์ด๋ธŒ์ฝ”๋”ฉ์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•˜๋Š” ๋‚ด์šฉ์ด์—ˆ๋‹ค.
  • ์•„์ง๋„ ๋ช‡๋ช‡ ํ™•์žฅํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€์•Š๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์€ ๊ธฐ๋ณธ ํ† ๋Œ€๋ถ€ํ„ฐ ์Œ“๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ฐพ์•„๋ณด๊ณ  ์‹ถ๋‹ค.

 

 

 

 


 

 

4. ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ 4์ฃผ์ฐจ ๊ณผ์ œ ์‹œ์ž‘

 

 

  • UI๊นŒ์ง€๋Š” ๊ตฌํ˜„์„ ์™„๋ฃŒํ–ˆ๋Š”๋ฐ, ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ๋ฅผ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ ๋ถ€๋ถ„์—์„œ ๋งŽ์ด ๋ง‰ํ˜”๋‹ค.
  • ๋‚ด์ผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์—ฐ๊ฒฐ์„ ํ•ด์ฃผ๊ณ , ๋ชจ๋“ˆ๋กœ ๊ฐ’์„ ํ•œ๋ฒˆ์— ๋„˜๊ธฐ๋Š” ๊ฒƒ๊นŒ์ง€ ํ•ด ๋ณผ ์˜ˆ์ •์ด๋‹ค.

 

 

 

 


 

 

 

5. Joyce ์•ˆ๋“œ๋กœ์ด๋“œ ์„œ์  ๊ณต๋ถ€

์ด๋ฏธ ์•„๋Š” ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ , ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์€ ๊ณต๋ถ€ํ• ๊ฒธ ์„œ์  ๊ณต๋ถ€๋ฅผ ๋ณ‘ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.
์•„๋ž˜๋Š” ๊ธฐ์กด์— ์•Œ๋˜ ๋‚ด์šฉ ์ด์™ธ์— ํ—ท๊ฐˆ๋ฆฌ๊ฑฐ๋‚˜ ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„์ด๋‹ค.
์˜ค๋Š˜์€ 1ํŽ˜์ด์ง€๋ถ€ํ„ฐ 151ํŽ˜์ด์ง€๊นŒ์ง€ ๊ณต๋ถ€ํ–ˆ๋‹ค.

 

1. ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ๊ฐœ๋ฐœ ์ž…๋ฌธ

  • ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ์ƒ์†์œผ๋กœ ๋ถ™์–ด์žˆ๋Š” : AppCompatActivity()๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ–ˆ๋Š”๋ฐ, AppCompatActivityํด๋ž˜์Šค๋Š” Activity ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. AppCompatActivity ํด๋ž˜์Šค๋Š” ์˜ค๋ž˜๋œ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ ํด๋ž˜์Šค๋กœ, ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค 1.5๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ์•กํ‹ฐ๋น„ํ‹ฐ ํด๋ž˜์Šค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์ด๋ผ ํ•œ๋‹ค.
  • onCreate() ๊ด„ํ˜ธ์•ˆ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ํ˜€ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ savedInstanceState: Bundle?์— ๋Œ€ํ•ด์„œ๋„ ๊ถ๊ธˆํ–ˆ๋‹ค. null ๊ฐ’์ด ๊ฐ€๋Šฅํ•œ Bundle์„ ํŠน์ •ํ•œ ์ƒํ™ฉ์—์„œ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์ €์žฅํ•œ ๊ฐ’์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ null์ด ๊ฐ€๋Šฅํ•œ ํ˜•์‹์ด๋ฏ€๋กœ ๊ทธ๋™์•ˆ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋”ฑํžˆ ์ €์žฅ๋œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค.
  • super.onCreate(savedInstanceState)๋Š” ์ƒ์œ„ ํด๋ž˜์Šค(super)์˜ onCreate()๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ๋‹ค.
    ์ด ์ค„์ด ์—†์œผ๋ฉด, ๋‚ด๊ฐ€ ์ ์€ ์ฝ”๋“œ๋งŒ ์‹คํ–‰๋˜์–ด SuperNotCalledException๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธด๋‹ค.
  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์—์„œ activity ์•ˆ์˜ android:exported ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์•ฑ๊ณผ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. ์ฝ”ํ‹€๋ฆฐ ๋ฌธ๋ฒ• ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ธฐ

  • ์ฝ”ํ‹€๋ฆฐ์„ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด File - New - Scratch File - Kotlin ์„ ์„ ํƒํ•˜๊ณ ,
    ํ”„๋กœ์ ํŠธ ์ฐฝ์—์„œ Scratches and Consoles๋ฅผ ์„ ํƒํ•˜๋ฉด .kts ์Šคํฌ๋ž˜์น˜ ํŒŒ์ผ๋กœ ๊ฐ„๋‹จํžˆ ์ž‘๋™ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    (kt๊ฐ€ ์•„๋‹ˆ๋ผ kts์ธ ์ด์œ ๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
  • ์ฝ”ํ‹€๋ฆฐ์˜ ์ž๋ฃŒํ˜•์€ ๋ชจ๋‘ ์ฐธ์กฐํ˜•์ด๋‹ค. ์ฆ‰ ๋ชจ๋“  ์ž๋ฃŒํ˜•์ด ๊ฐ์ฒด ํ˜•ํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • val numRange : IntRange = 1..5; val charRange : CharRange = 'a' .. 'e' ์™€ ๊ฐ™์ด ๋ฒ”์œ„ํด๋ž˜์Šค ์ƒ์„ฑ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์…‹(Set)์€ ์ˆœ์„œ๊ฐ€ ์—†๋‹ค. ๋˜ํ•œ ์ค‘๋ณต๋˜์ง€ ์•Š์€ ์š”์†Œ๋“ค๋กœ ๋งŒ๋“ค์–ด์ง€๋ฏ€๋กœ, ๊ฐ™์€ ๊ฐ’์„ ์ˆ˜๋ฐฑ๋ฒˆ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๊ฐ’์€ ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค. ์ฝ๊ธฐ์ „์šฉ ์…‹ ์ƒ์„ฑ์€ setOf(1,1,2,2,3), ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ์…‹์€ mutableSetOf()๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋งต(Map)์˜ ํ‚ค๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค. ๋งต์˜ ์š”์†Œ๋Š” Pair(A,B)๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋ฅผ A to B๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.
    (์˜ˆ) val immutableMap = mapOf("name" to "junsu", "age" to 13, "height" to 160)
  • ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฃผ ์ƒ์„ฑ์ž: class Person(name : String) {} ๋ถ€๋ถ„์ด ์•„๋‹Œ ํด๋ž˜์Šค ๋ฐ”๋”” ๋‚ด๋ถ€์—์„œ constructor ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๋ณด์กฐ(๋ถ€) ์ƒ์„ฑ์ž์˜ ๊ฒฝ์šฐ, ์ฃผ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ this ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ฃผ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. 
    (์˜ˆ) class Person(name: String) { constructor(name : String, age : Int) : this(name) {} }
  • comanion ๊ฐ์ฒด: ์ •์˜๋œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด companion ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    class Dinner{
        companion object{
            val MENU = "pasta" // ์ •์  ๋ณ€์ˆ˜ ์ƒ์„ฑ
            fun eatDinner(){ // ์ •์  ๋ฉ”์„œ๋“œ ์ƒ์„ฑ
                println("$MENU is yummy!")
            }
        }
    }
    
    println(Dinner.Companion.MENU) // pasta
    println(Dinner.MENU) // Companion ์ƒ๋žต ๊ฐ€๋Šฅ -> pasta
    Dinner.eatDinner() // pasta is yummy!โ€‹
  • ์ถ”์ƒ ํด๋ž˜์Šค: ๊ทธ ์ž์ฒด๋กœ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”์ƒ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ ํด๋ž˜์Šค
    ์ƒ์†๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค์— ํŠน์ • ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์„ ๊ฐ•์ œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ. ์ถ”์ƒ ํด๋ž˜์Šค ์ž์ฒด๋กœ๋Š” ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๊ณ  ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž์‹ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋จ
    - (์˜ˆ) ๊ฒŒ์ž„์€ ์‹ค์ฒด(๊ฐ์ฒด)๊ฐ€ ์—†์ง€๋งŒ, ์˜ค๋ฒ„์›Œ์น˜๋Š” ์‹ค์ฒด(๊ฐ์ฒด)๊ฐ€ ์žˆ์Œ
       ์—ฌ๊ธฐ์„œ ๊ฒŒ์ž„์€ ์ถ”์ƒํด๋ž˜์Šค, ์˜ค๋ฒ„์›Œ์น˜๋Š” ์ถ”์ƒํด๋ž˜์Šค๋ฅผ  ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์ž„
    abstract class Game {
        fun startGame() {
            println("๊ฒŒ์ž„์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.")
        }
    
        // ์ถ”์ƒ ๋ฉ”์„œ๋“œ
        abstract fun printName()
    }
    
    class Overwatch : Game() {
        override fun printName() { // ์ถ”์ƒ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
            println("์˜ค๋ฒ„์›Œ์น˜์ž…๋‹ˆ๋‹ค.")
        }
    }
    
    val overwatch = Overwatch()
    overwatch.startGame() // ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
    overwatch.printName() // ์˜ค๋ฒ„์›Œ์น˜์ž…๋‹ˆ๋‹ค.โ€‹
  • ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค: ํŠน์ •ํ•œ ๋ฉ”์„œ๋“œ์˜ ์‹คํ–‰๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์— ๋ชฉ์ ์ด ์žˆ๋Š” ํด๋ž˜์Šค. ์ฝ”ํ‹€๋ฆฐ์€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ ๊ฐ์ฒด๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋„๋ก data class๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ฃผ ์ƒ์„ฑ์ž์—๋Š” ๋ฐ˜๋“œ์‹œ val ํ˜น์€ var ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด toString(), copy()์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ฆ
    - toString() : ๊ฐ์ฒด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ์Œ. ์ƒ์„ฑ์ž์— ํฌํ•จ๋œ ํ”„๋กœํผํ‹ฐ๋งŒ ์ถœ๋ ฅ
    - copy() : ๊ฐ์ฒด์˜ ์†์ƒ๋“ค์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ. ์ธ์ˆ˜๋กœ ๋ฐ›์€ ํ”„๋กœํผํ‹ฐ๋งŒ ํ•ด๋‹น ๊ฐ’์œผ๋กœ ๋ฐ”๋€Œ์–ด ๋ณต์‚ฌ
    data class Memo(val title : String, val content : String, var isDone : Boolean)
    var memo1 = Memo(title = "๋งˆํŠธ ๊ฐ€๊ธฐ", content = "๊ณ„๋ž€, ์šฐ์œ , ๋นต", isDone = false)
    var memo2 = memo1.copy(content = "์นซ์†”, ๊ณผ์ž") // memo1์„ ๋ณต์‚ฌํ•˜์—ฌ content ํ”„๋กœํผํ‹ฐ๋งŒ ๋ณ€๊ฒฝ
    
    println(memo1.toString())
    // Memo(title=๋งˆํŠธ ๊ฐ€๊ธฐ, content=๊ณ„๋ž€, ์šฐ์œ , ๋นต, isDone=false)
    
    println(memo2.toString())
    // Memo(title=๋งˆํŠธ ๊ฐ€๊ธฐ, content=์นซ์†”, ๊ณผ์ž, isDone=false)โ€‹
  • ์ธํ„ฐํŽ˜์ด์Šค : ํด๋ž˜์Šค๋“ค์ด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ๋” ๊ฐ•์ œํ•˜๋Š” ์—ญํ• 
    ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•œ ์ž์‹๋“ค์€, ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์— ์„ ์–ธ๋œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋“ค์„ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ๋งŒ ์ž‘๋™ํ•จ
    interface Car{
        abstract fun drive()
        fun stop() // ์ถ”์ƒํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ, ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š” abstractํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žต ๊ฐ€๋Šฅ
        fun destroy() = println("์ฐจ๊ฐ€ ํŒŒ๊ดด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.") // ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ ์—†์ด ๋””ํดํŠธ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
    }
    
    class Ferrari : Car {
        //์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋“ค์€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š์Œ
        override fun drive() {
            println("ํŽ˜๋ผ๋ฆฌ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.")
        }
    
        override fun stop() {
            println("ํŽ˜๋ผ๋ฆฌ๊ฐ€ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.")
        }
    }
    
    val myFerrari = Ferrari() // ๊ฐ์ฒด ์ƒ์„ฑ
    myFerrari.drive() // ํŽ˜๋ผ๋ฆฌ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.
    myFerrari.stop() // ํŽ˜๋ผ๋ฆฌ๊ฐ€ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
    myFerrari.destroy() // ์ฐจ๊ฐ€ ํŒŒ๊ดด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.โ€‹
  • ํ•œ ํด๋ž˜์Šค์—์„œ ํด๋ž˜์Šค๋Š” ๋‹จ ํ•œ ๊ฐœ๋งŒ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋‚˜, ์ธํ„ฐํŽ˜์ด์Šค๋Š” 2๊ฐœ ์ด์ƒ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒ์†์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    (์˜ˆ) interface Animal {} ; interface Human {} ; class Korean : Animal, Human {}
  • ๋žŒ๋‹ค์‹(Lambda Expression)์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜์˜€๋‹ค.
  • SAM(Single Abstract Method) ๋ณ€ํ™˜
    - button.setOnclickListener() {} ๋กœ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ชจ๋‘ SAM ๋ณ€ํ™˜ ๋•๋ถ„์ž„
    - ๋žŒ๋‹ค์‹์ด ์•„๋‹˜์—๋„ ๋žŒ๋‹ค์‹์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
    - ์กฐ๊ฑด: 1. ์ฝ”ํ‹€๋ฆฐ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค์—ฌ์•ผ ํ•  ๊ฒƒ
               2. ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—๋Š” ๋”ฑ ํ•œ ๊ฐœ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ์กด์žฌํ•  ๊ฒƒ

 

3. ๋ ˆ์ด์•„์›ƒ ์—๋””ํ„ฐ์™€ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ

  • ์ด๋ฏธ ๋‹ค ์•„๋Š” ๋‚ด์šฉ๋ฐ–์— ์—†์–ด์„œ ์ •๋ฆฌํ•  ๊ฒŒ ์—†์—ˆ๋‹ค.

 

4. ํ™”๋ฉด ์ œ์–ดํ•˜๊ธฐ (์•กํ‹ฐ๋น„ํ‹ฐ, ํ”„๋ž˜๊ทธ๋จผํŠธ)

  • ์•ˆ๋“œ๋กœ์ด๋“œ 4๋Œ€ ๊ตฌ์„ฑ์š”์†Œ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ
    (1) ์•กํ‹ฐ๋น„ํ‹ฐ: ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
    (2) ์„œ๋น„์Šค: ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์กฐ์ž‘ ์ˆ˜ํ–‰
    (3) ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฆฌ์‹œ๋ฒ„: ์•ฑ ๋ฐ–์—์„œ ์ผ์–ด๋‚œ ์ด๋ฒคํŠธ๋ฅผ ์•ฑ์— ์ „๋‹ฌ
    (4) ์ฝ˜ํ…ํŠธ ํ”„๋กœ๋ฐ”์ด๋”: ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋‹ค๋ฅธ ์•ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • ์•กํ‹ฐ๋น„ํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ ์ค‘ onPause()๋Š” ์ง€์†๋˜๋Š” ์‹œ๊ฐ„์ด ๊ต‰์žฅํžˆ ์งง์œผ๋ฏ€๋กœ, ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋“ฑ ์ค‘์š”ํ•˜๊ฑฐ๋‚˜/์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ํ•˜๋ฉด ์•ˆ ๋จ. (๋‹ค์Œ ์ฝœ๋ฐฑ์ธ onStop() ์—์„œ ํ™œ์šฉ)
  • ์ด ์ฑ•ํ„ฐ ๋˜ํ•œ ๋Œ€๋ถ€๋ถ„์ด ์•„๋Š” ๋‚ด์šฉ์ด์—ˆ๋‹ค.

 

5. ํ™”๋ฉด ๊ตฌ์„ฑํ•˜๊ธฐ (๋ทฐ(์œ„์ ฏ))

  • ๋ทฐ = ์•ฑ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ (๋ฒ„ํŠผ, ์ด๋ฏธ์ง€, ๋ฆฌ์ŠคํŠธ, ์ž…๋ ฅ์ฐฝ ๋“ฑ = ์œ„์ ฏ ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ)
    ๋ทฐ๊ทธ๋ฃน = ๋ ˆ์ด์•„์›ƒ์ด๋ฉฐ ๋ทฐ ๊ทธ๋ฃน ๋˜ํ•œ ๋ทฐ์— ์†ํ•จ (๋ฆฌ๋‹ˆ์–ด ๋ ˆ์ด์•„์›ƒ, ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ ๋“ฑ)
  • 151ํŽ˜์ด์ง€๊นŒ์ง€ ๊ณต๋ถ€ํ•˜์˜€๊ณ , ๋‚ด์ผ ๋‹ค์‹œ ์ด์–ด์„œ ๊ณต๋ถ€ํ•  ์˜ˆ์ •์ด๋‹ค.

 

 

 

๋”๋ณด๊ธฐ

+ ์ž๋ณธ์ฃผ์˜ 1๋ถ€ ๋‚ด์šฉ ์ •๋ฆฌ (ํ† ์š”์ผ ์ˆ˜ํ–‰)

 

[๋‹คํํ”„๋ผ์ž„ : ์ž๋ณธ์ฃผ์˜] 1๋ถ€ - ๋ˆ์€ ๋นš์ด๋‹ค ์š”์•ฝ๋ณธ

ํ˜„๋Œ€์‹œ๋Œ€๋Š” ๊ธˆ์œต์ž๋ณธ์ฃผ์˜, ์ฆ‰ ๋ˆ์ด ์ง€๋ฐฐํ•˜๋Š” ์‹œ์žฅ์ด๋‹ค. ์ž๋ณธ์ฃผ์˜์— ์‚ด์•„๊ฐ€๋Š” ์‹œ๋ฏผ์œผ๋กœ์„œ ์ด ์‹œ์Šคํ…œ์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ ์ž ์ž๋ณธ์ฃผ์˜ ๋‹คํ๋ฉ˜ํ„ฐ๋ฆฌ๋ฅผ ๋ณด๊ณ , ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. ๐Ÿ’ก ์™œ ๋ฌผ๊ฐ€๋Š” ์˜ค

limheejin.tistory.com

  • ํ† ์š”์ผ์— 1์‹œ๊ฐ„ 20๋ถ„๋™์•ˆ ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ์ด๋‹ค.
  • ์ž๋ณธ์ฃผ์˜ ์‹œ์Šคํ…œ์— ์ข…์†๋œ ์‚ฌ๋žŒ์œผ๋กœ์„œ, ๋‚ด๊ฐ€ ๋ชธ๋‹ด๊ณ  ์žˆ๋Š” ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ํ•„์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • ํ•œ ๋ฒˆ ์ •๋ฆฌํ•˜๊ณ  ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ›‘๋Š”๋ฐ 1์‹œ๊ฐ„ ์ •๋„๊ฐ€ ๊ฑธ๋ ค์„œ 2๋ถ€๋Š” ๋‚ด์ผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
  • ํ™”ํ๋ผ๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค์€ ๋‚ด๊ฐ€ ๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์—ญ์‚ฌ๊ฐ€ ์งง๊ณ  ๋ถˆ์˜จํ•œ ๊ฒƒ์ด๋ผ๋Š” ๊ฑธ ๋Š๊ผˆ๋‹ค. ๋”๋ถˆ์–ด ์‚ฌํ† ์‹œ ๋‚˜์นด๋ชจํ† ๊ฐ€ ๋น„ํŠธ์ฝ”์ธ์„ ๋งŒ๋“ค๊ณ  ๋ฐœํ–‰ํ•œ ์ง์ ‘์ ์ธ ์ด์œ (ํƒˆ์ค‘์•™ํ™”)์— ๋Œ€ํ•ด์„œ๋„ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 
  • ๊ฒฐ๊ตญ ๋ชจ๋“ ๊ฒŒ ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๋ˆ์ด ์•„๋‹ˆ๊ณ , ๋นš์ด๋ฉฐ, ๋ฐ์ดํ„ฐ์ผ ๋ฟ์ด๋ผ๋ฉด ๊ธฐ์ถ•ํ†ตํ™”๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋‹ฌ๋Ÿฌ์—ฌ์•ผ๋งŒ ํ• ๊นŒ?
  • ๊ทธ๋ฆฌ๊ณ  ํ•œ๊ตญ์— ํ•˜์ดํผ์ธํ”Œ๋ ˆ์ด์…˜์ด ์˜ค์ง€ ์•Š์œผ๋ฆฌ๋ž€ ๋ณด์žฅ์ด ์žˆ์„๊นŒ?

 

 

 

๐Ÿ’ญ Retrospect

์˜ค๋Š˜์€ ์ •๋ง ์•„์นจ 8์‹œ๋ถ€ํ„ฐ ํ•˜๋ฃจ์ข…์ผ ์ง‘์ค‘ํ•œ ๋‚ ์ธ๋ฐ, ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์˜ ๋ทฐํ™€๋” ๋ฐ ์–ด๋Œ‘ํ„ฐ์— ๋Œ€ํ•œ ์ง€์‹์—†์ด ๋ฐ”๋กœ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ๊ณผ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋‹ˆ ์‚ฝ์งˆ์„ ๋งŽ์ด ํ•˜๊ณ  ์•  ์ข€ ๋จน์—ˆ๋‹ค.
Exception์˜ ์ข…๋ฅ˜๋„ ์‹œ๊ฐ„๋‚˜๋ฉด ๋”ฐ๋กœ ์ •๋ฆฌํ•ด๋ณด๊ณ  ์‹ถ๊ณ , ํ‹ฐ์Šคํ† ๋ฆฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ๋„ ๋นจ๋ฆฌ ๊ณ ์ณ์•ผ ํ•œ๋‹ค. ํ•  ๊ฒŒ ์Œ“์—ฌ๊ฐ€์„œ ๋ฏธ๋ฃจ๊ณ  ์žˆ๊ธด ํ•œ๋ฐ ๊ณต๋ถ€ ๋ธ”๋กœ๊ทธ์— ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋Š” ๊ฒŒ ๋ง์ด ๋˜๋Š”์ง€...

โ€‹

 

 

 

 

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