๐ŸŽˆKotlin ์—ฌํ–‰๊ธฐ 5์ผ์ฐจ

์ดํ˜•์ง„ยท2020๋…„ 9์›” 22์ผ
0

์ฝ”ํ‹€๋ฆฐ ์—ฌํ–‰๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
5/5

์ง€๋‚œ ์—ฌํ–‰

  • ๊ฐ์ฒด ์ง€ํ–ฅ
  • class
  • ์ƒ์„ฑ์ž(์ฃผ ์ƒ์„ฑ์ž, init)

์ƒ์„ฑ์ž(2)

๋ถ€ ์ƒ์„ฑ์ž

class {constructor(๋งค๊ฐœ ๋ณ€์ˆ˜ ์ด๋ฆ„ : ์ž๋ฃŒํ˜•)}๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ ๋ถ€ ์ƒ์„ฑ์ž๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Car{
    constructor(color: String){
        println(color)
    }
}

fun main(args: Array<String>) {
    val K3 = Car("white")
}

๋‹จ ๋ถ€ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ color๋Š” ๋ถ€ ์ƒ์„ฑ์ž ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ class ์ „์ฒด๊ฐ€ ๋ถ€ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด class์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€์ž…ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

class Car{
    var color:String=""
    constructor(color: String){
        this.color=color
    }
    fun carColor(){
        println(this.color)
    }
}

fun main(args: Array<String>) {
    val K3 = Car("white")
    K3.carColor()
}

์ฃผ ์ƒ์„ฑ์ž์™€ ๋ถ€ ์ƒ์„ฑ์ž ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ

ํ•˜๋‚˜์˜ class ์•ˆ์—๋Š” ํ•œ ๊ฐ€์ง€์˜ ์ฃผ ์ƒ์„ฑ์ž๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ํ•„์š”ํ•  ๋•Œ์— ์ฃผ ์ƒ์„ฑ์ž์™€ ๋ถ€ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ ์ƒ์„ฑ์ž๋ฅผ ์„ ์–ธํ–ˆ๋‹ค๋ฉด ๋ถ€ ์ƒ์„ฑ์ž๋ฅผ ์„ ์–ธํ•  ๋•Œ์—๋Š” ๋ฌด์กฐ๊ฑด ์ฃผ ์ƒ์„ฑ์ž๋ฅผ ํ•จ๊ป˜ ํ˜ธ์ถœํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

class Car(color: String){
    init {
        println("์ฃผ ์ƒ์„ฑ์ž์˜ init")
    }

    constructor(color: String,name: String,number:Int):this(color){
        println("๋ถ€ ์ƒ์„ฑ์ž")
    }
}

fun main(args: Array<String>) {
    val myCar = Car("white","k3",13)

}

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋ถ€ ์ƒ์„ฑ์ž ๋’ค์— :this(color)๊ฐ€ ์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ color๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž, ์ฆ‰ ์ฃผ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ ์ด๋ฅผ ํ† ๋Œ€๋กœ ๋ถ€ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ, ์ฃผ ์ƒ์„ฑ์ž๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๋’ค์— ํ•ด๋‹น ๋ถ€ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

get๊ณผ set

get๊ณผ set์€ ๊ฐ์ฒด๊ฐ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
์›๋ž˜๋Š” ์ž๋™์ ์œผ๋กœ get๊ณผ set์ด ์ถ”๊ฐ€๋˜์ง€๋งŒ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

class Car() {
    var name:String="Lee"
    get() {
        println("์ •๋ณด ํ˜ธ์ถœ")
        return field
    }
    set(value) {
    println("set ํ˜ธ์ถœ "+value)
    field="my $value"}
}

Car class์— name ํ”„๋กœํผํ‹ฐ์— get๊ณผ set ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. get ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์— ์ž๋™์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
main ํ•จ์ˆ˜์—์„œ

fun main(args: Array<String>) {
    val myCar = Car()
    myCar.name
}

๊ฐ์ฒด๋ช….ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

get ํ•จ์ˆ˜์˜ "์ •๋ณด ํ˜ธ์ถœ"์„ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๊ณ  field๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ field๊ฐ’์€ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.
set ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์ž๋™์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

