Study

Kotlin

D.start 2021. 9. 23. 04:15

๐Ÿ“ข ๋ฌธ๋ฒ• - ์ž‘์„ฑ์ค‘


๐Ÿ“šํ•จ์ˆ˜

๊ตฌ๋ฌธ์‹ (Statement)

fun sum(a: Int, b: Int): Int {

    return a + b

}

ํ‘œํ˜„์‹ (Expresstion)

fun sum(a: Int, b: Int) = a + b

fun max(a: Int, b: Int) = if (a>b) a else b

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  1. ๋ฉ”์†Œ๋“œ ํ‘œ์‹œ๋กœ ๋ฉ”์†Œ๋“œ๋ช… ์•ž์— fun์„ ์ž…๋ ฅ
  2. parameter ํ‘œ๊ธฐ ๊ธฐ์กด ๋ฐ์ดํ„ฐํƒ€์ž… ๊ฐ์ฒด๋ช… ์—์„œ ์ธ์ž: ๋ฐ์ดํ„ฐ ํƒ€์ž…๋กœ ๋ณ€๊ฒฝ
  3. ๋ฆฌํ„ดํ˜• ํ‘œ๊ธฐ๊ฐ€ ๊ธฐ์กด ๋ฉ”์†Œ๋“œ๋ช… ์•ž ' ๋ฆฌํ„ดํ˜• ' ์—์„œ (ํŒŒ๋ผ๋ฉ”ํ„ฐ) ์šฐ์ธก ์˜† ' : ๋ฆฌํ„ดํ˜• '์œผ๋กœ ๋ณ€๊ฒฝ
  • ์ž๋ฃŒํ˜• ํ‘œ๊ธฐ๊ฐ€ int์—์„œ Int๋กœ ๋ณ€๊ฒฝ
  • void์˜ ๊ฒฝ์šฐ void(Unit)์ƒ๋žต ๊ฐ€๋Šฅ.
  • ๊ธฐ๋ณธ ์ ‘๊ทผ์ œํ•œ์ž๊ฐ€ ๊ธฐ์กด defalut์—์„œ public๋กœ ๋ณ€๊ฒฝ

๐Ÿ“š Value, Variable(๋ณ€์ˆ˜)์™€ ๋ฐ์ดํ„ฐ ํ˜•์‹

๐Ÿ“™Value, Variable(๋ณ€์ˆ˜)

var d: String = "์ฒ˜์Œ์ด์ž ๋งˆ์ง€๋ง‰ ์ดˆ๊ธฐํ™”"

val b = 2L //  L -> shortํƒ€์ž…๊ณผ ๊ตฌ๋ถ„ ์ง“๊ธฐ
val c = 3.14f //  f -> Double๊ณผ ๊ตฌ๋ถ„ ์ง“๊ธฐ

val d: String // ์„ ์–ธ
d = "null๊ฐ’์ด ์•ˆ๋˜๋„๋ก ์ดˆ๊ธฐํ™” ์ง„ํ–‰"
val a: Int = 1 // ์ƒ์„ฑ

val e: String? // ? -> null๊ฐ’ ์กด์žฌ ๊ฐ€๋Šฅ

var ary = ArrayList<Int>(1)
ary!!.add(99)

