상세 컨텐츠

본문 제목

Kotlin Docs Extensions / 확장 프로그램 1

이론공부/코틀린 문법

by 뽀사장 2024. 3. 28. 15:39

본문

728x90
반응형

이번 수준별학습반 과제로는 코틀린 자료를 읽고 정리하는건데 되도록 자동변역을 쓰지말라고 했다

솔직히 자동변역으로하면 더 무슨말인지 모르겠어서 블로그로만 봤는데 원하는 부분을 찾기도 어렵고 정석적인 방법이 아닌것들도 너무 많아서 힘들던차에 잘된것 같다

그래서 영어학원에서 하듯이 코틀린자료를 그대로 변역해가면서 내용을 써보려고 한다


 

 

 

https://kotlinlang.org/docs/extensions.html

 

Extensions | Kotlin

 

kotlinlang.org

Extensions ~ Extension functions

 

 

 

확장프로그램(Extensions)

코틀린은 클래스 상속하거나 데코레이터(Decorator)와 같은 디자인 패턴 사용 없이 클래스 또는 인터페이스를 새로운 기능으로 확장하는 것을 제공한다. 이건 확장이라는 특수선언을 통해 이루어진다

 

예를 들어, 당신은 수정할 수 없는 타사 라이브러리의 클래스나 인터페이스로부터 새로운 함수를 쓸 수 있다. 이런 함수들은 마치 원래 클래스의 메서드인것 처럼 일반적인 방법으로 호출 할 수 있다. 이 메커니즘을 확장기능이라고 부른다. 이 확장 프로퍼티는 기존 클래스의 새로운 프로퍼티를 정의하기도 한다.

 

 

확장 기능 (Extension functions)

확장 함수를 선언하려면, 어떤 유형인지 나타내는 수신자 유형을 이름 앞에 추가한다. 다음은 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

 

728x90
반응형

관련글 더보기