๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Android/Android Studio

[Android] 9. Kotlin ์ถ”๊ฐ€ ๋ฌธ๋ฒ• : ํ”„๋กœ์ ํŠธ์™€ ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€, ์ œ๋„ค๋ฆญ์Šค, ์˜ˆ์™ธ์™€ try ~ catch ๋ฌธ, ๋‚ ์งœ ํ˜•์‹, ๊ธฐํƒ€ ํ•จ์ˆ˜

by A Lim Han 2023. 1. 7.

# Kotlin ์ถ”๊ฐ€ ๋ฌธ๋ฒ• : ํ”„๋กœ์ ํŠธ์™€ ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€, ์ œ๋„ค๋ฆญ์Šค, ์˜ˆ์™ธ์™€ try ~ catch ๋ฌธ, ๋‚ ์งœ ํ˜•์‹, ๊ธฐํƒ€ ํ•จ์ˆ˜

 

 

# Kotlin ์ถ”๊ฐ€ ๋ฌธ๋ฒ• : ํ”„๋กœ์ ํŠธ์™€ ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€, ์ œ๋„ค๋ฆญ์Šค

 

- ํŒจํ‚ค์ง€

: ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ธฐ์— ํŒจํ‚ค์ง€ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌ

-->  ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋  ํŒจํ‚ค์ง€๋Š” *.kt ํŒŒ์ผ์˜ ์ฒซ ํ–‰์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ง€์ •๋จ

package ํŒจํ‚ค์ง€๋ช…

 

+ import์˜ ๊ฒฝ์šฐ ํด๋ž˜์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์š”์†Œ(ํ•จ์ˆ˜, ํ”„๋กœํผํ‹ฐ, ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜ ๋“ฑ)๋„ import ๊ฐ€๋Šฅ

+ ํŒจํ‚ค์ง€๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋ฆ„์ด ์—†๋Š” ๋””ํดํŠธ ํŒจํ‚ค์ง€(default package)๊ฐ€ ํฌํ•จ๋จ

+ ์ž๋ฐ”์˜ ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๋งค์น˜๋˜์–ด์•ผ ํ•  ํ•„์š”๋Š” ์—†์Œ

package com.example.edu

class Person(val name: String, val age: Int)
...

 

 

 

- ํŒจํ‚ค์ง€ ์ •์˜

ํŒจํ‚ค์ง€๋ช… ์„ค๋ช…
kotlin.* Any, Int, Double ๋“ฑ ์ฝ”์–ด ํ•จ์ˆ˜์™€ ์ž๋ฃŒํ˜•
kotlin.text.* ๋ฌธ์ž์™€ ๊ด€๋ จ๋œ API
kotlin.sequences.* ์ปฌ๋ ‰์…˜ ์ž๋ฃŒํ˜•์˜ ํ•˜๋‚˜๋กœ ๋ฐ˜๋ณต์ด ํ—ˆ์šฉ๋œ ๊ฐœ์ฒด ์—ด๊ฑฐ
kotlin.ranges.* If, for ๋ฌธ์—์„œ ์‚ฌ์šฉํ•  ๋ฒ”์œ„ ๊ด€๋ จ ์š”์†Œ
kotlin.io.* ์ž…์ถœ๋ ฅ ๊ด€๋ จ API
kotlin.collections.* List, Set, Map ๋“ฑ์˜ ์ปฌ๋ ‰์…˜
kotlin.annotation.* ์• ๋…ธํ…Œ์ด์…˜ ๊ด€๋ จ API

 

 

 

- ํ”„๋กœ์ ํŠธ, ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€, ํŒŒ์ผ์˜ ๊ด€๊ณ„

 

 

 

- ์ œ๋„ค๋ฆญ์Šค(Generics)

: ์ œ๋„ค๋ฆญ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ strList์— ๋ฌธ์ž์—ด๋งŒ ๋“ค์–ด๊ฐ€๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ  -->  ๋ฐ์ดํ„ฐ ํ˜•์‹์˜ ์•ˆ์ „์„ฑ ๋ณด์žฅ

var strList = ArrayList<String>(4)

strList.add("์ฒซ ๋ฒˆ์งธ")	   //์ •์ƒ์ ์œผ๋กœ ๊ฐ’ ๋Œ€์ž…
strList.add("๋‘ ๋ฒˆ์งธ")    //์ •์ƒ์ ์œผ๋กœ ๊ฐ’ ๋Œ€์ž…
strList.add(3)    //์—๋Ÿฌ ๋ฐœ์ƒ

 

+ ์ œ๋„ค๋ฆญ์Šค๋Š” String ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Int, Double ๋“ฑ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํด๋ž˜์Šคํ˜•์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