val boolNull: boolean? = null

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • final(๊ณ ์ •๊ฐ’)์„ val๋กœ ํ‘œ์‹œํ•˜๊ณ  final์ด ์•„๋‹Œ๊ฒฝ์šฐ var๋กœ ํ‘œ์‹œ
  • ํƒ€์ž…์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ž๋ฃŒํ˜• ์ƒ๋žต๊ฐ€๋Šฅ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ null๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅ
  • null๊ฐ’์„ ๋„ฃ๊ณ ์‹ถ์„ ๊ฒฝ์šฐ ์ž๋ฃŒํ˜• ์šฐ์ธก์— '?'๋ฅผ ๋ถ™์ด๊ธฐ
  • ' ? '์ด ๋„๊ฐ’ ์กด์žฌํ‘œ๊ธฐ๋ผ๋ฉด ๋ฐ˜๋Œ€๋กœ ๋„๊ฐ’ ๋ถˆ๊ฐ€๋Šฅํ‘œ๊ธฐ๋Š” ๋ณ€์ˆ˜๋ช…์šฐ์ธก์—' !! '๋กœ ํ‘œ๊ธฐ
  • ' ? '์ด ๋ถ™์œผ๋ฉด null๊ฐ’์ด ๋“ค์–ด์™”์„๋•Œ skip๊ฐ€๋Šฅ

๐Ÿ“™๋ฐ์ดํ„ฐ ํ˜•์‹ (๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜)

๋ถ„๋ฅ˜ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ์ตœ์†Œ ~ ์ตœ๋Œ€
๋…ผ๋ฆฌํ˜• Boolean 1 bit true,false
๋ฌธ์žํ˜• Char 2 byte 0 ~ 65,535
์ •์ˆ˜ํ˜• Long 8 byte -2^63 ~ 2^63 -1
Int 4 byte -2^31 ~ 2^31 -1
Short 2 byte -2^15 ~ 2^15 -1 (-32,768 ~ 32,767)
Byte 1 byte -2^7 ~ 2^7-1 (-128 ~ 127)
์‹ค์ˆ˜ํ˜• Float 4 byte ์•ฝ 1.4E-45 - 3.4E+38
Double 8 byte ์•ฝ 4.9E-324 - 1.7E+308

๐Ÿ“š Template

var name = "hyo-sang"
var lastName = "Seong"
println("my name is ${name}lastName")

println("my name is ${name + lastName}.")

println("my name is ${name}\${lastName}.")

println("my name is ${name}\\lastName")

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • ' + '๊ฐ€ ์•„๋‹Œ ' ${๋‚ด์šฉ} ' ์„ ์‚ฌ์šฉ '{ }'๋Š” ๋„์–ด์“ฐ๊ธฐ ๊ตฌ๋ถ„ ์šฉ๋„
  • ๋ณ€์ˆ˜ ๋‘๊ฐœ๊ฐ€ ์ด์–ด์งˆ ๊ฒฝ์šฐ ' ${ } '์•ˆ์—์„œ + ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ' $๋ณ€์ˆ˜๋ช… '๋’ค์— ' \ '๋ฅผ ๋ถ™์ด๋ฉด ๋ณ€์ˆ˜๋ช…๋’ค๋กœ๋Š” ๋ฌธ์ž์ทจ๊ธ‰
  • ' $๋ณ€์ˆ˜๋ช… '๋’ค์— ' \ '๋ฅผ ๋ฌธ์ž๋กœ ๋„ฃ๊ณ  ์‹ถ์„์‹œ, ' ์—ญ์Šฌ๋ž˜์‰ฌ ๋‘๋ฒˆ '์ž…๋ ฅ

๐Ÿ“š ๋ฐ˜๋ณต๋ฌธ

๐Ÿ“™for, while๋ฌธ

for (๋ณ€์ˆ˜ in ์‹œ์ž‘..๋ step ์ฆ๊ฐ€๋Ÿ‰) {

}

for (๋ณ€์ˆ˜ in ์‹œ์ž‘ until ๋){ // ๋ ๋ฏธํฌํ•จ  

}

for (๋ณ€์ˆ˜ in ๋ down ์‹œ์ž‘ ) {

}

for (๋ณ€์ˆ˜ in ๋ฐฐ์—ด๋ช….indices) { //๋ฐฐ์—ด์š”์†Œ ํ•œ๋ฒˆ์— ์ถœ๋ ฅ

}

for (๋ณ€์ˆ˜ in ๋ฐฐ์—ด๋ช…) { //๋ฐฐ์—ด์š”์†Œ ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅ

}

