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)
        }
    }
}

 

추천 방법

  1. 빌더 패턴 제공: companion object를 사용해 빌더를 제공 (UserInfo.builder()).
  2. 정적 팩토리 메서드: 필요한 경우에 따라 정적 팩토리 메서드를 추가 (UserInfo.create(...)).

빌더가 요구된다면 1번 방법을, 단순하게 정적 생성만 필요하다면 2번 방법을 추천합니다. 추가 도움이 필요하면 알려주세요! 😊

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기