๋ถ์ : Hey, Kotiln (์ฝํ๋ฆฐ ๊ธฐ๋ณธ ์์ ์์๊ฐ๊ธฐ)
์์งํ ํฅ๋ฏธ๋กญ๋ค. ๊ทธ๋ ์ง ์์๊ฐ? lombok์์ ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ์ ๋
ธํ
์ด์
๋ ๊ฐ๋ฅผ ๋ฝ๋๋ค๋ฉด ๋๋ @Getter
์... @Builder
์ ๋ฝ์ ๊ฒ์ด๋ค. ์ด๊น์์ด Kotlin์์๋ @Builder
์ ๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ, ์ ๊น, ํ์๊ฐ ์์๊น์?
์ฐ๋ฆฌ์ ์น๊ตฌ ๊ตฌ๊ธ์ ๋น์ฅ ์ฐพ์๋ดค์ต๋๋ค. ์น๊ตฌ์ ๋๋ต์, Kotlin์ ์ฌ์ฉํ ๊ฒฝ์ฐ Builder ํจํด์ ๊ตณ์ด ์ฌ์ฉํ ํ์ ์๋ค.
Builder Pattern์ ๊ดํ ๊ฑด ๊นํ๋ธ languageStudy->Java์ ์ ๋ฆฌํด๋๋ค. ๐
Builder Pattern์ ์ฅ์ ์ผ๋ก๋
-
๊ฐ ์ธ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์๊ธฐ ์ฝ๋ค.
ํ์ ์ด ๊ฐ์ ๋งค๊ฐ๋ณ์๊ฐ ์ฐ๋ฌ์ ์์ ๋ ์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด ๊ฐ์ ์๋ชป ์ ๋ฌํ์ ๋ ์ฐพ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๋ก ์ด์ด์ง ์ ์๋ค.
-
setter ๋ฉ์๋๊ฐ ์์ผ๋ฏ๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค. (๊ฐ์ฒด ์ผ๊ด์ฑ์ด ๊นจ์ง์ง ์๋๋ค.)
-
๊ฐ์ฒด๋ค๋ง๋ค ๋ค์ด๊ฐ์ผํ ์ธ์๊ฐ ๊ฐ๊ฐ ๋ค๋ฅผ ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ฑ์ด ์๋ค.
๋ค์ ๋ณด์.
- ๊ฐ ์ธ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์๊ธฐ ์ฝ๋ค.
- ํ๋๊ฐ ์ ์ธ๋ ์์์ ์๊ด์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๊ฐ์ฒด๋ค๋ง๋ค ๋ค์ด๊ฐ์ผํ ์ธ์๊ฐ ๋ค๋ฅผ ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์ฝํ๋ฆฐ์์๋ ๋ชจ๋ constructor๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค. (์ ๋ง?)
Java์ ์์ฑ์์๋ ๋ค๋ฅธ ์ ์ด Kotlin์ default ๋ณ์ ์ ์ธ์ ํตํด ์ฌ๋ฌ ์์ฑ์๋ฅผ ํ ๋ฒ์ ์ ์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ์ข์ ๊ธ.
User(email="[email protected]", "nickname", "password")
๋ค์๋ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ ์ธ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์๊ธฐ ์ฝ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ์์ ์๊ด์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ด์ง๋ค. (๊ฐ์ธ์ ์ผ๋ก ์๋ฏธ๋ฅผ ์๊ธฐ ์ฌ์ด๊ฑด Builder parttern์ ์ฌ์ฉํ๋ ๊ฒ ํจ์ฌ ์ฝ์ง๋ง.... ๊ทธ๋์ ๋ฌด์กฐ๊ฑด Kotlin์์ Builder Pattern? ์ ๋ผ,๋ ์๋๋ค.)
๐ ๊ฐ ์ธ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์๊ธฐ ์ฝ๋ค. / ํ๋๊ฐ ์ ์ธ๋ ์์์ ์๊ด ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ณ์ด๋ค. ํด๋น ์ปฌ๋ผ์ ๊ธฐ๋ณธ๊ฐ์ ์ฃผ๊ฒ ๋๋ฉด ๊ทธ ์ธ์๋ ๊ฐ์ ํ ๋นํด์ฃผ์ง ์๋๋ผ๋ ๊ธฐ๋ณธ๊ฐ์ด ๋ค์ด๊ฐ๋ฏ๋ก ์์ฑ ํ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
class User(name: String, age: Int = 10)
age์ฒ๋ผ ๊ธฐ๋ณธ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์์ ๊ฐ์ ํ ๋นํด์ฃผ์ง ์์๋ ๋๊ฒ ํ ์ ์๋ค. ๊ฐ์ฒด๋ค๋ง๋ค ๋ค์ด๊ฐ์ผํ ์ธ์๊ฐ ๋ค๋ฅผ ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.๊ฐ ํด๊ฒฐ๋๋ค.
๐ ๊ฐ์ฒด๋ค๋ง๋ค ๋ค์ด๊ฐ์ผํ ์ธ์๊ฐ ๋ค๋ฅผ ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
lombok๋ ํ์ ์๋ค. ์? Kotlin์๋ data class๊ฐ ์์ผ๋๊น.
data ํด๋์ค๋ toString(), hashCode(), equals(), copy() ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค. Kotlin ์ฝ๋๋ฅผ ์ฒ์ ์งค ๋ data class์ ์ฌ๋ถ๋ฅผ ์๊ณ ๊น์ง ๋๋๋ค. ๋ฐ์ดํฐ๋ง์ ๋ค๋ฃจ๋ ํด๋์ค์ ๋ํด ๊ฐํธํ ๋ฌธ๋ฒ์ ์ ๊ณตํด์ฃผ๊ณ , ์ฌ์ฉ๋ฒ๋ ๊ทธ๋ฅ ํด๋์ค ์์ data๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค. data class User()
- ์์ ๋ฐ์ ์ ์๋ค.
- 1๊ฐ ์ด์์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
toString()
์ ์์ฑ์์ ์ ์๋ ํ๋กํผํฐ๋ง ์ถ๋ ฅ๋๋ค.
์ ๊ธฐํ ๊ฑธ ๋ฐฉ๊ธ ํ๋ ๋ ๋ฐ๊ฒฌํ๋ค. ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋จ์ ํ๋ ๊ฐ๋ง ๋ณ๊ฒฝํด์ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ data class์ copy๋ฅผ ์ด์ฉํ๋ค.
val fUser = User("name", "pass", 30)
val sUser = fUser.copy(name = "nickname")
์ ๋ง ์ ๊ธฐํ๋ค.
์ด๋ฐ Kotlin ํน์ฑ ์ id๋ฅผ ์๋๋ก ๋ฃ๋ ๊ฒ ์ข๋ค๋ ๊ธ์ ๋ณด์๋ค.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0L
id ๊ฐ์ ๋ฃ์ด ์ค ํ์ ์๋ ๊ฒฝ์ฐ์ id๋ฅผ ์์ ๋ฃ์ผ๋ฉด ์์ฑ์๋ก ์์ฑํ ๋ ํ๋ผ๋ฏธํฐ ์์๊ฐ ๋ง์ง ์๊ธฐ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. (์ด๋ฉ์ผ์ ๋ฃ์๋๋ ์ฌ๊ธฐ id ์๋ฆฌ์ธ๋ฐ์.)
๋ค์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ง๋ง, ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. id๋ฅผ ๋งจ ์๋์ ์ ์ธํ๋ ๊ฒ. ๋ค์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๊น๋ํ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
Builder Pattern - ๋ด์ ๋ ๋ธ๋ก๊ทธ