for ((index : index, name : String) in name.indeces.withIndex()) {

}

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • ํ‘œ๊ธฐ๋ณ€๊ฒฝ ' .๊ธธ์ด ' ์—์„œ ' .indices ' ๋˜๋Š” ์ƒ๋žต

๐Ÿ“™when๋ฌธ

๊ตฌ๋ฌธ์‹ (Expresstion)

var jumsu : Int = (count / 10) * 10
when(jumsu) {

100 -> print("1์ˆœ์œ„")

90, 80, 70 -> print("2์ˆœ์œ„") //์ผ๋ถ€ ํ•ญ๋ชฉ์ง€์ •

in 69..60 -> print("3์ˆœ์œ„") //๋ฒ”์œ„์ง€์ •

!in 10..0 -> print("ํ†ต๊ณผ")

!is Int -> print("์ •์ˆ˜๊ฐ€ ์•„๋‹˜")

}

ํ‘œํ˜„์‹ (Statement)

var b : Int = when(scope) {
1 -> 1
2 -> 2

else -> 3
}

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • ํ‘œ๊ธฐ๋ณ€๊ฒฝ switch ์—์„œ when ์œผ๋กœ
  • ํ‘œ๊ธฐ๋ณ€๊ฒฝ : ์—์„œ -> ๋กœ
  • break ์ƒ๋žต
  • ,๋ฅผ ์ด์šฉํ•ด์„œ ์ผ๋ถ€ ํ•ญ๋ชฉ์„ ์ง€์ • ๊ฐ€๋Šฅ
  • in ์‹œ์ž‘์ˆซ์ž. .๋งˆ์ง€๋ง‰ ์ˆซ์ž // ๋ฒ”์œ„์ง€์ • ๊ฐ€๋Šฅ
  • !in // ์œ„ ํ•ญ๋ชฉ์˜ ๋ถ€์ •
  • !is // ๋…ผ๋ฆฌํŒ๋ณ„
  • ํ‘œํ˜„์‹ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ํ‘œํ˜„์‹์˜ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก else ์ž…๋ ฅ ํ•„์ˆ˜
  • ํ‘œ๊ธฐ๋ณ€๊ฒฝ default ์—์„œ else ๋กœ

๐Ÿ“š Array(๋ฐฐ์—ด) and List

๐Ÿ“™Array(๋ฐฐ์—ด)

1์ฐจ์› ๋ฐฐ์—ด

var one = Array<Int>(4,{0})

val array = arrayOf(1,2,3)

val arrayOf = arrayOf(1, "d", 3.14f)

one[0] = 10
one[1] = 20

2์ฐจ์› ๋ฐฐ์—ด

var arr1 = Array(2){Array(3){i->(5)}} //2ํ–‰ 3์—ด ์ดˆ๊ธฐํ™”๊ฐ’ 5

var arr2 = arrayOf( arrayOf(5,5,5), arrayOf(5,5,5) ) //์œ„์™€ ๋™์ผ

val arr3 = Array(2){ i -> Array(3){ j ->(i*3) + (j+1)}} // [{1,2,3},{4,5,6}]

