Kotlin - 표준 함수

하동혁 ·2023년 4월 13일
0

Kotlin

목록 보기
10/10
post-thumbnail

표준 함수

코틀린 표준 라이브러리에는 유용한 함수들이 많이 포함되어 있습니다. 이러한 함수들은 코틀린에서 흔히 사용되는 작업들을 보다 쉽고 간단하게 수행할 수 있게 도와줍니다.

  • 코틀린에서 유틸리성으로 제공하며 람다를 인자로 받아 동작하는 함수
  • 확장함수의 형태로 모든 객체에서 호출할 수 있다.
  • 객체를 초기화할때 실행할 코드가 있는 경우 등에서 자주 사용된다.
  • Java에서 객체의 내용을 참조하려면 object를 reference에 저장한 후 변수에 " . "으로 접근하였으나, 코틀린에서는 표준함수를 사용하여 바로 조작이 가능하다.
  • 대표적인 표준함수로는 let( ), apply( ), run( ), with( ), also( ) 가 있다.




▪️ let

let 함수는 객체를 인자로 받아 람다식 내에서 해당 객체를 사용할 수 있게 해주는 함수입니다. 이 함수는 Nullable 객체를 사용할 때 매우 유용합니다. let 함수는 해당 객체를 람다식의 인자로 전달하며, 람다식 내에서는 해당 객체를 it으로 참조할 수 있습니다. let 함수는 람다식의 결과를 반환합니다.

val name: String? = "John"

val uppercasedName = name?.let { nullableName ->
    val uppercased = nullableName.toUpperCase()
    "Hello, $uppercased!"
}

println(uppercasedName) // 출력 결과: "Hello, JOHN!"

위 예시에서 let 함수는 name 객체를 람다식의 인자로 전달하고, nullableName으로 해당 객체를 참조합니다. 람다식 내에서는 nullableName을 사용하여 toUpperCase 함수를 호출하여 문자열을 대문자로 변환한 후, 해당 문자열과 문자열을 연결하여 새로운 문자열을 만듭니다. 마지막으로, 람다식의 결과인 새로운 문자열을 uppercasedName 변수에 할당합니다. 이때, let 함수의 결과값은 람다식의 결과인 새로운 문자열입니다. 따라서, uppercasedName에는 "Hello, JOHN!"이 할당됩니다.




▪️ also

also 함수는 let 함수와 비슷하지만, 람다식의 결과가 아닌 해당 객체를 반환합니다. 이 함수는 객체를 인자로 받아 람다식 내에서 해당 객체를 사용할 수 있게 해주는 함수입니다. also 함수는 Nullable 객체를 사용할 때 매우 유용합니다. also 함수는 해당 객체를 람다식의 인자로 전달하며, 람다식 내에서는 해당 객체를 it으로 참조할 수 있습니다.

val numbers = mutableListOf(1, 2, 3)

numbers.also { println("Original list: $it") }
       .add(4)
       .also { println("List after adding 4: $it") }
       .remove(2)
       .also { println("List after removing 2: $it") }

[결과]
Original list: [1, 2, 3]
List after adding 4: [1, 2, 3, 4]
List after removing 2: [1, 3, 4]




▪️ apply

apply 함수는 객체를 인자로 받아 객체 내의 속성에 값을 설정하는 함수입니다. 이 함수는 객체를 생성한 후에 객체의 속성을 초기화하는 데 매우 유용합니다. apply 함수는 해당 객체를 this로 참조할 수 있으며, 람다식의 결과는 해당 객체 자체를 반환합니다.

class Person(var name: String, var age: Int, var email: String?)

val person = Person("John", 30, null).apply {
    email = "john@example.com"
}

println(person.name)   // 출력 결과: "John"
println(person.age)    // 출력 결과: 30
println(person.email)  // 출력 결과: "john@example.com"

위 예시에서 apply 함수는 Person 클래스의 새로운 인스턴스를 생성하고, 생성된 인스턴스를 person 변수에 할당합니다. apply 함수는 생성된 인스턴스를 람다식의 수신 객체로 전달하고, 람다식 내에서 해당 인스턴스의 속성을 초기화합니다.

람다식 내에서 email 속성을 "john@example.com"로 초기화하고, apply 함수의 결과값으로 인스턴스 자체를 반환합니다. 따라서, person 변수에는 초기화된 Person 객체가 할당되어 있습니다.




▪️ run

run 함수는 특정 객체의 컨텍스트에서 코드 블록을 실행하고, 마지막 표현식의 결과를 반환합니다.

run 함수는 매개변수로 받은 객체를 수신 객체로 전달하며, 람다식의 결과값을 반환합니다. 따라서, 해당 객체의 메서드나 속성을 사용할 수 있습니다. 또한, this 키워드로 수신 객체를 참조할 수 있습니다.

class Person(var name: String, var age: Int, var email: String?)

val person = Person("John", 30, null).run {
    email = "john@example.com"
    this
}

println(person.name)   // 출력 결과: "John"
println(person.age)    // 출력 결과: 30
println(person.email)  // 출력 결과: "john@example.com"

위 예시에서 run 함수는 Person 클래스의 새로운 인스턴스를 생성하고, 생성된 인스턴스를 run 함수의 인자로 전달합니다. run 함수는 람다식 내에서 해당 인스턴스의 속성을 초기화하고, 마지막으로 this 키워드를 사용하여 초기화된 인스턴스를 반환합니다. 따라서, person 변수에는 초기화된 Person 객체가 할당되어 있습니다.




▪️ with

with 함수는 특정 객체의 컨텍스트에서 코드 블록을 실행하며, 마지막 표현식의 결과를 반환합니다.

with 함수는 매개변수로 받은 객체를 수신 객체로 전달하며, 람다식의 결과값을 반환합니다. 따라서, 해당 객체의 메서드나 속성을 사용할 수 있습니다. 또한, this 키워드로 수신 객체를 참조할 수 있습니다.

class Rectangle(var width: Double, var height: Double)

val rect = Rectangle(5.0, 10.0)

val area = with(rect) {
    width * height
}

println(area)  // 출력 결과: 50.0

위 예시에서 with 함수는 Rectangle 클래스의 새로운 인스턴스를 생성하고, 생성된 인스턴스를 with 함수의 인자로 전달합니다. with 함수는 람다식 내에서 해당 인스턴스의 속성을 사용하여 넓이를 계산하고, 마지막으로 넓이 값을 반환합니다. 따라서, area 변수에는 계산된 넓이 값이 할당되어 있습니다.

또한, with 함수는 코드 블록 내에서 변수나 상수를 선언할 수 있으며, 이는 해당 객체의 속성으로 취급됩니다. 다음은 with 함수를 사용하여 Rectangle 객체의 넓이를 계산하고, 그 결과를 반환하는 예시입니다.

val area = with(Rectangle(5.0, 10.0)) {
    val perimeter = (width + height) * 2
    perimeter * 2
}

println(area)  // 출력 결과: 60.0



0개의 댓글