확장 함수, 확장 프로퍼티
이 글은 Kotlin in Action 서적을 참고했습니다!
확장 함수
말 그대로 클래스를 확장 시킬 수 있는 기능이다! 클래스의 메소드인 것처럼 호출 할 수 있지만, 해당 클래스 안이 아닌 밖에 선언된 함수이다. String 클래스에 .length(), .toString()등 호출할 수 있는 메소드가 있는데 이처럼 사용자가 직접 함수를 추가 할 수 있다.
확장 함수 선언 방법
추가하려는 함수 이름 앞에 확장할 클래스의 이름을 붙이면 된다!
ex) String.lastChar() 여기서 String이 클래스의 이름이 되고, lastChar()는 함수의 이름이다.
fun String.lastChar() : Char = this.get(this.length-1)
// this 생략 가능
위 코드에서 String이 수신 객체 타입이고, this는 수신 객체이다!
var str = "android"
Log.d("log", "str.lastChar().toString()")
log : d
lastChar() 함수가 호출되면서 android는 수신객체가 된다.
즉, android.length-1이 되는셈이다.
확장 함수 정리
- 확장 함수는 해당 클래스의 일부가 아니다! 즉 위 코드의 lastChar()는 String 클래스의 일부가 아님.
- 수신 객체 타입에 의해 확장함수는 호출된다!
확장 프로퍼티
기존 클래스 객체에 대한 프로퍼티 형식의 구문으로 사용 할 수 있는 API를 추가할 수 있고, 프로퍼티 문법으로 더 짧게 코드를 작성이 가능하여 편한 경우가 있다.
확장 프로퍼티 선언 방법
val String.lastChar : Char
get() = get(length-1)
확장 함수의 경우와 마찬가지로 확장 프로퍼티도 일반적인 프로퍼티와 같지만, 단지 수신 객체 클래스(String)만 추가됐을 뿐이다! 필드(멤버변수)가 없어서, 최소한의 게터는 꼭 정의를 해야한다.
변경 가능한 확장 프로퍼티 선언 방법
var StringBuilder.lastChar : Char
get() = get(length-1) // getter
set(value : Char){
this.setCharAt(length-1, value) // setter
}
확장 프로퍼티 사용 방법은, 기존 프로피터 사용과 동일하다!
val sb = StringBuilder("Kotlin?")
sb.lastChar = '!'
위 코드의 실행 결과는 Kotlin!이 나온다!
Author And Source
이 문제에 관하여(확장 함수, 확장 프로퍼티), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@g_one212/확장-함수-확장-프로퍼티저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)