[kotlin] 코틀린 스프링 데이터 JPA와의 통합

최근에 코틀린은 Java 개발자들 사이에서 점차적으로 인기를 얻고 있습니다. 코틀린은 간결한 문법과 널 안전성, 함수형 프로그래밍 지원으로 알려져 있으며, 스프링 프레임워크와의 통합에 있어서도 많은 개발자들에게 인기를 얻고 있습니다. 이번 블로그에서는 코틀린과 스프링 데이터 JPA를 함께 사용하는 방법에 대해 알아보겠습니다.

코틀린과 스프링 데이터 JPA

코틀린은 자바 언어와의 상호운용성을 제공하므로, 스프링 프레임워크와의 통합이 용이합니다. 스프링 데이터 JPA는 JPA(Java Persistence API)를 기반으로 한 데이터 액세스 기술로, 객체-관계 매핑(ORM)을 지원합니다.

프로젝트 세팅

먼저, 기존의 스프링 부트 프로젝트에 코틀린 관련 의존성을 추가해야 합니다.

dependencies {
   implementation("org.springframework.boot:spring-boot-starter-data-jpa")
   implementation("org.jetbrains.kotlin:kotlin-stdlib")
   implementation("org.jetbrains.kotlin:kotlin-reflect")
   implementation("org.springframework.boot:spring-boot-starter-web")
   implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
   implementation("org.jetbrains.kotlin:kotlin-reflect")
}

엔티티 클래스

코틀린으로 작성된 엔티티 클래스에는 data class 키워드를 사용하여 간단하게 정의할 수 있습니다.

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id

@Entity
data class Product(
    @Id @GeneratedValue
    val id: Long?,
    val name: String,
    val price: Double
)

리포지토리 인터페이스

리포지토리 인터페이스는 코틀린에서도 자바와 마찬가지로 정의할 수 있습니다.

import org.springframework.data.jpa.repository.JpaRepository

interface ProductRepository : JpaRepository<Product, Long>

서비스 클래스

코틀린으로 작성된 서비스 클래스에서도 스프링의 어노테이션을 자유롭게 사용할 수 있습니다.

import org.springframework.stereotype.Service

@Service
class ProductService(private val productRepository: ProductRepository) {
    fun findById(id: Long): Product? = productRepository.findById(id).orElse(null)
    
    fun findAll(): List<Product> = productRepository.findAll()
    
    fun save(product: Product): Product = productRepository.save(product)
    
    fun delete(id: Long) = productRepository.deleteById(id)
}

결론

코틀린은 스프링 데이터 JPA와의 통합에 있어서 자바와 큰 차이가 없으며, 간결하고 안전한 문법을 통해 개발자들에게 편의를 제공합니다. 코틀린으로 스프링 데이터 JPA를 사용해보고 싶다면, 위의 내용을 참고하시기 바랍니다.

참고 자료