코틀린 & Java/코틀린인액션

[Kotlin] 코틀린 함수 정의와 호출

코딩하는후운 2024. 3. 19. 10:35
반응형

코틀린 함수 정의와 호출

코틀린이 자체 컬렉션을 제공하지 않는 이유?
- 자바 코드와 상호작용하기가 훨씬 더 쉽다.

# 이름 붙인 인자

  • 함수 호출 부분의 가독성
  • 함수에 전달하는 인자 중 일부(또는 전부)의 이름을 명시할 수 있다.
    • 하나라도 이름을 명시하면 뒤에 오는 모든 인자는 이름을 명시 해야 한다.

# 디폴트 파라미터 값

함수 선언에서 파라미터의 디폴트 값을 지정할 수 있으므로 이런 오버로드 중 상당수를 피할 수 있다.

# 최상위 프로퍼티

함수와 마찬가지로 프로퍼티도 파일의 최상위 수준에 놓을 수 있다.
이런 프로퍼티의 값은 정적 필드에 저장 된다.

더 자연스럽게 사용하려면 이 상수를 public static final 필드로 컴파일해야 한다.
const변경자를 추가하면 된다.

# 확장 함수와 확장 프로퍼티

확장함수(extension function) : 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수

추가하려면 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧 붙이기만 하면 된다.

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

String : 수신객체 타입(receiver type)
this : 수신 객체(receiver object)

확장함수가 캡슐화를 깨지는 않는다.
확장함수안에서는 클래스 내부에서만 사용할 수 있는 private나 protected멤버를 사용할 수 없다.

# 임포트와 확장 함수

확장함수를 사용하기 위해서는 임포트를 해야한다.

as 키워드를 사용하면 임포트한 클래스나 함수를 다른 이름으로 부를 수 있다

import strings.lastChar as last
val c = "Kotlin".last()

이름이 같은 함수를 가져와 사용해야 하는 경우 충돌을 막을 수 있다.

확장 함수는 단지 정적 메서드 호출에 대한 문법적인 편의일 뿐이다.
확장 함수가 정적 메서드와 같은 특징을 가지므로, 확장 함수를 하위 클래스에서 오버라이드 할 수는 없다.

반응형