Destructuring Declarations
Kotlin์์ ๋ฐ์ดํฐ ํด๋์ค(data class)๋ ๋ถ๋ณ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ ์ฉํ๋ฉฐ, toString()
, hashCode()
, equals()
์ ๊ฐ์ ์ ์ฉํ ๋ฉ์๋๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ๋ฆฌํ๋ ์
์ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ ํด๋์ค์ ๋ชจ๋ ํ๋๋ฅผ ๋ฐ๋ณตํด์ผ ํ ๋๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ ์ ์์ต๋๋ค.
2. ๊ตฌ์กฐ ๋ถํด ์ ์ธ(Destructuring Declarations) ์ฌ์ฉํ๊ธฐ
๋ง์ ์ฌ๋๋ค์ด ๋ฐ์ดํฐ ํด๋์ค์ componentN()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํ๋ ์
์์ด ํด๋์ค์ ๋ชจ๋ ์์ฑ์ ๋ฐ๋ณตํ ์ ์๋ค๊ณ ์คํดํฉ๋๋ค. ํ์ง๋ง ์ด ํจ์๋ค์ ์์ฑ ๊ตฌ์กฐ ๋ถํด๋ฅผ ์ํด์๋ง ์์ฑ๋ฉ๋๋ค.
๊ตฌ์กฐ ๋ถํด ์ ์ธ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ์์ฑ์ ์ถ์ถํ์ฌ ๋ณ์์ ํ ๋นํ ์ ์์ต๋๋ค. ์ด๋ ์ง์ ํ ์๋ฏธ์ ๋ฐ๋ณต์ ์๋์ง๋ง, ๋ฐ์ดํฐ ํด๋์ค์ ๋ชจ๋ ํ๋๋ฅผ ์ถ์ถํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จผ์ , name
๊ณผ age
๋ผ๋ ๋ ๊ฐ์ ์์ฑ์ ๊ฐ์ง Person
๋ฐ์ดํฐ ํด๋์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ์ฝ๋์์ Person
๊ฐ์ฒด๋ฅผ ๊ตฌ์กฐ ๋ถํดํ์ฌ ํ๋๋ฅผ ์ง์ ์ถ์ถํ๊ณ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ตฌ์กฐ ๋ถํด ์ ์ธ ์ ๋ฐ์ดํฐ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๋ ์๋ฅผ ์๊ณ ์์ด์ผ ํ๋ฏ๋ก, ํ๋ ์๊ฐ ๋ง์ ๋ฐ์ดํฐ ํด๋์ค์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
๊ตฌ์กฐ ๋ถํด ์ ์ธ์ ์ปดํ์ผ ํ์์ ํ์ ์ ํ์ธํ๋ฏ๋ก, ํ์ ๋ถ์ผ์น๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ ์ํ์ ์ค์ฌ์ค๋๋ค. ๋ํ, ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ฌ ๋ฐ์ดํฐ ํด๋์ค์ ์์ฑ์ ์ ๊ทผํ๋ ๋ช ํํ ๋ฌธ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ๋์ ์ธ ๋ฐ๋ณต์๋ ํ๊ณ๊ฐ ์์ผ๋ฉฐ, ๋ง์ ์์ฑ์ ๊ฐ์ง ๋ฐ์ดํฐ ํด๋์ค์์๋ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
3. KClassUnpacker ์ ๋
ธํ
์ด์
ํ๋ก์ธ์ ์ฌ์ฉํ๊ธฐ
๋ฐ์ดํฐ ํด๋์ค์ ์์ฑ์ ๋ฐ๋ณตํ๋ ๊ณผ์ ์ ๋จ์ํํ๊ธฐ ์ํด, ์ ๋
ธํ
์ด์
ํ๋ก์ธ์ฑ ๋น๋ ํ๋ฌ๊ทธ์ธ์ ํ๋ก์ ํธ์ ํตํฉํ ์ ์์ต๋๋ค. KClassUnpacker
ํ๋ฌ๊ทธ์ธ์ ์ด ๊ณผ์ ์ ์ฉ์ดํ๊ฒ ํด์ฃผ์ง๋ง, ์ค์ ์ด ๋ณต์กํ ์ ์์ผ๋ฉฐ ํ๋ก์ ํธ์ pom.xml
ํ์ผ์ ํน์ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
3.1. ๋น๋ ํ๋ฌ๊ทธ์ธ ์ค์
๋จผ์ , Kotlin ์ ๋
ธํ
์ด์
ํ๋ก์ธ์์ด๋ฏ๋ก kotlin-maven-plugin
์ kapt
๋ชฉํ๋ฅผ ์คํํ๋๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.
3.2. ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌ์ฑ
๋ค์์ผ๋ก, KClassUnpacker
๊ฐ JitPack Maven ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์คํ
๋์ด ์์ผ๋ฏ๋ก ํ๋ก์ ํธ๊ฐ JitPack์ ์ฝ์ ์ ์๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์ด ์ค์ ์ ํ๋ก์ ํธ๊ฐ mavenCentral()
์ ๊ธฐ๋ณธ ์์ค๋ก ์ฌ์ฉํ๊ณ , Maven Central์ ์๋ ์ข
์์ฑ์ JitPack์์ ๋ก๋ํ ์ ์๋๋ก ํฉ๋๋ค.
3.3. KClassUnpacker ์ข
์์ฑ ์ถ๊ฐ
๋ง์ง๋ง์ผ๋ก, ์ ๋
ธํ
์ด์
ํ๋ก์ธ์๋ก์์ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ธฐ ์ํด KClassUnpacker
์ข
์์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด ์น์
์์๋ GitHub์ KClassUnpacker
๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ฒ์ 1.0.2)๋ฅผ ์๊ฐํฉ๋๋ค. ์ด ์ค์ ์ ์ปดํ์ผ ์์ ์ ์ปดํ์ผ๋ฌ๊ฐ ํด๋น ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ฉฐ, ๋ฐํ์ ์ข
์์ฑ์์๋ ์ ์ธ๋ฉ๋๋ค.
4. KClassUnpacker ์ฌ์ฉ๋ฒ
์ด์ KClassUnpacker
๋ฅผ ์ค์ ํ์ผ๋ฏ๋ก, ๋ฆฌํ๋ ์
์์ด ๋ฐ์ดํฐ ํด๋์ค์ ๋ชจ๋ ํ๋๋ฅผ ๋ฐ๋ณตํ ์ ์์ต๋๋ค. ๋์ ๋ฐ์ดํฐ ํด๋์ค์ @AutoUnpack
์ ๋
ธํ
์ด์
์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด์ Person
ํด๋์ค์ ํ๋๋ฅผ ๋ฐ๋ณตํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์์ ๋ @AutoUnpack
์ ๋
ธํ
์ด์
์ ํตํด Person
ํด๋์ค์ ํ๋๋ฅผ ๋ฐ๋ณตํ ์ ์๊ฒ ํด์ค๋๋ค. ํ
์คํธ๋ฅผ ํตํด getFields
๋ฉ์๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
4.1. ์ฅ๋จ์
์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ช ๊ฐ์ง ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ต๋๋ค.
์ฅ์ :
์ปดํ์ผ ํ์ ์ฒดํฌ ๋ฐ ์ฝ๋ ์์ฑ: ์ ๋ ธํ ์ด์ ํ๋ก์ธ์ฑ์ ํตํด ์ฝ๋์ ์ ํ์ฑ์ ๋์ด๊ณ ๋ฐํ์ ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
๋ฆฌํ๋ ์ ํํผ: ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์๋ ์ฝ๋ ์์ฑ: ํ๋ฌ๊ทธ์ธ์ด ์ธํฉํน ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ์ด ์์์ ์ผ๋ก ์์ฑํด์ผ ํ๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์ค์ฌ์ค๋๋ค.
๋จ์ :
๋ณต์กํ ์ค์ : ์ ๋ ธํ ์ด์ ํ๋ก์ธ์๋ฅผ ๊ตฌ์ฑํ๊ณ ๋น๋ ํ๋ก์ธ์ค์ ํตํฉํ๋ ๊ฒ์ด ๋ณต์กํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ฐ์์๊ฒ๋ ํ์ต ๊ณก์ ์ด ์์ ์ ์์ต๋๋ค.
์ธ๋ถ ์์กด์ฑ: ์ธ๋ถ ์ ๋ ธํ ์ด์ ํ๋ก์ธ์์ ์์กดํ๊ฒ ๋์ด ์ถ๊ฐ์ ์ธ ์ข ์์ฑ๊ณผ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋๋ฒ๊น ์ด๋ ค์: ์์ฑ๋ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ด ์ด๋ ค์ธ ์ ์์ผ๋ฉฐ, ์์ฑ๋ ์ฝ๋๊ฐ ์๋ณธ ์์ค ์ฝ๋์ ์ด๋ป๊ฒ ๋์๋๋์ง ๋ช ํํ์ง ์์ ์ ์์ต๋๋ค.
Last updated
Was this helpful?