somoly.tistory.com
Published 2023. 3. 21. 15:36
Kotlin Simple Version Compare SpringBoot

Kotlin value class 및 operator override 를  이용한 버전 비교

 

전제조건

버전값은 콤마(.) 로 구분하며 숫자만 이용할 수 있다.

operator 의 경우 >, <, >=, <= 를 이용할 수 있다.

 

소스코드

@JvmInline
value class VersionNumber(private val ver: String) {
    operator fun compareTo(right: VersionNumber): Int {
        if (ver == right.ver) return 0

        var comparisonResult = 0

        val splitRegex = "\\.".toRegex()

        val lefts: List<String> = this.ver.split(splitRegex)
        val rights: List<String> = right.ver.split(splitRegex)
        val maxLengthOfVersionSplits = lefts.size.coerceAtLeast(rights.size)

        for (i in 0 until maxLengthOfVersionSplits) {
            val leftVersion = parseNumber(i, lefts)
            val rightVersion = parseNumber(i, rights)
            val compare = leftVersion.compareTo(rightVersion)
            if (compare != 0) {
                comparisonResult = compare
                break
            }
        }

        return comparisonResult
    }

    private fun parseNumber(i: Int, splits: List<String>): Int {
        return if (i < splits.size) {
            splits[i]
                .replace("[^0-9]".toRegex(), "")
                .toIntOrNull()
                ?: 0
        } else 0
    }

}

 

테스트 코드

class VersionNumberTest {
    @Test
    fun simpleTest() {
        assertThat(VersionNumber("1.0.0") >= VersionNumber("1.0.0")).isTrue
        assertThat(VersionNumber("1.0.0") <= VersionNumber("1.0.0")).isTrue
        assertThat(VersionNumber("1.0.0") < VersionNumber("1.0.1")).isTrue
        assertThat(VersionNumber("1.0.1") > VersionNumber("1.0.0")).isTrue
    }
}
profile

somoly.tistory.com

@RxCats

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!