Kotlin에서 Collection
Kotlin
에서의 Collection
은 자체적인 컬렉션 기능이 없다.
기존 Java
의 컬렉션을 그대로 가져간다.
하지만, 기존의 Java
의 컬렉션에 없는 기능을 제공한다.
예를들어, 마지막 원소 또는 첫번째 원소를 가져오고 싶다면 다음과 같이 작성이 가능하다.
val strings = listOf("first","second","third")
strings.last()
strings.first()
메서드를 다른 클래스에 추가 : 확장 함수
확장함수란 ?
어떤 클래스의 멤버 메서드인 것처럼 호출될 수 잇지만, 그 클래스 밖에 선언된 함수이다.
말로만 들으면 애매할 수 있으니, String의 마지막 문자를 가져오는 함수를 작성해보겠다.
fun String.lastChar() : Char = this.get(this.length - 1)
확장 함수를 만들기 위해서는 수신 객체 타입 뒤에 확장할 클래스 이름만 덧붙이면 된다.
위의 함수에서 String
이 수신 객체 타입 이며, this
는 수신 객체이다.
println("Kotlin".lastChar())
다음을 출력하면, n
이 출력이 된다. 여기서 수신 객체는 Kotlin
이다.
확장 함수는 캡슐화를 깨는 것이 아닌가?
확장 함수는 캡슐화를 깨지 않는다. 확장 함수는 클래스 내부의 정의된 private
멤버나 protected
멤버를 사용할 수 없다.
확장 함수는 오버라이드 할 수 없다.
확장 함수는 오버라이드 할 수 없다.
확장 함수는 클래스 내부에 선언된 것이 아니라, 외부에 선언된 것이다.
확장 함수는 정적으로 결정되기 때문에 오버라이드 할 수 없다.
확장 프로퍼티
확장 프로퍼티를 사용하면, 기존 클래스 객체에 대한 프로퍼티 형식의 구문으로 사용할 수 있는 API를 추가할 수 있다.
위에서 작성한 lastChar
함수를 확장 프로퍼티로 선언하면, 다음과 같이 선언할 수 있다.
val String.lastChar : Char
get() = get(length - 1)
만약 StringBuilder
를 사용한다면 마지막 문자를 변경 가능하므로 변경 가능한 확장 프로퍼티를 만들 수 있다.
val StringBuilder.lastChar : Char
get() = get(length - 1)
set(value : Char) {
this.setCharAt(length - 1, value)
}
사용 하는 방법은 멤버 프로퍼티
를 사용하는 것과 동일하다.
>>> println("Kotlin".lastChar)
n
>>> val sb = StringBuilder("Kotlin~")
>>> sb.lastChar = '!'
>>> println(sb)
Kotlin!
'안드로이드 > Action Kotlin' 카테고리의 다른 글
Action Kotlin 6 - 연산자 오버로딩과 기타 관계 (0) | 2023.10.30 |
---|---|
Action Kotlin 5 - 코틀린 타입 시스템 (0) | 2023.10.27 |
Action Kotlin 4 - 람다로 프로그래밍 (0) | 2023.10.25 |
Action Kotlin 3 - 클래스, 객체, 인터페이스 (1) | 2023.10.24 |
Action Kotlin - 1 (0) | 2023.10.24 |