var count2 = 0
    for((count1, i) in arr1.indices.withIndex()){
        for(j in arr1[i]){
            println("${count1}ํ–‰ ${count2}์—ด์˜ ๊ฐ’์€ $j ์ž…๋‹ˆ๋‹ค.")
            count2++
        }
        if(count2 == arr1[i].size){
            count2 = 0;
        }
    }

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • val๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ

  • 1์ฐจ์› ๋ฐฐ์—ด

    • var ๋ฐฐ์—ด๋ช… = Array<๋ฐ์ดํ„ฐ ํƒ€์ž…>(๊ฐฏ์ˆ˜, {์ดˆ๊ธฐํ™”๊ฐ’})
    • var ๋ฐฐ์—ด๋ช… : IntArray = intArrayOf(1,2,3) //๊ฐ’์„ ๋ฐ”๋กœ ์ž…๋ ฅ
    • ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ˜ผ์šฉ ๊ฐ€๋Šฅ
    • ๋ฐฐ์—ด๋ช…[์ธ๋ฑ์Šค] = ๊ฐ’ ์ž…๋ ฅ
  • 2์ฐจ์› ๋ฐฐ์—ด

    • var ๋ฐฐ์—ด๋ช… = Array(ํ–‰ ๊ฐฏ์ˆ˜){ Array(์—ด ๊ฐฏ์ˆ˜), { _->(์ดˆ๊ธฐํ™• ๊ฐ’)} }
    • 1์ฐจ์› ๋ฐฐ์—ด์˜ "์ดˆ๊ธฐํ™”๊ฐ’"์ž๋ฆฌ์— " 1ํ–‰์— ๋Œ€ํ•œ arrayOf(๊ฐ’), 2ํ–‰์— ๋Œ€ํ•œ arrayOf(๊ฐ’) "๋ฅผ ๋„ฃ์Œ
    • ์ž๋ฐ”์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์„œ ์ดํ•ด ํ•  ์˜ˆ์ •
    • java์˜ ํ™•์žฅํ˜• for๋ฌธ์œผ๋กœ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ

๐Ÿ“™List

List

val list1 = listOf(1,"d",11L) 

MutableList(์ˆ˜์ •๊ฐ€๋Šฅ)

val arraList1 = arrayListOf(1,"d",3)

๐Ÿ“ŒList์™€ mutableList์˜ ์ฐจ์ด์ 

  • mutableList์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ArrayList๋Š” mutableList์˜ set๋ฉ”์†Œ๋“œ์— ์˜ํ•ด

    ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ List์™€ ๋‹ค๋ฅด๊ฒŒ ์“ฐ๊ธฐ๋„ ๊ฐ€๋Šฅ


๐Ÿ“š Nullable / NonNull

var nullName : String? = null

val nullNameInUC = nullName.?toUpperCase()

val name = "joyce"
val lastName : String? = null
var fullName = name + (lastName ?: "Hong")

val email: String? = "tjdgytkd!naver.com"
email?.let{
        println("my email is $email")
    }
}

