본문 바로가기

Language36

Inline 함수란? inline 키워드는 코틀린에서 함수를 선언할 때 사용될 수 있습니다. inline 함수는 컴파일 시점에 해당 함수 호출 위치에 함수의 바디(본문)를 직접 삽입합니다. 다시 말해, 함수를 호출하는 것처럼 보이지만 실제로는 해당 코드가 그대로 복사되어 사용되는 것입니다. 그럼 왜 inline 함수를 사용할까요? 성능 최적화: 특히 람다를 매개변수로 받는 함수에서 유용합니다. 람다를 사용할 때 발생하는 객체 생성이나 함수 호출로 인한 오버헤드를 줄여줍니다. 익명 클래스 생성 방지: 람다는 내부적으로 익명 클래스로 변환됩니다. inline 함수를 사용하면 이러한 클래스의 생성을 방지할 수 있습니다. 예시 시나리오 웹 서비스에서 특정 조건을 만족하는 사용자 데이터를 필터링하려 합니다. 이때, 다양한 조건을 유연.. 2023. 9. 4.
코틀린의 `joinToString()`: 모든 것을 알아보자 코틀린에서는 컬렉션의 요소를 문자열로 조합하여 출력할 때 유용한 joinToString() 함수를 제공합니다. 이 함수는 유연하게 사용할 수 있는 파라미터를 다양하게 제공하며, 원하는 형태로 문자열을 조합할 수 있습니다. 1. 기본 파라미터 separator: 요소들 사이에 삽입될 구분자입니다. 기본값은 ", "입니다. prefix와 postfix: 생성된 문자열의 앞과 뒤에 추가될 값입니다. 기본값은 빈 문자열입니다. limit: 반환되는 문자열에 포함될 최대 요소 수입니다. 이를 초과하는 경우, truncated로 지정된 문자열로 대체됩니다. 기본값은 Int.MAX_VALUE입니다. truncated: limit에 지정된 수를 초과하는 요소들을 대체할 문자열입니다. 기본값은 "..."입니다. tran.. 2023. 8. 31.
Kotlin에서의 꼬리 재귀와 피보나치 수열 재귀는 함수가 자신을 다시 호출하는 프로그래밍 패턴입니다. Kotlin에서는 꼬리 재귀(tail recursion) 최적화를 지원하는데, 이것이 바로 tailrec 키워드의 역할입니다. 그렇다면 꼬리 재귀 최적화를 활용하여 피보나치 수열을 어떻게 구현할 수 있을까요? 이 문제를 해결하기 위해 아래와 같은 코드를 작성해 보았습니다. // Recursion/Fibonacci.kt package recursion import atomictest.eq fun fibonacci(n: Int): Long { // 내부에서 사용할 꼬리 재귀 함수를 정의합니다. tailrec fun fibonacci( n: Int, // 남은 재귀 호출 횟수 current: Long, // 현재 피보나치 수 next: Long // .. 2023. 8. 29.
Kotlin에서의 tailrec 이해하기 재귀는 함수가 자기 자신을 호출하는 방식입니다. 그러나 재귀를 과도하게 사용하면 스택 오버플로우와 같은 문제에 직면할 수 있습니다. Kotlin은 이 문제를 해결하기 위한 강력한 키워드, tailrec을 제공합니다. 재귀와 스택 먼저 기본적인 CS 관점에서 보면, 프로그램은 함수 호출을 스택 메모리에 저장합니다. 일반적인 재귀 호출마다 새로운 스택 프레임이 추가됩니다. 이러한 스택 프레임이 너무 많아지면, 스택 오버플로우가 발생합니다. Tail Recursion과 tailrec Tail Recursion은 재귀의 특별한 형태입니다. 함수의 마지막 연산이 자기 자신의 호출인 경우를 의미합니다. 이러한 특징 덕분에 컴파일러나 인터프리터는 재귀 호출을 반복문처럼 최적화할 수 있습니다. Kotlin에서 tail.. 2023. 8. 29.
728x90