DevLog ๐ถ
[Kotlin] ์ฝํ๋ฆฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ ๋ฆฌ - Data Class, Companion Object, lateInit, val vs var ๋ณธ๋ฌธ
โ๏ธ/Kotlin
[Kotlin] ์ฝํ๋ฆฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ ๋ฆฌ - Data Class, Companion Object, lateInit, val vs var
dolmeng2 2022. 10. 22. 01:24- ์ฝํ๋ฆฐ ๊ณต๋ถํ๋ฉด์ ๋ฌธ๋ฒ์ ์ผ๋ก ๋๋ฌด ๋ถ์กฑํ๋ค๊ณ ์๊ฐ์ด ๋ค์ด์ ๋ช ๊ฐ์ง ํน์ง๋ค์ ์ ๋ฆฌํด๋ณด์๋ค.
โ๏ธ Kotlin Data class
- ๋ฐ์ดํฐ์ ๋ณด๊ด ๋ชฉ์ ์ผ๋ก ๋ง๋ค ์ ์๋ ํด๋์ค.
- ์๋์ผ๋ก toString(), hashCode(), equals(), copy() ๋ฉ์๋๋ฅผ ์์ฑํด์ค๋ค.
- ํน์ง
- ๋ฐ์ดํฐ ํด๋์ค์ ์์ฑ์๋ 1๊ฐ ์ด์์ ํ๋กํผํฐ๋ฅผ ์ ์ธํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ํด๋์ค์ ์์ฑ์ ํ๋กํผํฐ๋ val ๋๋ var์ผ๋ก ์ ์ธํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ํด๋์ค์ abstract, open, sealed, inner ๋ฅผ ๋ถ์ผ ์ ์๋ค.
- ํด๋์ค์์ toString(), hashCode(), equals(), copy()๋ฅผ overrideํ๋ฉด, ๊ทธ ํจ์๋ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- ๋ฐ์ดํฐ ํด๋์ค๋ ์์ ๋ถ๊ฐ๋ฅํ๋ค.
- toString()
- ์์ฑ์์ ํ๋๋ค๋ง ๊ฐ๋ฅํ๋ค. ๋ด๋ถ์์ ์ง์ญ๋ณ์๋ก ์ ์ธํ ๊ฒ์ ์ ์ฉ X
- copy()
- ๊ฐ์ฒด์ ์์ ๋ณต์ฌ๋ฅผ ์งํํ๋ค.
- copy์ ์ธ์๋ก ์์ฑ์์ ์ ์๋ ํ๋กํผํฐ๋ฅผ ๋๊ฒจ์ค ์ ์์ผ๋ฉฐ, ํด๋น ํ๋กํผํฐ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ ๋๋จธ์ง๋ ๋์ผํ ์ธ์๊ฐ ์ธํ ๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก ์์ฑ์์ ์ ์๋ ํ๋๋ง ๊ฐ๋ฅํ๋ค.
โ๏ธ Destructuring Declarations
- ๊ฐ์ฒด ๋ด๋ถ์ ์๋ ๊ฐ์ ๊บผ๋ด์ ๋ค๋ฅธ ๋ณ์์ ํ ๋น์ ํด์ค ๋ ๋ค์๊ณผ ๊ฐ์ด ์ถ์ฝํ์ฌ ์ธ ์ ์๋ค.
val hello = Site("Kotlin", 20)
val (name, age) = hello
- name = "Kotlin", age = 20
- ๋ค์๊ณผ ๊ฐ์ด ์์ฑ์ ๋ด๋ถ์ ์๋ ํ๋๊ฐ๋ค์ด ์๋์ผ๋ก ๋ค์ด๊ฐ๋ค.
- ๋์ ์๋ฆฌ)
- componentN() - ์ฌ๊ธฐ์ N์ ์ซ์ ๊ฐ๋ค์ด ๋ค์ด๊ฐ๋ค. ์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ตฌํํ๋ค.
- ์ฆ, ์์ ๊ฐ์ val url = site1.component1()์ด๋ผ๊ณ ๋ด๋ถ์์ ๋ณํ๋๋ฉฐ, component1() ๋ฉ์๋๋ ๋ด๋ถ์ ์ผ๋ก site1์ ๊ฐ์ฒด์ ๋ค์ด๊ฐ์๋ ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ ํํ์ด๋ค.
- ์ด๋, ์์ฑ์์ ์ ์ธ๋ ์์๋๋ก ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ณ์ ์์น๋ฅผ ์ ์ง์ ํด์ค์ผ ํ๋ค.
โ๏ธ Companion Object
companion object {
val initialCustomers = arrayOf(
Customer(1, "Hello1"),
Customer(2, "Hello2"),
Customer(3, "Hello3"))
}
- ์๋ฐ์์์ static ํค์๋๋ ๋น์ทํ๋ฉด์๋ ๋ค๋ฅด๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก static ํค์๋๊ฐ ๋ถ์ ๋ณ์์ ๊ฒฝ์ฐ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋ ๋ ํจ๊ป ๋ก๋ฉ๋๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ธ์คํด์ค ์์ฑ ์์ด๋ ํด๋์ค๋ช + .์ ํตํด ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ฐ์ , ์ฝํ๋ฆฐ์ object ํค์๋๋ถํฐ ์ดํดํด์ผ ํ๋ค.
- object ํค์๋๋ ์ฑ๊ธํค ์ ์ธ ๋ฐฉ์์ ๋ณด์ฅํ๋ค.
- ํน์ ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ฌ ํํ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ธฐ์กด์ ์ ์ธ์() ๋์ ์ {}๋ฅผ ํ์ฉํ ํํ์์ผ๋ก ์ ์ธํ ์ ์๋ค.
- companion object๋ object์ ํน๋ณํ ํํ๋ก์, ์ ๊ทผํ ๋ ํด๋์ค๋ช
.name์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ฌ๋, ์ ํํ๊ฒ๋ ๋ด๋ถ์ ์ผ๋ก ํด๋์ค๋ช .Companion.name์ผ๋ก ์ ๊ทผํ๋ฉฐ, ์ด๋ฅผ ์ถ์ฝํ์ฌ ํด๋์ค๋ช .name์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ๋ฟ์ด๋ค.
- ํด๋์ค๊ฐ ๋ก๋๋ ๋ ํจ๊ป ์์ฑ๋๋ ์ผ์ข ์ ๋๋ฐ (Companion) ‘๊ฐ์ฒด’๋ผ๊ณ ์๊ฐํด์ผ ํ๋ค.
- ๊ฐ์ฒด!์ด๊ธฐ ๋๋ฌธ์ ๋ณ์์ ํ ๋น์ด ๊ฐ๋ฅํ๋ฉฐ, companion object๋ ์์์ ๋งํ ์ถ์ฝ ๊ท์น ๋๋ถ์ ๋จ์ํ ํด๋์ค๋ช ์ผ๋ก๋ ์ฐธ์กฐ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋ค!
- companion ๋์ ์ ๋ค๋ฅธ ์ด๋ฆ ํ ๋น๋ ๊ฐ๋ฅํ๋ค. (๋ํดํธ๊ฐ Companion)
- ํด๋์ค ๋ด์์ companion Object๋ ๋ฑ 1๊ฐ๋ง ์ฌ์ฉํ ์ ์๋ค.
โ๏ธ ์ด๊ธฐํ ์ง์ฐ ๋ฐฉ๋ฒ
- lateinit
- lateinit var hello : Hello
- ๋ณ์๋ฅผ ํ์ํ ๋ ์ด๊ธฐํํ๊ณ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ด๊ธฐํํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด Exception์ด ๋ฐ์ํ๋ค.
- var์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, primitive type์ ์ ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- custom getter/setter ์ค์ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ๋ null check ํ (null์ด๋ฉด Exception ๋ฐ์) getXXX()๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ด๊ธฐํ ์ ์ getter๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ ๋ง๋ ์ฉ๋์ธ ๊ฒ ๊ฐ๋ค.
- null์ด ์๋ ํ๋กํผํฐ๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ? ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- nullable ํ๋กํผํฐ ์ฌ์ฉ ์ null๋ก ์ด๊ธฐํ๋์์ ๋ null checking์ ํตํด ์ด๊ธฐํ๊ฐ ๋์๋์ง ํ๋จ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
- lazyinit
- val hello : String by lazy {”hi”}
- ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ด๊ธฐํ ์ฝ๋๋ ํจ๊ป ์ ์ํ์ฌ, ๋ณ์ ์ฌ์ฉ ์ ์ด๊ธฐํ ์ฝ๋๊ฐ ๋์ํ๋ฉฐ ๋ณ์๊ฐ ์ด๊ธฐํ๋๋ค.
- ๋ด๋ถ์ {} ์ ์ํ ๋ถ๋ถ์ ๋ณ์๊ฐ ์ฒ์ ์ฌ์ฉ๋ ๋ ํ ๋ฒ ํธ์ถ๋๋ฉฐ, ๋ง์ง๋ง์ ์ ์ธ๋ ๊ฐ์ด ์ด๊ธฐ๊ฐ์ผ๋ก ํ ๋น๋๋ค. ์ด๋, ๋ฑ ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ค๋ ํน์ง์ด ์๋ค.
- val ํ๋กํผํฐ๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- lazy์ ํ๋กํผํฐ๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์๋ ์๋ค.
โ๏ธ ๋ณ์ ์ ์ธํ๊ธฐ
- val
- immutable type
- ์ด๊ธฐ์ ๊ฐ์ ํ ๋นํ๋ฉด ๋์ค์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ์๋ฐ์์์ final๊ณผ ๋น์ทํ ๋๋.
- ์ด๊ธฐํ ์ ๊ฐ์ ํ ๋นํ์ง ์์ผ๋ฉด ํ์ ์ ์ง์ ํด์ผ ๋๋ฉฐ, ๊ฐ์ ์ง์ ํ๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ถ๋ก ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํ์ ์ ์๋ตํด๋ ๋๋ค.
- val hello : String
- val hello = “Hello!”
- var
- mutable type
- ์ด๊ธฐ์ ๊ฐ์ ํ ๋นํด๋ ์ถํ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
- ์ผ๋ฐ ๋ณ์์ ๋์ผํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
โ๏ธ ์ฝํ๋ฆฐ์์ ๋น ๋ฑ๋กํ๊ธฐ
- @Configuration + @Bean์ ์ด์ฉํด์ ๋ฑ๋กํ ๋ ์ผ๋ฐ์ ์ผ๋ก CGLIB๋ฅผ ํตํด์ ํ๋ก์ ๊ฐ์ฒด ์์ฑ ํ, ํด๋น ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ ๊ฐ์ฒด ์์ฑ์ ์ํด ์์์ด ๊ฐ๋ฅํด์ผ ๋๋ค.
- ๊ทธ๋ฌ๋, ์ฝํ๋ฆฐ์ ํด๋์ค์ ๋ฉ์๋๋ final ํค์๋๊ฐ ์๋์ผ๋ก ๋ถ๊ธฐ ๋๋ฌธ์ ์์ ๋ถ๊ฐ๋ฅํ๋ค. → open ํค์๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
'โ๏ธ > Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ์ฝํ๋ฆฐ์ ๋ณ์์ ํ์ (0) | 2023.02.22 |
---|
Comments