본문 바로가기

Language35

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.
Java의 Enum 클래스와 그 장점(feat. 예시 코드) Java에서, Enum은 "enumerated type"의 약자로, 주어진 집합 내에서만 값을 가질 수 있는 데이터 타입을 의미합니다. 일반적으로 Enum은 상수의 집합을 표현하는 데 사용됩니다. 하지만 Java에서의 Enum은 단순한 상수 묶음을 넘어서며, 다양한 특징과 장점을 갖추고 있습니다. Enum의 주요 특징: 객체 지향적: Java의 Enum은 실질적으로 클래스입니다. 따라서 메서드, 생성자, 인스턴스 변수를 포함할 수 있습니다. 타입 안전: Enum은 미리 정의된 한정된 값들만을 가질 수 있기 때문에, 잘못된 값의 할당을 방지합니다. 싱글턴: Enum 상수는 해당 Enum 타입의 싱글턴 인스턴스입니다. 즉, 같은 타입의 다른 객체로 생성될 수 없습니다. Enum의 장점: 코드의 명확성: 상수.. 2023. 9. 12.
`reified`란? 코틀린에서 타입 정보는 기본적으로 런타임에 제거됩니다. 이는 자바의 타입 소거(type erasure) 방식 때문입니다. 따라서 일반적인 제네릭 함수 내에서는 해당 타입에 대한 실제 클래스 정보를 얻을 수 없습니다. reified 키워드는 이 문제를 해결하기 위해 코틀린에서 제공됩니다. reified를 사용하면, 제네릭 타입 파라미터에 실제 타입 정보를 유지할 수 있게 됩니다. 하지만 이 기능은 inline 함수에서만 사용할 수 있습니다. 이는 inline 함수의 본문이 호출 위치에 직접 삽입되면서 실제 타입 정보를 함께 가져와서 사용할 수 있게 되기 때문입니다. 가상 시나리오 웹 애플리케이션에서 여러 타입의 객체를 JSON으로 직렬화해야 하는 상황이 생겼다고 가정합시다. 그 중 특정 타입의 객체만 직렬.. 2023. 9. 4.
Inline 함수란? inline 키워드는 코틀린에서 함수를 선언할 때 사용될 수 있습니다. inline 함수는 컴파일 시점에 해당 함수 호출 위치에 함수의 바디(본문)를 직접 삽입합니다. 다시 말해, 함수를 호출하는 것처럼 보이지만 실제로는 해당 코드가 그대로 복사되어 사용되는 것입니다. 그럼 왜 inline 함수를 사용할까요? 성능 최적화: 특히 람다를 매개변수로 받는 함수에서 유용합니다. 람다를 사용할 때 발생하는 객체 생성이나 함수 호출로 인한 오버헤드를 줄여줍니다. 익명 클래스 생성 방지: 람다는 내부적으로 익명 클래스로 변환됩니다. inline 함수를 사용하면 이러한 클래스의 생성을 방지할 수 있습니다. 예시 시나리오 웹 서비스에서 특정 조건을 만족하는 사용자 데이터를 필터링하려 합니다. 이때, 다양한 조건을 유연.. 2023. 9. 4.