Initializer Blocks

About

Java์—์„œ ์ƒ์„ฑ์ž๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ƒ์„ฑ์ž์—์„œ validation์„ ์ ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์ด๋Ÿฌํ•œ validation ๋กœ์ง์„ init ๋ธ”๋ก์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์—์„œ ์ฃผ์ƒ์„ฑ์ž(primary constructor)์—๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํ•„์š”ํ•˜๋‹ค๋ฉด init ๋ธ”๋ก์—์„œ ์ดˆ๊ธฐํ™” ๋กœ์ง ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

init ๋ธ”๋ก์€ ์–ด๋””์— ๋„ฃ๋Š”์ง€์— ๋”ฐ๋ผ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฉฐ, top-down์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

class Car(_yearOfMake: Int, _color: String) {
    val yearOfMake: Int
    val color: String
    
    init {
        if (yearOfMake < 1886) {
            throw IllegalArgumentException("yearOfMake cannot be greater than 1886")
        }
    }
}

๋˜ํ•œ, init ๋ธ”๋ก์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ตณ์ด ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋„ฃ์–ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ?

Multiple Initializer Blocks

Stack Overflow์— ๋‚˜์˜จ ์˜ˆ์ œ๋ฅผ ์กฐ๊ธˆ ๋ณ€ํ˜•ํ•ด๋ดค๋‹ค.

class MultiInitBlock(
    _x: Int,
    _y: Int,
) {
    val x: Int = _x

    init {
        if (x <= 0) {
            throw IllegalArgumentException("x must be greater than 0")
        }
    }

    var y: Int = _y

    init {
        // Continue with initialization...
    }
}

๋‹ต๋ณ€์ž๋Š” ์ฃผ์ƒ์„ฑ์ž์—์„œ๋Š” ๋กœ์ง์„ ๋„ฃ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ init ๋ธ”๋ก์„ ์ด์šฉํ•˜๋ฉด ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ํ”„๋กœํผํ‹ฐ ๋“ฑ์˜ ์˜์กด์„ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. (ํŠนํžˆ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ฝ๊ธฐ ์ „์šฉ val์ผ ๋•Œ)

ํ•˜๋‚˜์˜ init ๋ธ”๋ก์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ๊ธฐ์ „์šฉ ํ”„๋กœํผํ‹ฐ์˜ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฐ˜๋ฉด, ์—ฌ๋Ÿฌ ๊ฐœ์˜ init ๋ธ”๋ก์„ ์ด์šฉํ•˜๋ฉด ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ดˆ๊ธฐํ™”์— ๋„ฃ์„ ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ๊ฐ€ ๋” cleanํ•˜๊ณ , ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

๋‚ด๊ฐ€ ๋ณด๊ธฐ์—๋„ ๊ทธ๋ƒฅ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋กœ์ง์ด ์žˆ๋”๋ผ๋„ ํ•˜๋‚˜์˜ init ๋ธ”๋ก์— ๋„ฃ์–ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์˜คํžˆ๋ ค {} ๋กœ ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„์„ ๊ฐ์‹ธ๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์˜ฌ๋ผ๊ฐˆ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. (์‚ฌ์‹ค ์—ฌ์ „ํžˆ ๊ฐ€๋…์„ฑ์€ ํ•˜๋‚˜์˜ init ๋ธ”๋ก์ด ๋” ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.)

์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ init ๋ธ”๋ก์„ ์ด๋Ÿฐ ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ๋‹ฌ ์ˆ˜๋„ ์žˆ์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์†์„ฑ๊ณผ init ๋ธ”๋ก์ด ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์„ž์—ฌ ์žˆ์–ด์„œ ๋ณด๊ธฐ์—” ๊ทธ๋ ‡๊ฒŒ ์ข‹์•„๋ณด์ด์ง„ ์•Š์ง€๋งŒ ๋ง์ด๋‹ค.

๊ฐ€๊ธ‰์  init ๋ธ”๋ก์€ 1๊ฐœ๋งŒ ๋งŒ๋“ค๊ณ , ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด 1๊ฐœ๋„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ์ƒ์„ฑ์ž์—์„œ ์ตœ๋Œ€ํ•œ ์•„๋ฌด๋Ÿฐ ์ž‘์—…๋„ ์•ˆํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ๊ณผ ํผํฌ๋จผ์Šค ์ธก๋ฉด์—์„œ ๋ชจ๋‘ ๋” ์žฅ์ ์ด ํฌ๋‹ค๊ณ  ํ•œ๋‹ค. <๋‹ค์žฌ๋‹ค๋Šฅ ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ>(์˜์ง„๋‹ท์ปด, 2021)

REF

Last updated

Was this helpful?