오늘은 Kotlin의 매우 중요한 개념인 Extension Functions에 대해서 정리해 보려고 하는데요.

특히 Java에서 Kotlin으로 넘어오면서,

개인적으로는 코드의 가독성과 개발자의 생산성을 높여주는 부분이라고 생각이 들었습니다.

그럼 하나씩 보도록 하겠습니다.

 

1. Extension Functions

Extention의 뜻은 연장 혹은 확장인데요.

이름에서 알 수 있듯이, 기존 Class에 함수를 추가할 수 있도록 하는 기능입니다.

무엇보다도 상속받거나 특별한 디자인 패턴을 쓰지 않으면서,

기존의 Class에 안전하게 함수를 추가시킬 수 있다는 점이 큰 장점인데요.

동시에 코드도 매우 간결해져서 읽기도 매우 쉬워집니다.

 

이 글에서는 개념적인 설명보다는, 실제로 구현하는 코드등을 보면서 정리해 보려고 하는데요.

그럼 어떻게 구현하는지 하나씩 보도록 하겠습니다.

 

2. Extension Functions 구현

Extension Function의 구현은,

기존 클래스에 "."(닷)으로 연결한 다음,

Extension(확장)할 함수명과 return타입을 적어주고 구현체를 "{}"안에 넣어주면 되는데요.

Java에서 메소드를 추가할려고 하면 클래스를 수정하고,

코드도 상당히 늘어나겠지요.

 

다른 예도 보도록 하겠습니다.

첫번째는, Realm클래스에 studentDao()라는 메소드를 추가해서 StudentDao클래스의 객체를 호출하도록 하는 것 이구요.

두번째는 RealmResults의 Generic타입에 asLiveData()라는 메소드를 붙여서

LiveRealmData라는 Wrapper클래스의 객체를 만들어주는 메소드 인데요.

얼마나 많은 코드를 줄여주었는지 생각해 보면, 왜 Extension Functions를 사용하는지 알 수 있을 것 같습니다.

 

 

 

다음은 조금 더 복잡한 케이스일 것 같습니다.

아래 코드는 고차함수와 inline키워드를 같이 사용하였는데요.

먼저 extentionFunction을 이용해 showMeHash함수를 추가하였습니다.

mapper를 이용해서 함수의 사용자가 Lambda식에서  hashcode에 접근할 수 있도록 하였습니다.

(혹시 고차함수나 inline에 대해서는 아래 링크된 글의 4-2. Higher-order functions(고차 함수) 및 inline함수를 참조해 주시면 됩니다.)
>> Kotlin을 배워보자 part1(Basic Types, Function, Null, 타입 변환, Lambda)

 

 

3. 주의할 점

그럴 일은 없겠지만, Class의 기존 함수와 똑같은 이름과 인자의 함수를 추가해서 사용하려고 하면,

에러는 않나겠지만, 기존 함수가 우선이 되므로 멤버함수의 이름에 있어서는 주의가 필요합니다.

 

이상으로 Kotlin Extention Functions에 대해서 알아보았는데요.

이와 관련해서 더 좋은 방법등이 있다면 이 글을 통해서 업데이트 하도록 하겠습니다.

+ Recent posts