공부/이펙티브코틀린

아이템 28 - API 안정성을 확인하

띵커베르 2024. 6. 23. 11:24
728x90
  • API 안정성을 확인하는 것은 소프트웨어의 일관성과 신뢰성을 보장하기 위해 매우 중요합니다. 안정적인 API는 사용자와 개발자에게 신뢰를 주고, 소프트웨어 유지보수를 용이하게 합니다.
  • Versioning System
    • Versioning System 은 API 의 안정성을 유지하고, 변경 사항을 명확히 전달하기 위해 사용하는 체계적인 버전 관리 방법
    • Semantic Versioning (SemVer)
      • Semantic Versioning 은 가장 널리 사용되는 버전 관리 시스템 중 하나로, 세가지 숫자로 구성
      • MAJOR.MINOR.PATCH. 각 숫자는 특정한 의미를 가지고 있음
        • MAJOR: 하위 호환성이 깨지는 변경이 있을 때 증가합니다.
        • MINOR: 하위 호환성을 유지하면서 새로운 기능을 추가할 때 증가합니다.
        • PATCH: 하위 호환성을 유지하면서 버그를 수정할 때 증가합니다.
1.0.0 - 초기 안정화된 버전
1.1.0 - 새로운 기능 추가 (하위 호환성 유지)
1.1.1 - 버그 수정 (하위 호환성 유지)
2.0.0 - 하위 호환성이 깨지는 변경 사항 포함

 

  • @Experimental
    • @Experimental 어노테이션은 아직 안정적이지 않은 실험적인 API 기능에 사용
    • 이러한 기능은 향후 변경되거나 제거될 수 있음을 의미
@RequiresOptIn(level = RequiresOptIn.Level.WARNING)
annotation class ExperimentalAPI

@ExperimentalAPI
class ExperimentalFeature {
    fun experimentalMethod() {
        println("This is an experimental method")
    }
}

@Deprecated("Use newFunction() instead", ReplaceWith("newFunction()"))
fun oldFunction() {
    println("This is the old function")
}

fun newFunction() {
    println("This is the new function")
}

fun main() {
    // 옵트인 없이 실험적 기능을 사용하면 경고 메시지가 표시됩니다.
    val feature = ExperimentalFeature()
    feature.experimentalMethod()

    // 대체 기능이 제공된 사용 중단된 기능을 호출하면 경고 메시지가 표시됩니다.
    oldFunction()

    // 올바른 사용 예
    newFunction()

    // 옵트인하여 실험적 기능을 사용하는 예
    @OptIn(ExperimentalAPI::class)
    fun useExperimentalFeature() {
        val feature = ExperimentalFeature()
        feature.experimentalMethod()
    }

    useExperimentalFeature()
}

 

 


 

  • 생각:
    • SemVer 이 가장 무난하다고 생각 
    • 추후 변경되는 api 가 있다면 Deprecated 와 ReplaceWith 를 이용해 처리해 봐야겠다.
    • url 또한 설계를 잘해야겠다..요즘들어 너무 생각없이 한 코드들이 보임 추후 정리해서, 수정된 url 도 받을 수 있게 처리할 예정

 

728x90