Kotlin

[Kotlin] ์ฝ”ํ‹€๋ฆฐ ๋ฌธ๋ฒ• ๊ธฐ์ดˆ 1

soogoori 2024. 7. 5. 13:18

ํ”„๋กœ์ ํŠธ์—์„œ Kotlin์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ• ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค. 

์ž๋ฐ”๋ฅผ ์ ‘ํ•ด๋ณธ ์‚ฌ๋žŒ์€ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ..

์ฝ”ํ‹€๋ฆฐ์„ ํ™œ์šฉํ•˜๋Š” ๋ช‡๋ช‡ ๊ธฐ์—…๋„ ์žˆ์œผ๋‹ˆ ์ด๋ฒˆ ๊ธฐํšŒ์— ํ•œ ๋ฒˆ ํ•™์Šตํ•ด๋ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค . .

 

 

๋ณ€์ˆ˜

(val | var) ๋ณ€์ˆ˜๋ช… : ๋ฐ˜ํ™˜ํƒ€์ž… = ๋ณ€์ˆ˜์— ๋‹ด์„ ๊ฐ’
  • ๋ณ€์ˆ˜ ์„ ์–ธ
val a : Int = 1
  • ํƒ€์ž… ์ƒ๋žต
val b = 1
  • ์ง€์—ฐ ํ• ๋‹น
val c : Int // ํƒ€์ž… ๋ช…์‹œ ํ•„์ˆ˜
c = 3

โœด๏ธ val, var ์ฐจ์ด

๐Ÿ”นval (value) : ์ž๋ฐ”์˜ final ํ‚ค์›Œ๋“œ์ฒ˜๋Ÿผ ํ•œ ๋ฒˆ ์ดˆ๊ธฐํ™” ํ›„์—๋Š” ๋‹ค์‹œ ์ดˆ๊ธฐํ™” X
๐Ÿ”นvar (variable) : ๊ฐ€๋ณ€ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ์ดˆ๊ธฐํ™” ํ›„์—๋„ ๋‹ค์‹œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ๐Ÿ‘‰ var๋กœ ์„ ์–ธํ•˜๋”๋ผ๋„ ํƒ€์ž…์€ ๊ณ ์ •๋จ

 

  • ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ 
val d : String = "Hello"
d = "World" // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
var e = 12
e = "hi" // Int ํƒ€์ž…์„ String์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
  • ํƒ‘-๋ ˆ๋ฒจ ๋ณ€์ˆ˜ ์„ ์–ธ ๊ฐ€๋Šฅ 
val PI = 3.14159        // ๋ถˆ๋ณ€ ํƒ‘-๋ ˆ๋ฒจ ๋ณ€์ˆ˜
var counter = 0         // ๊ฐ€๋ณ€ ํƒ‘-๋ ˆ๋ฒจ ๋ณ€์ˆ˜

fun incrementCounter() {
    counter += 1
}

fun main() {
    println("PI: $PI")
    println("Initial counter: $counter")
    
    incrementCounter()
    println("Counter after increment: $counter")
}

 

 

 

ํ•จ์ˆ˜

fun ํ•จ์ˆ˜๋ช…(์ธ์ž: ํƒ€์ž…, ์ธ์ž: ํƒ€์ž…) : ๋ฐ˜ํ™˜ํƒ€์ž… {
    return ๊ฒฐ๊ณผ 
}

๐Ÿ‘‰ ํ•จ์ˆ˜ ์ •์˜ํ•  ๋•Œ fun ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ 
  • ํ•จ์ˆ˜ ์„ ์–ธ
// ๋ชธํ†ต์ด ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜ํƒ€์ž…์„ ์ œ๊ฑฐํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
fun sum(a: Int, b: Int) : Int {
	return a + b
}
  • ํ•จ์ˆ˜ ๋ณธ๋ฌธ์€ ํ‘œํ˜„์‹์ด ๋  ์ˆ˜ ์žˆ์Œ
fun sum(a: Int, b: Int) : Int = a + b
  • ํ‘œํ˜„์‹์ด๋ฉด์„œ ๋ฐ˜ํ™˜ ํƒ€์ž… ์ƒ๋žต ๐Ÿ‘‰ ๋ฐ˜ํ™˜ํƒ€์ž…์ด ์—†์–ด๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•œ ํƒ€์ž… ์ถ”๋ก 
fun sum(a: Int, b: Int) = a + b
  • ๋ฐ˜ํ™˜ํ˜•์ด ์—†๋Š” ๊ฒฝ์šฐ Unit์ด ๋ฐ˜ํ™˜ํƒ€์ž…์ด ๋จ (โ‰’ Java์˜ void)
// Unit ์ƒ๋žต ๊ฐ€๋Šฅ
fun printSum(a: Int, b: Int): Unit {
	println("$a ๋”ํ•˜๊ธฐ $b = ${a + b}")
}
  • ๋””ํดํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ
fun greeting(message: String = "์•ˆ๋…•ํ•˜์„ธ์š”!") {
	println(message)
}

fun main() {
	greeting() // ์•ˆ๋…•ํ•˜์„ธ์š”!
    greeting("Hello World") // Hello World
}
  • named argument
fun log(level: String = "INFO", message: String) {
	println("[$level]$message")
}

fun main() {
    log(message = "์ธํฌ ๋กœ๊ทธ")
    log(level = "DEBUG", "๋””๋ฒ„๊ทธ ๋กœ๊ทธ")
    log("WARN", "์›Œ๋‹ ๋กœ๊ทธ")
    log(level = "ERROR", message = "์—๋Ÿฌ ๋กœ๊ทธ")
}
๐Ÿ‘‰ ์ฝ”ํ‹€๋ฆฐ์˜ ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๊ณ  named argument๋‚˜ default parameter ๊ธฐ๋Šฅ์ด ์œ ์šฉํ•จ 

 

 

 

