본문 바로가기

Language/Kotlin34

Gradle, Spring, Kotlin 환경에서의 build.gradle.kts 내 tasks 이해하기 Gradle는 안드로이드 앱부터 Spring Boot 애플리케이션까지 다양한 프로젝트의 빌드 및 배포 자동화 도구로 널리 사용되고 있습니다. 특히, Kotlin DSL(build.gradle.kts)을 사용하면 더욱 표현력 있고 타입 안전한 빌드 스크립트를 작성할 수 있습니다. 본문에서는 tasks 블록과 tasks.register() 함수에 대해 깊게 다룰 것입니다. 1. tasks 블록이란? tasks는 Gradle 빌드 스크립트에서 사용할 수 있는 빌드 작업들을 정의하는 곳입니다. 각 작업은 프로젝트 빌드의 특정 단계나 기능을 나타냅니다. 예를 들면, 프로젝트를 컴파일하거나 테스트를 실행하거나 애플리케이션을 실행하는 것과 같은 작업을 정의할 수 있습니다. 2. tasks.register() 함수 t.. 2023. 9. 13.
`reified`란? 코틀린에서 타입 정보는 기본적으로 런타임에 제거됩니다. 이는 자바의 타입 소거(type erasure) 방식 때문입니다. 따라서 일반적인 제네릭 함수 내에서는 해당 타입에 대한 실제 클래스 정보를 얻을 수 없습니다. reified 키워드는 이 문제를 해결하기 위해 코틀린에서 제공됩니다. reified를 사용하면, 제네릭 타입 파라미터에 실제 타입 정보를 유지할 수 있게 됩니다. 하지만 이 기능은 inline 함수에서만 사용할 수 있습니다. 이는 inline 함수의 본문이 호출 위치에 직접 삽입되면서 실제 타입 정보를 함께 가져와서 사용할 수 있게 되기 때문입니다. 가상 시나리오 웹 애플리케이션에서 여러 타입의 객체를 JSON으로 직렬화해야 하는 상황이 생겼다고 가정합시다. 그 중 특정 타입의 객체만 직렬.. 2023. 9. 4.
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.