Kotlin Simple Version Compare

2023. 3. 21. 15:36·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
    }
}

'SpringBoot' 카테고리의 다른 글

profiles 를 이용한 aws iam 과 secret key 기반 인증 설정  (0) 2023.06.26
Spring 6 의 HTTP Interface  (0) 2023.03.14
Retrying Feign Calls  (0) 2023.03.14
RedisTemplate 과 Json Serializer 설정  (0) 2019.07.09
MongoDB _class 필드 제거하기  (0) 2019.07.09
'SpringBoot' 카테고리의 다른 글
  • profiles 를 이용한 aws iam 과 secret key 기반 인증 설정
  • Spring 6 의 HTTP Interface
  • Retrying Feign Calls
  • RedisTemplate 과 Json Serializer 설정
somoly
somoly
About me.
  • somoly
    somoly.tistory.com
    somoly
  • 전체
    오늘
    어제
    • 전체 (55)
      • SpringBoot (8)
      • Kotlin (5)
      • Javascript (4)
      • 백엔드 (6)
      • Linux (25)
      • Windows (1)
      • IT (2)
      • FF14 (1)
      • 애니 (1)
      • Figure (1)
      • 회사생활 (1)
  • 블로그 메뉴

    • HOME
    • TAGS
    • MEDIA
    • LOCATION
    • GUESTBOOK
    • ADMIN
    • WRITE
  • 링크

    • [FF14] 5.0 (71-80) 제작 레벨링 매크로
    • [FF14] 갈론드벨
    • [FF14] FFLogs
    • [FF14] Ariyala 장비 시뮬레이터
    • [FF14] 낚시 도우미
    • [FF14] 인테리어 정보
    • [FF14] 의상 코디 정보
  • 공지사항

  • 인기 글

  • 태그

    tabulator
    dynamodb local
    77인치
    versioncomapre
    우분투
    종료
    Spring
    utf-8
    리눅스
    HTTP
    최후의 재림
    Kotlin
    accesskey
    동영상
    interactive table
    string methods
    javascript
    부팅
    83인치
    ubuntu
    VirtualBox
    피규어
    springboot
    P2P
    exchage method
    linux
    jvminline
    bcmod
    30일전
    설치
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
somoly
Kotlin Simple Version Compare
상단으로

티스토리툴바