fun igonoreNulls(str: String?){
    val mNotNull: String = str!!

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • ์ž๋ฃŒํ˜•๋’ค์— ' ? '์ด ๋ถ™์ง€ ์•Š์„ ๊ฒฝ์šฐ, null ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€๋Šฅ
  • ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ์‹œ์—๋Š” ๊ฐ์ฒด๋ช…๋’ค์— ' ? '์„ ๋ถ™์ด๋ฉด null๊ฐ’์ผ์‹œ, Skip
  • " ๊ฐ์ฒด๋ช…?: "๋Š” null๊ฐ’์ผ๋–„ ์‹คํ–‰
  • " ๊ฐ์ฒด๋ช…?.let "๋Š” null๊ฐ’์ด ์•„๋‹๋–„ ์‹คํ–‰
  • ' !! '๋Š” NonNull๋กœ ์„ ์–ธ

๐Ÿ“š Class

๐Ÿ“™์ƒ์„ฑ์ž

class Human (var name : String){

    init {
        println("create Human class")
    }
}

fun main() {
    val human1 = Human( "name1" )
    val human2 = Human( "name2")
}

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ• ๋–„ ์ƒ์„ฑ์ž๋„ ๊ฐ™์ด ์ƒ์„ฑ๊ฐ€๋Šฅ
  • ์ฃผ ์ƒ์„ฑ์ž์™€ ๋ถ€ ์ƒ์„ฑ์ž๋กœ ๋ถ„๋ฅ˜
  • ๋ถ€ ์ƒ์„ฑ์ž๋Š” ' constructor '๋กœ ์ƒ์„ฑ
  • ์ฃผ ์ƒ์„ฑ์ž์˜ ์ฝ”๋“œ๋ธ”๋Ÿญ์€ ' init{ ๋‚ด์šฉ } ' ๋กœ ์ž‘์„ฑ
  • ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์‹œ Expression๋กœ ์ƒ์„ฑ์ž๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰

๐Ÿ“™์˜ค๋ฒ„๋กœ๋”ฉ

class Human(){

    constructor(name: String, age: Int ): this()  {
        println("my name: $name \nmy age: $age")
    }

    constructor(name2: Int): this(){

    }
}

fun main() {
    val human3 = Human(29)
}

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  1. ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค๋ช… ์˜†์— ๋นˆ์ƒ์„ฑ์ž ๋„ฃ๊ธฐ
  2. ์˜ค๋ฒ„๋กœ๋”ฉํ•œ ์ƒ์„ฑ์ž ์˜†์— : this()๋ฅผ ๋ถ™์—ฌ์„œ ๋ถ€๋ชจ์ƒ์„ฑ์ž ํ˜ธ์ถœ์ด ํ•„์ˆ˜

๐Ÿ“™์˜ค๋ฒ„๋ผ์ด๋”ฉ

open class Human(){

    open fun song(){
        println("lalala")
    }
}

class Korean : Human(){

    override fun song(){
        println("๋ผ๋ผ๋ผ")
    }

}

๐Ÿ“Œ์ž๋ฐ”์™€์˜ ์ฐจ์ด์ 

  • Kotlin์—์„œ์˜ class๋Š” final์ด๋ฏ€๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์œ„ํ•ด์„œ๋Š”

    ๋ชจํ‹ฐ๋ธŒ ๋Œ€์ƒ์˜ ์•ž์— open์„ ๊ธฐ์ž…

๐Ÿ“™Lamda

๊ธฐ๋ณธํ˜•

val lamdaName = {argumentList -> codeBody}

val calculater  = {number : Int -> number*number}

val nameAge = {name : String, age : Int -> "my name is $name I'm $age"}

fun main(){
   println(calculater(12))
    println(nameAge("hyosang", 29))
}

ํ™•์žฅํ˜•

fun main(){
   val a = "joyce said"

   println(a.pizzaGreat())

   println(extnedsString(hyo-sang, 29))
   println(caculater(97))
}

val pizzaGreat : String.() -> Stirng = {
    this + "Pizza is the best!"
}

val extendsString(name : String, age : Int) {
    val introduceMyself : String.(Int) -> String = { "I am $this and $it years old" }

    return name.introduceMyself(age)
}
val calculater((Int) -> String){
    when(it){
        in 0..59 : "fail"
        in 60..89 : "pass"
        in 90..100 : "bonus point"
        else : "Error"
    }
}

๋žŒ๋‹ค์‹ parameter๋กœ ๋„ฃ๊ธฐ

fun main(){
    val lamda1 = {number : Double -> number == 4.3213}
    println(invokeLamda(lamda1)) // true

    println(invokeLamda { it > 3.22 }) // false

}

fun invokeLamda(lamda : (Double) -> Boolean) : Boolean {
    return lamda(5.2343)
}

๐Ÿ“ŒํŠน์ง•

  • ๋ฉ”์†Œ๋“œ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • ์ธ์ž๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ it์œผ๋กœ ํ‘œ๊ธฐ ๊ฐ€๋Šฅ
  • return์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ฉ”์†Œ๋“œ ์ธ์ž๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ

๐Ÿ“š DataClass

data class Ticket(val companyName: String, val name: String, var date: String, var seatNumber : Int)
// toString(), hashCode(), equals(), copy()

class TicketNormal(val companyName: String, val name: String, var date: String, var seatNumber : Int)

fun main(){
    val ticketA = Ticket("koreanAir", "hyosang", "2020-02-16", 14)
    val ticketB = TicketNormal("koreanAir", "hyosang", "2020-02-16", 14)

    println(ticketA) // Ticket(companyName=koreanAir, name=hyosang, date=2020-02-16, seatNumber=14)
    println(ticketB) // com.example.myapplication.TicketNormal@6fadae5d
}

๐Ÿ“Œclass์™€ data Class ์ฐจ์ด์ 

  • toString(), hashCode(), equals(), copy() ๋ฉ”์†Œ๋“œ๋ฅผ ์ž๋™์ƒ์„ฑ
  • ํด๋ž˜์Šค๋ช…์„ printํ•  ๊ฒฝ์šฐ, haskCode๊ฐ€ ์•„๋‹Œ ์ธ์ž๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
  • ๋‚ด๋ถ€class์— ์—ฌ๋Ÿฌ data class๋ฅผ ๋„ฃ์œผ๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•จ

๐Ÿ“š Companion object

interface IdProvider {
    fun getId(): Int
}

class Book private constructor(val id: Int, val name: String) {

    companion object BookFactory : IdProvider {

        override fun getId(): Int {
            return 444
        }

        var myBook = "new book"
        fun create() = Book(getId(), myBook)

    }

}

fun main() {

    val bookId = Book.getId()
    val book = Book.create()

    println("${bookId}${book.name}") // 444new book

}

๐Ÿ“ŒํŠน์ง•

  • java์˜ static๊ณผ ๋น„์Šทํ•œ ์กด์žฌ
  • ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์™€ ๊ณต์œ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ
  • ํด๋ž˜์Šค๋‹น ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ

๐Ÿ“š Object

object CarFactory {
    val cars = mutableListOf<Car>()
    fun makeCar(horsePower: Int) : Car{
        val car = Car(horsePower)
        cars.add(car)
        return car
    }

}

data class Car(val horsePower : Int)

fun main() {
    val car = CarFactory.makeCar(10)
    var car2 = CarFactory.makeCar(200)

    println(car) // Car(horsePower=10)
    println(car2) // Car(horsePower=200)
    println(CarFactory.cars.size.toString()) // 2
}

๐Ÿ“ŒํŠน์ง•

  • java์˜ SingleThon๊ณผ ๋น„์Šทํ•œ ์กด์žฌ
  • ๊ฐ์ฒด๊ฐ€ ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์—†์Œ

๐Ÿ“š Scope Function (apply, with, let, also, run)


๐Ÿ“™ apply


Kotlin

val person = Person().apply{
    firstname = "Fast"
    lastName = "Campus"
}

Java

Person person = new Person();
   person.firstname = "fast"
   person.lastName = "Campus"

๐Ÿ“ŒํŠน์ง•

  • ์ธ์Šคํ„ด์Šค์ƒ์„ฑ ํ›„ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œํ‚ฌ๋–„ ์œ ์šฉํ•จ

๐Ÿ“™ Also


Kotlin

Random().nextInt(100).also{ //์ธ์ˆ˜๊ฐ€ ํ•˜๋‚˜์ด๋ฏ€๋กœ ' it '์œผ๋กœ ํ‘œ๊ธฐํ•˜์—ฌ ๋‹ค์ด๋ ‰ํŠธ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    print("getRandomInt() generated value $it")
}
Random().nextInt(100).also{
    print(value -> "getRandomInt() generated value $value")
}

Java

int value = Random().nextInt(100);
System.out.print(value);

๐Ÿ“ŒํŠน์ง•

  • ๋ฐ˜ํ™˜๊ฐ’์„ ๊ฐ์ฑ„์— ๋‹ด์•„์„œ ๋žŒ๋‹ค์‹์œผ๋กœ ๊ฐ€๊ณต ํ›„ ๋‹ค์‹œ ๋ฐ˜ํ™˜
  • ์‚ฌ์šฉ์ฒ˜ : ์œ ํšจ์„ฑ ํ™•์ธ ๋ฐ ๋””๋ฒ„๊น…์— ์ด์šฉ์†Œ์ง€๊ฐ€ ์žˆ์Œ.

๐Ÿ“™ let


Kotlin

val number: Int?

val sumNumber = number?.let {
    "${sum(10, it)}"
}.orEmpty()

Java

Integer number= null;
String sumNumberStr= null;

if (number != null){
    sumNumberStr = " " + sum(10, number);
}

๐Ÿ“ŒํŠน์ง•

  • null์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋žŒ๋‹ค์‹์œผ๋กœ ๊ฐ€๊ณตํ• ๋–„ ์‚ฌ์šฉ
  • null์ธ ๊ฒฝ์šฐ๋Š” ์‹คํ–‰์„ ์•ˆํ•˜์ง€๋งŒ .orEmty๋ฅผ ์ด์šฉํ•˜๋ฉด ๋นˆ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ

๐Ÿ“™ with


Kotlin

val person = Person()

with (person) {
    work()
    sleep()
    println(age)
}

Java

Person person = new person();

person.work();
person.sleep();
System.out.print(person.age);

๐Ÿ“ŒํŠน์ง•

  • ํด๋ž˜์Šค๋ช…์„ with ์ธ์ž๊ฐ’์— ๋„ฃ์Œ์œผ๋กœ์จ ๋ฉ”์†Œ๋“œ๋ช…๋งŒ ๊ธฐ์ž…ํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰๊ฐ€๋Šฅ

๐Ÿ“™ run


Kotlin

val result = service.run{
    port = 8080
    query()
}

Java

service.prot = 8000
Result result = service.query()

๐Ÿ“ŒํŠน์ง•

  • ์–ด๋–ค๊ฐ’์„ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๊ฐ์ฒด๊ตฌ์„ฑ(์ดˆ๊ธฐํ™”)๊ณผ ๊ณ„์‚ฐ๊ฒฐ๊ณผ๋ฅผ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ• ๋–„
  • when๊ณผ ๋‹ค๋ฅธ์ ์€ ํ™•์žฅํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ


๐Ÿ“š lateinit, lazy init


๐Ÿ“™ lateinit


lateinit ๋ฏธ์‚ฌ์šฉ

var nullableNumber : Int? = null

nullableNumber?.add()

lateinit ์‚ฌ์šฉ

lateinit var lateinitNumber: Int

lateinitNumber = 10

lateinitNumber.add()

๐Ÿ“ŒํŠน์ง•

  • val๋Š” ๊ณ ์ •๊ฐ’์ด๋ผ ์˜ˆ์•ฝ ์„ ์–ธ์„ ํ•  ์ด์œ ๊ฐ€ ์—†์œผ๋ฏ€๋กœ

    var์—๋งŒ ์‚ฌ์šฉ

  • nullํ—ˆ์šฉ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ• ๋•Œ null๊ฐ’์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ

    NullSafeํ•œ ์ฝ”๋”ฉ์— ์šฉ์ดํ•จ



๐Ÿ“™ lazy init


val lazyNumber : Int by lazy{
    100 // ์‚ฌ์šฉํ•˜๊ธฐ์ „๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์ด ๋˜์ง€ ์•Š์Œ

lazyNumber.add()
//100 ํ• ๋‹น๋Œ
}

๐Ÿ“ŒํŠน์ง•

  • val๊ฐ์ฒด์„ ์–ธ์„ ๋Œ€๊ธฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
  • ์‚ฌ์šฉํ•˜๊ธฐ์ „๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์ด ์•ˆ๋Œ
  • view์†์„ฑ๋“ค์„ ๋ฏธ๋ฆฌ ๊ฑธ์–ด ๋†“์„๋•Œ ์šฉ์ดํ•จ

'Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ƒ๋ช…์ฃผ๊ธฐ  (0) 2021.09.27