Kotlin 에서 Inline함수 혹은 확장함수 만들기

h블로그·2023년 5월 28일

LocalTime 타입의 값을 어떤 변환하여 다른 결과를 반환하는 함수를 만들어야 했다.
일단 프로젝트 내에서 이런경우 어떤식으로 처리했는지 찾아보았다.
보통 DateUtil인 유틸성 클래스에 정적 메소드로 날짜나 시간에 관련된 변환 함수들을 모아두고 그걸 호출해서 쓰고 있었다.

처음엔 나도 그렇게 만들었다.

fun convertTime(time) {
    ..
    return convertedValue
}

그러나, 확장함수나 inline함수로 만들면 사용하는 쪽에 소스라인이 줄고 가독성이 좋을것이라고 생각했다.
두 시간을 변환하여 비교하는 부분이였는데, 아래는 관련 소스를 대충 로직은 생략하고 호출하는 쪽의 예시를 만든것이다.

util 사용

val time1 = DateUtil.convertTime(beforeTime1)
val time2 = DateUtil.convertTime(beforeTime2)

if(time1.isAfter(time2) {
    ..
}

inline함수나 확장함수 사용

if(beforeTime1.convertTime().isAfter(beforeTime.convertTime())) {
    ..
}

아래는 변수 선언이 불필요하고, 가독성이 좋다!
또한 구현한 함수 내부가 LocalTime 내부 함수를 사용하여 시간을 변환하는 코드였다.
그러면 inline으로 할까.. 확장함수로 할까.. 고민을 시작했다.

inline 함수

  • 컴파일러가 함수 본문을 호출부로 바꿔치기 해줌
  • 짧은 라인으로 구현 권장 (1~3)

확장함수

  • 기존에 정의된 클래스에 함수를 추가 정의
  • 익명 클래스를 호출하는 것으로 수행됨

나의 결론 !

inline 함수로 하기엔 구현쪽 라인이 좀 길다고 생각보였다. (inline함수인 경우 1~3라인정도로 짧게 구현하길 권장) util 클래스였어도 함수를 호출하는 것이기도 하고, 정적함수로 꼭 해야겠다 할만큼 빈번하게 사용되진 않을 함수였다.
그래서 나는 확장함수로 구현하였다.

fun LocalTime.convertTime() {
    ..
}
profile
😎🙈🙈🙈🤓

0개의 댓글