βœ’οΈ Android/Android Studio

[Android] 9. Kotlin μΆ”κ°€ 문법 : ν”„λ‘œμ νŠΈμ™€ λͺ¨λ“ˆ, νŒ¨ν‚€μ§€, μ œλ„€λ¦­μŠ€, μ˜ˆμ™Έμ™€ try ~ catch λ¬Έ, λ‚ μ§œ ν˜•μ‹, 기타 ν•¨μˆ˜

A Lim Han 2023. 1. 7. 00:46

# 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() ν•¨μˆ˜λ³΄λ‹€ μ•ˆμ „ν•œ 호좜이 κ°€λŠ₯