fun main(args: Array<String>) {
    val myCar = Car()
    myCar.name="k3"
}

ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐํ™”

class์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•˜๋ฉด ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„ ์–ธ ํ›„์— ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•ด์•ผํ•  ๊ฒฝ์šฐ๋„ ์ƒ๊น๋‹ˆ๋‹ค.
์ด ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

init์—์„œ ์ดˆ๊ธฐํ™”

class Person() {
    val name:String
    val age:Int
    init {
        name="Lee Room"
        age=17
    }
}

์œ„ ์ฝ”๋“œ์—์„œ name๊ณผ age๋ฅผ ์„ ์–ธํ•  ๋•Œ, ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
init์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

null ํ—ˆ์šฉ์„ ํ†ตํ•œ ์ดˆ๊ธฐํ™”

class Person{
    var name:String?=null
    var age:Int?=null
    constructor(name:String,age:Int){
        this.name=name
        this.age=age
    }
}

์œ„ ์ฝ”๋“œ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์— ์ดˆ๊นƒ๊ฐ’์œผ๋กœ null์„ ๋ถ€์—ฌํ•˜๊ณ  ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ์— ๋Œ€์ž…ํ•˜๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.

lateinit

lateinit(๋Šฆ์€ ์ดˆ๊ธฐํ™”)๋Š” ์ดˆ๊ธฐํ™”์˜ ์‹œ๊ธฐ๋ฅผ ๋Šฆ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

class Person {
    lateinit var name: String
    fun initLate(name: String) {
        this.name = name
    }
}

์œ„ ์ฝ”๋“œ์—์„œ name์„ lateinit์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ๊ธฐ๋ฅผ ๋Šฆ์ถ˜ ๋’ค, initLate ํ•จ์ˆ˜์—์„œ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ lateinit์„ ์‚ฌ์šฉํ•˜๋ฉด null์„ ๋„ฃ์ง€ ์•Š๊ณ ๋„ ์ดˆ๊ธฐํ™”์˜ ์‹œ๊ธฐ๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ lateinit์€ ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • var๋กœ ์„ ์–ธํ•  ๊ฒƒ
  • null์„ ํ—ˆ์šฉํ•˜์ง€ ๋ง ๊ฒƒ
  • class ๋ชธ์ฒด์— ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ์—๋งŒ ๊ฐ€๋Šฅ
  • Int,Float์™€ ๊ฐ™์€ ๊ธฐ์ดˆ ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ์ดˆ๊ธฐํ™” ์ „์—๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

by lazy

lazy๋Š” val๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐํ™” ์‹œ์ ์„ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ด์šฉ๋˜๋Š” ์‹œ์ ์œผ๋กœ ๋ฏธ๋ฃจ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

class Person {
    val name: String by lazy {
        println("by lazy")
        "Lee Room"
    }
}

์œ„ ์ฝ”๋“œ์—์„œ๋Š” name ํ”„๋กœํผํ‹ฐ๋ฅผ by lazy๋ฅผ ํ†ตํ•ด์„œ name ํ”„๋กœํผํ‹ฐ๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ์ดˆ๊ธฐํ™”ํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. by lazy๋Š” ์ดˆ๊ธฐํ™” ๋‹น์‹œ ์‹คํ–‰์‹œํ‚ฌ ๊ตฌ๋ฌธ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
by lazy๋„ ์‚ฌ์šฉ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ถœ ์‹œ์ ์— ์ดˆ๊ธฐํ™”๊ฐ€ ์ง„ํ–‰๋œ๋‹ค.
  • val๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ lateinit๊ณผ ๋‹ฌ๋ฆฌ class์˜ ๋ชธ์ฒด ์™ธ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ธฐ์ดˆ ํƒ€์ž…๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


์˜ค๋Š˜์˜ ์†Œ๊ฐ

  • ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ๊ณผ ๋‚จ๋“ค์—๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์ด ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ผ๋‹จ์€ ์—ฌ๊ธฐ๊นŒ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€