이번 수준별학습반 과제로는 코틀린 자료를 읽고 정리하는건데 되도록 자동변역을 쓰지말라고 했다
솔직히 자동변역으로하면 더 무슨말인지 모르겠어서 블로그로만 봤는데 원하는 부분을 찾기도 어렵고 정석적인 방법이 아닌것들도 너무 많아서 힘들던차에 잘된것 같다
그래서 영어학원에서 하듯이 코틀린자료를 그대로 변역해가면서 내용을 써보려고 한다
https://kotlinlang.org/docs/extensions.html
Extensions | Kotlin
kotlinlang.org
코틀린은 클래스 상속하거나 데코레이터(Decorator)와 같은 디자인 패턴 사용 없이 클래스 또는 인터페이스를 새로운 기능으로 확장하는 것을 제공한다. 이건 확장이라는 특수선언을 통해 이루어진다
예를 들어, 당신은 수정할 수 없는 타사 라이브러리의 클래스나 인터페이스로부터 새로운 함수를 쓸 수 있다. 이런 함수들은 마치 원래 클래스의 메서드인것 처럼 일반적인 방법으로 호출 할 수 있다. 이 메커니즘을 확장기능이라고 부른다. 이 확장 프로퍼티는 기존 클래스의 새로운 프로퍼티를 정의하기도 한다.
확장 함수를 선언하려면, 어떤 유형인지 나타내는 수신자 유형을 이름 앞에 추가한다. 다음은 MutableList<Int> 에 swap 함수를 추가한다
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this'는 목록에 해당한다
this[index1] = this[index2]
this[index2] = tmp
}
this는 확장함수 내부에서 수신자 객체에 해당한다.
이제 MutableList<Int>에서 함수를 호출 할 수 있다
val list = mutableListOf(1, 2, 3)
list.swap(0, 2) // 'this'는 'swap()'내부에서 'list'값을 보유한다
이 함수는 모든 MutableList<T>에 적용가능하고, 일반화 할 수 있다
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this'는 목록에 해당한다
this[index1] = this[index2]
this[index2] = tmp
}
수신자유형 표현식이 사용가능하도록 함수이름앞에 일반유형의 매개변수를 선언해야 한다.
제네릭에 대한 더 많은 정보는 제네릭함수에서 볼 수 있다
제네릭이란?
일반적인, 포괄적인이라는 뜻을 가지고 있는데 클래스에서 사용하는 타입을 특정하지 않고 로직을 재사용하여 결과를 도출하는 방식이라고 한다. 말이 어려운데 한마디로 여러 타입의 파라미터를 가져야 할 때 사용된다.
단, 확장 프로퍼티만 가능
위에서 사용된 <T>로 명시된 타입을 타입 매개변수(Type Parameter)라고 하며 이렇게 타입을 지정해서 전달하는것을 타입 아규먼트(Type Argumennt)라고 한다
타입 매개변수 명명 규칙(Naming Convention)
타입 | 설명 |
<T> | Type |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
데이터 - SharedPreferences (1) | 2024.05.01 |
---|---|
Kotlin Docs Scope functions / 범위 기능 1 (0) | 2024.03.29 |
코틀린 lateinit과 by lazy에 대해서 (0) | 2024.03.22 |
코딩 컨벤션이란 (0) | 2024.03.05 |
코틀린 기본 문법 / 컬렉션 (0) | 2024.02.26 |