Kotlin에서는 Lombok의 @Builder를 사용할 수 없으므로, .builder()와 같은 Lombok 스타일의 빌더를 사용할 수 없습니다. 대신 Kotlin에서는 DSL 스타일의 빌더 패턴을 직접 구현하거나 Kotlin의 copy 메서드를 활용할 수 있습니다.
빌더 패턴 구현
Kotlin에서 Java와 호환되는 빌더를 작성합니다. 빌더 클래스를 포함한 정적 메서드를 Kotlin의 @JvmStatic을 사용해 제공합니다.
data class UserInfo(
@JsonIgnore
val userSeq: Long,
@Schema(description = "sns 유형")
val snsType: SNSTypeCode?,
@Schema(description = "아이디")
val userId: String?,
@JsonIgnore
val accessToken: String?,
@JsonIgnore
val platformType: PlatformTypeCode?,
val isLogin: Boolean
) {
companion object {
@JvmStatic
fun builder() = Builder()
class Builder {
private var userSeq: Long = 0
private var snsType: SNSTypeCode? = null
private var userId: String? = null
private var accessToken: String? = null
private var platformType: PlatformTypeCode? = null
private var isLogin: Boolean = false
fun userSeq(userSeq: Long) = apply { this.userSeq = userSeq }
fun snsType(snsType: SNSTypeCode?) = apply { this.snsType = snsType }
fun userId(userId: String?) = apply { this.userId = userId }
fun accessToken(accessToken: String?) = apply { this.accessToken = accessToken }
fun platformType(platformType: PlatformTypeCode?) = apply { this.platformType = platformType }
fun isLogin(isLogin: Boolean) = apply { this.isLogin = isLogin }
fun build(): UserInfo {
return UserInfo(userSeq, snsType, userId, accessToken, platformType, isLogin)
}
}
}
}
정적 팩토리 메서드 제공
빌더 대신, 다양한 생성 조합을 제공하는 정적 팩토리 메서드를 Kotlin의 @JvmStatic으로 구현할 수도 있습니다.
data class UserInfo(
@JsonIgnore
val userSeq: Long = 0,
@Schema(description = "sns 유형")
val snsType: SNSTypeCode? = null,
@Schema(description = "회원 아이디")
val userId: String? = null,
@JsonIgnore
val accessToken: String? = null,
@JsonIgnore
val platformType: PlatformTypeCode? = null,
val isLogin: Boolean = false
) {
companion object {
@JvmStatic
fun create(
userSeq: Long,
snsType: SNSTypeCode?,
userId: String?,
isLogin: Boolean
): UserInfo {
return UserInfo(userSeq, snsType, userId, null, null, isLogin)
}
}
}
추천 방법
- 빌더 패턴 제공: companion object를 사용해 빌더를 제공 (UserInfo.builder()).
- 정적 팩토리 메서드: 필요한 경우에 따라 정적 팩토리 메서드를 추가 (UserInfo.create(...)).
빌더가 요구된다면 1번 방법을, 단순하게 정적 생성만 필요하다면 2번 방법을 추천합니다. 추가 도움이 필요하면 알려주세요! 😊