val/var in Constructor

About

์ฝ”ํ‹€๋ฆฐ์—๋Š” ์ฃผ์ƒ์„ฑ์ž(primary constructor)์ด๋ผ๊ณ  ํ•˜๋Š”, ์ƒ์„ฑ์ž ๋ฉ”์†Œ๋“œ ์„ ์–ธ๊ณผ ๋™์‹œ์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐ€๋” ํด๋ž˜์Šค ์ƒ์„ฑ์— ํ•„์š”ํ•˜์ง€๋งŒ ํ”„๋กœํผํ‹ฐ๋กœ๋Š” ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

Solution

์ •๋‹ต์€ "val / var์„ ๋นผ๋ฉด ๋œ๋‹ค"์ด๋‹ค.

์ฃผ์ƒ์„ฑ์ž์— val ๋˜๋Š” var์„ ์ถ”๊ฐ€ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

๋ฐ˜๋Œ€๋กœ, ์ ์ง€ ์•Š๋Š”๋‹ค๋ฉด (primary) constructor parameter๊ฐ€ ๋˜์–ด ๊ทธ๋ƒฅ ํ•ด๋‹น ์ด๋ฆ„์„ ๊ฐ€์ง„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋  ๋ฟ์ด๋‹ค. ํ•ด๋‹น ๊ฐ’์€ init ๋ธ”๋ก ๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

class User(
    val id: Long,
    email: String,
) {
    val hasEmail = email.isNotBlank() // email can be accessed here
    init {
        // email can be accessed here
    }
    
    fun getEmail(): String {
        // email can't be accessed here
    }
}

REF

Last updated