๐ŸฅญMango 2020. 8. 27. 23:22

 

null

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” null๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

//์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•„ ์—๋Ÿฌ ๋ฐœ์ƒ
val a : String

//null๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์„œ ์—๋Ÿฌ ๋ฐœ์ƒ
val a : String = null

//OK
val a : String? = null

#์ฝ”ํ‹€๋ฆฐ์—์„œ null๊ฐ’์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ์ž๋ฃŒํ˜•์˜ ์˜ค๋ฅธ์ชฝ์— ? ๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

 

lateinit

lateinit var a : String

a = "hello"
println(a)

#์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ์‹œ ์ดˆ๊ธฐํ™”๋ฅผ ๋‚˜์ค‘์— ํ•  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ lateinit ํ‚ค์›Œ๋“œ๋ฅผ ๋ณ€์ˆ˜ ์„ ์–ธ ์•ž์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

lateinit ์‚ฌ์šฉ ์กฐ๊ฑด

#var ๋ณ€์ˆ˜์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

#null๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค.

#์ดˆ๊ธฐํ™” ์ „์—๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

#Int, Long, Double, Float์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

 

lazy

val str: String by lazy {
    println("์ดˆ๊ธฐํ™”")
    "hello"
}

println(str) //์ดˆ๊ธฐํ™”; hello
println(str) //hello

#val์„ ์–ธ ๋’ค์— by lazy๋ธ”๋ก์— ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” ์ดˆ๊ธฐํ™”ํ•  ๊ฐ’์„ ์ž‘์„ฑํ•œ๋‹ค.

lazy ์‚ฌ์šฉ์กฐ๊ฑด
#var์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

 

!!

val name: String? = "ํ‚ค๋‹ค๋ฆฌ"

val name2: String = name //์—๋Ÿฌ
val name3: String? = name //OK

val name4: String = name!! //OK

#๋ณ€์ˆ˜ ๋’ค์— !!์„ ์ถ”๊ฐ€ํ•˜๋ฉด null๊ฐ’์ด ์•„๋‹˜์„ ๋ณด์ฆํ•˜๊ฒŒ ๋œ๋‹ค.

 

?.

val str: String? = null

var upperCase = if (str != null) str else null //null
upperCase = str?.toUpperCase //null

#๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์‹œ ?. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด null๊ฐ’์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

 

?:

val str: String? = null

var upperCase = if (str != null) str else null //null
upperCase = str?.toUpperCase ?: "์ดˆ๊ธฐํ™”ํ•˜์‹œ์˜ค" //์ดˆ๊ธฐํ™”ํ•˜์‹œ์˜ค

# ?. ํ˜ธ์ถœ์‹œ null์ด ์•„๋‹Œ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์—˜๋น„์Šค ์—ฐ์‚ฐ์ž(?:)๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.