# Kotlin ์ถ”๊ฐ€ ๋ฌธ๋ฒ• : ์˜ˆ์™ธ์™€ try ~ catch ๋ฌธ

 

- ์˜ˆ์™ธ(exception)

: Kotlin ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋กœ, ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰์ด ์ด๋ฃจ์–ด์ง€๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋น„์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

 

-->  ์‹คํ–‰ ๋„์ค‘ ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜๊นŒ์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒ

-->  ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์ด์œ ๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•˜๋‹ค.

OS์˜ ๋ฌธ์ œ (์ž˜๋ชป๋œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ฌธ์ œ)
์ž…๋ ฅ๊ฐ’์˜ ๋ฌธ์ œ (์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ ์ž…๋ ฅ or ์ˆซ์ž ์ž…๋ ฅ๋ž€์— ๋ฌธ์ž ์ž…๋ ฅ)
๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†๋Š” ์—ฐ์‚ฐ (0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ)
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹คํŒจ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
์ปดํ“จํ„ฐ ๊ธฐ๊ณ„ ์ž์ฒด ๋ฌธ์ œ (๋ง๊ฐ€์ง„ ๊ธฐ์–ต ์žฅ์น˜, ์ „์›์˜ ๋ฌธ์ œ)

 

 

 

- try ~ catch ๋ฌธ

: ์œ„์™€ ๊ฐ™์€ ์˜ˆ์™ธ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ

try
{
    ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์žˆ๋Š” ๋ฌธ์žฅ
} catch (e: ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํด๋ž˜์Šค๋ช…)
{
	์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์žฅ
} finally
{
	๋ฐ˜๋“œ์‹œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋ฌธ์žฅ
}

 

 

ex) ์˜ˆ์‹œ 1_exam05.kt

 

 

 

 

# Kotlin ์ถ”๊ฐ€ ๋ฌธ๋ฒ• : ๋‚ ์งœ ํ˜•์‹

: DateFormat ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ SimpleDate Format ์„ ์‚ฌ์šฉ

-->  '์—ฐ, ์›”, ์ผ'์ด๋‚˜ '์‹œ, ๋ถ„, ์ดˆ' ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์‹œ๊ฐ„ ํ‘œํ˜„ ๊ฐ€๋Šฅ

import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*

fun main()
{
    var now = Date()
    var sFormat : SimpleDateFormat
    
    sFormat = SimpleDateFormat("๋…„:์›”:์ผ")
    sFormat = SimpleDateFormat("์‹œ๊ฐ„:๋ถ„:์ดˆ")
    
    println(sFormat.format(now))	// 21:13:21 ์˜ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

# Kotlin ์ถ”๊ฐ€ ๋ฌธ๋ฒ• : ๊ธฐํƒ€ ํ•จ์ˆ˜

 

- ๋ฌธ์ž์—ด ๋น„๊ต ํ•จ์ˆ˜

: String ํด๋ž˜์Šค์˜ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต ๊ฐ€๋Šฅ

var str : String = "์•ˆ๋…•ํ•˜์„ธ์š”"

if (str.equals("์•ˆ๋…•ํ•˜์„ธ์š”"))
{
    //๋ฌธ์ž์—ด์ด ๊ฐ™์„ ๊ฒฝ์šฐ ์ˆ˜ํ–‰
}

 

 

 

- let() ํ•จ์ˆ˜

: ๋ธ”๋ก์— ์ž๊ธฐ ์ž์‹ ์„ ์ „๋‹ฌํ•˜๊ณ  ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

val result = str?let
{
    Integer.parseInt(it)
}

 

 

 

- with() ํ•จ์ˆ˜

: ์ธ์ž๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ณ  ๋ธ”๋ก์—์„œ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

with(str)
{
    println(toUpperCase())
}

 

 

 

- apply() ํ•จ์ˆ˜

: ๋ธ”๋ก์— ์ž๊ธฐ ์ž์‹ ์„ ์ „๋‹ฌํ•˜๊ณ  ์ด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

val result = car?apply
{
    car.setColor(Color.RED)
    car.setPrice(1000)
}

 

 

 

- run() ํ•จ์ˆ˜

: ์ต๋ช…ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ธ”๋ก์— ์ž๊ธฐ ์ž์‹ ์„ ์ „๋‹ฌํ•˜๊ณ  ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

val avg = run 
{
    val koream = 100
    val english = 80
    val math = 60
    
    (korean + english + math) / 3.0
}

 

+ ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด๋ฅผ ๋ธ”๋ก์˜ ๋ฆฌ์‹œ๋ฒ„ ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•˜๊ณ  ๋ธ”๋ก์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•จ

+ with() ํ•จ์ˆ˜๋ณด๋‹ค ์•ˆ์ „ํ•œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