본문 바로가기

안드로이드/개념정리

[AOS] Kotlin 확장 함수

반응형

자바에서 기존에 생성되어 있는 클래스에 새로운 매소드를 추가하려면 해당 클래스를 상속해서 사용하는 방법밖에 없지만 코틀린은 확장 함수를 사용해 상속없이 가능합니다.

예를 들어 Long타입의 현재 시간을 '2021.10'과 같이 변경해야할때 아래처럼 Utils 클래스의 메소드를 만들어 재사용하곤합니다. 

class Utils{
        fun convertCalendarDate(tme: Long, format: String): String{
            return SimpleDateFormat(format).format(Date(tme))
        }
}

확장 함수로 구현했을 경우 아래처럼 바뀝니다.

fun Long.convertStrDate(format: String): String = SimpleDateFormat(format).format(Date(this))

 

확장함수에서 수정할 클래스 ( 위 코드에서 Long 클래스 ) 를 리시버 타입이라고 하는데, 정의할때 리시버 타입뒤에 점(.)을 찍고 사용한 함수명을 작성하면 됩니다.

리시버 타입은 함수 구현체에서 'this' 키워드를 이용해 사용할 수 있습니다.

 

| 실제 사용 코드

현재시간을 년.월로 출력하는 코드 입니다.

        var nowTimeStr = System.currentTimeMillis().convertStrDate("yyyy.MM")
        L.d("nowTime = $nowTimeStr")

출력 결과

 

 

직접 사용해보니 유틸 클래스를 만들어서 사용하는 것과 큰 차이는 없을수 있으나 보다 더 코틀린 스럽게 코딩하도록 변경된것 같습니다. 

이 글을 보시는 분들도 사용해보시지 않으셨다면 적용해보고 차이점을 직접 느껴보시는걸 추천합니다! 

 

 

반응형

'안드로이드 > 개념정리' 카테고리의 다른 글

[AOS] Navigation Component  (0) 2021.10.05