3장 : 함수 정의와 호출

2023. 4. 10. 14:42kotlin

728x90

- const 추가 시 public static final 필드로 컴파일 됨

 

# 확장함수

- 어떤 클래스의 맴버 메서드인 것 처럼 호출할 수 있지만 그 클래스 밖에 선언된 함수

package strings

fun String.lastChar() : Char = this.get(this.length - 1)

- 클래스 이름(String) -- 수신 객체 타입

- 확장 함수가 호출되는 대상이 되는 값(객체, this) -- 수신 객체

- 위 코드에서 this 생략 가능

- 확장함수 안에서는 클래스 내부에서만 사용할 수 있는 private, protected 맴버를 사용할 수 없다.

- 확장함수는 오버라이드 할 수 없음

- 확장한 함수와 그 클래스 맴버 함수의 이름이 같으면 확장 함수가 아니라 맴버 함수가 호출

- as 키워드를 통해 import한 클래스나 함수를 다른 이름으로 부를 수 있음

import strings.lastChar as last

val c = "Kotlin".last()

# 확장 프로퍼티 예시

val String.lastChar : Char
    get() = get(length - 1)

- 뒷받침하는 필드가 없어서 기본 게터 구현을 제공할 수 없으므로 최소한 게터는 꼭 정의를 해야

 

# 가변 인자 함수 : 인자의 개수가 달라질 수 있는 함수 정의

fun listOf<T> (vararg values : T) : List<T>

val list = listOf(2,3,4)

var args : Array<String>

val list = listOf("aaa", *args)

# 중위 호출과 구조 분해 선언

 

- 중위 호출 시에는 수신 객체와 유일한 메서드 인자 사이에 메서드 이름을 넣음

1.to("one")
1 to "one"

- 인자가 하나뿐인 일반 메서드나 확장함수에 중위 호출 사용 가능

- 함수를 중위 호출에 사용하게 허용하고 싶으면 infix 변경자를 함수 선언 앞에 추가 

infix fun Any.to(other: Any) =Pair<this, other>

 

728x90

'kotlin' 카테고리의 다른 글

2장 : 코틀린 기초  (0) 2023.04.10
1장 : 코틀린이란 무엇이며 왜 필요한가  (0) 2023.04.09