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

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

 

1.0.1. 전제조건

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

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

 

1.0.2. 소스코드

<kotlin />
@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 } }

 

1.0.3. 테스트 코드

<kotlin />
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

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