ํ๋ฆ„ ์ œ์–ด 

  • if..else : ํ‘œํ˜„์‹์œผ๋กœ์„œ ๊ทธ ์ž์ฒด๋กœ ๊ฐ’์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์Œ
val job = "Software Engineer"
if (job == "Software Engineer") {
    println("๊ฐœ๋ฐœ์ž์ž„")	
} else {
    println("๊ฐœ๋ฐœ์ž์•„๋‹˜")
}
val age : Int = 18
val str = if (age > 18) {
	"์„ฑ์ธ"
} else {
	"์•„์ด"
}
println(str)

๐Ÿ‘‰ ํ‘œํ˜„์‹์ด๋ฏ€๋กœ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž X

 

  • when : Java์˜ switch๋ฌธ๊ณผ ๋น„์Šท
when (๋Œ€์ƒ๋ณ€์ˆ˜) {
    ์กฐ๊ฑด -> ์ฐธ์ธ ๊ฒฝ์šฐ ์‹คํ–‰
    ์กฐ๊ฑด -> ์ฐธ์ธ ๊ฒฝ์šฐ ์‹คํ–‰
    ์กฐ๊ฑด -> ์ฐธ์ธ ๊ฒฝ์šฐ ์‹คํ–‰
   else -> ์ฐธ์ธ ์กฐ๊ฑด์ด ์—†์„ ๊ฒฝ์šฐ ์‹คํ–‰
}
val day = 2
val result = when (day) {
    1 -> "์›”์š”์ผ"
    2 -> "ํ™”์š”์ผ"
    3 -> "์ˆ˜์š”์ผ"
    4 -> "๋ชฉ์š”์ผ"
    5 -> "๊ธˆ์š”์ผ"
    6 -> "ํ† ์š”์ผ"
    7 -> "์ผ์š”์ผ"
    else -> "์—๋Ÿฌ"
}
println(result)
// ํ™”์š”์ผ
  • else ์ƒ๋žต ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์กฐ๊ฑด์„ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ด ํ•œ ์ค„์—์„œ ์ •์˜ ๊ฐ€๋Šฅ
fun getNumber() = 2
fun main() {
    when (getNumber()) {
        0, 1 -> print("number == 0 or number == 1")
        else -> print("0๊ณผ 1์ด ์•„๋‹Œ ๊ฒฝ์šฐ")
    }
    // "0๊ณผ 1์ด ์•„๋‹Œ ๊ฒฝ์šฐ"
}
  • for loop : Java์˜ foreach์™€ ์œ ์‚ฌ 
  •  .. ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž 
for (i in 0..3) {
	println(i)
}
// 0
// 1
// 2
// 3

 

  • until : ๋’ค์— ์˜จ ์ˆซ์ž ํฌํ•จ X
for (i in 0 until 3) {
	println(i)
}
// 0
// 1
// 2

 

  • step : ๋“ค์–ด์˜จ ๊ฐ’๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ด
for (i in 0..6 step 2) {
	println(i)
}
// 0
// 2
// 4
// 6

 

  • downTo : ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ’ ๊ฐ์†Œ์‹œํ‚ด
for (i in 3 downTo 1) {
	println(i)	
}
// 3
// 2
// 1

 

  • ์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด ๋ฐ˜๋ณต 
val numbers = arrayOf(1, 2, 3)

for (i in numbers) {
	println(i)
}
// 1
// 2
// 3
  • while loop
var x = 5
while (x > 0) {
    println(x)
    x--
}
// 5
// 4
// 3
// 2
// 1

 

 

null ์•ˆ์ •์„ฑ 

๐Ÿ”ถ ์ž๋ฐ”์˜ Optional์€ ๊ฐ’์„ ๋ž˜ํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ƒ์„ฑ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒํ•˜๊ณ , ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ null ๊ฐ€๋Šฅ์„ฑ ๊ฒ€์‚ฌ X
๐Ÿ”ถ ์ฝ”ํ‹€๋ฆฐ ๐Ÿ‘‰ null ๊ฐ€๋Šฅ์„ฑ์„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฏธ๋ฆฌ ๊ฐ์ง€ํ•ด์„œ NPE ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž„ 
val a : String = null // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜

var b : String = "aabbcc"
b = null // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜
var a : String? = null
a.length // a ๋ณ€์ˆ˜๋Š” nullableํ•˜๋ฏ€๋กœ ์ฐธ์กฐ์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜

a?.length // ์•ˆ์ „ ์—ฐ์‚ฐ์ž -> ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์‚ฌ๋ผ์ง
println(a?.length) // null ์ถœ๋ ฅ
val b : Int = if(a!=null) a.length else 0

// ์—˜๋น„์Šค ์—ฐ์‚ฐ์ž -> ์ขŒ๋ณ€์ด null์ธ ๊ฒฝ์šฐ ์šฐ๋ณ€ ๋ฆฌํ„ด
val b = a?.length ?: 0
fun getNullStr(): String? = null

fun getLengthIfNotNull(str: String?) = str?.length ?: 0 // ์—˜๋น„์Šค ์—ฐ์‚ฐ์ž

fun main() {
    val nullableStr = getNullStr()
    val nullableStrLength = nullableStr?.length ?: 0
    println(nullableStrLength)
}