Spring Boot 프로젝트에 데이터 클래스 추가하기
이 문서는 Spring Boot 및 Kotlin 시작하기 튜토리얼의 두 번째 부분입니다. 계속 진행하기 전에 이전 단계를 완료했는지 확인하세요:
Kotlin으로 Spring Boot 프로젝트 생성하기
Spring Boot 프로젝트에 데이터 클래스 추가하기
Spring Boot 프로젝트에 데이터베이스 지원 추가하기
데이터베이스 접근을 위해 Spring Data CrudRepository 사용하기
이 튜토리얼 부분에서는 애플리케이션에 몇 가지 기능을 더 추가하고 데이터 클래스와 같은 Kotlin 언어 기능을 더 살펴볼 것입니다. 이를 위해 MessageController
클래스를 직렬화된 객체 컬렉션을 포함하는 JSON 문서로 응답하도록 변경해야 합니다.
애플리케이션 업데이트
DemoApplication.kt
파일과 같은 패키지에Message.kt
파일을 생성합니다.Message.kt
파일에 두 가지 프로퍼티(id
및text
)를 가진 데이터 클래스를 생성합니다:kotlin// Message.kt package com.example.demo data class Message(val id: String?, val text: String)
Message
클래스는 데이터 전송에 사용될 것입니다. 직렬화된Message
객체 목록이 컨트롤러가 브라우저 요청에 응답할 JSON 문서를 구성합니다.데이터 클래스 – data class Message
Kotlin의 데이터 클래스의 주요 목적은 데이터를 저장하는 것입니다. 이러한 클래스는
data
키워드로 표시되며, 일부 표준 기능과 유틸리티 함수는 클래스 구조로부터 기계적으로 파생될 수 있습니다.이 예시에서는
Message
클래스의 주요 목적이 데이터를 저장하는 것이므로 데이터 클래스로 선언했습니다.val 및 var 프로퍼티
Kotlin 클래스의 프로퍼티는 다음과 같이 선언할 수 있습니다:
- 가변(mutable),
var
키워드를 사용합니다 - 읽기 전용(read-only),
val
키워드를 사용합니다
Message
클래스는val
키워드를 사용하여id
와text
두 개의 프로퍼티를 선언합니다. 컴파일러는 이 두 프로퍼티에 대한 게터(getter)를 자동으로 생성합니다.Message
클래스의 인스턴스가 생성된 후에는 이 프로퍼티들의 값을 다시 할당하는 것이 불가능합니다.널러블 타입 – String?
Kotlin은 널러블 타입에 대한 내장 지원을 제공합니다. Kotlin에서 타입 시스템은
null
을 가질 수 있는 참조(널러블 참조)와 가질 수 없는 참조(논널러블 참조)를 구별합니다.
예를 들어,String
타입의 일반 변수는null
을 가질 수 없습니다. null을 허용하려면String?
로 작성하여 변수를 널러블 문자열로 선언할 수 있습니다.Message
클래스의id
프로퍼티는 이번에는 널러블 타입으로 선언되었습니다. 따라서id
값으로null
을 전달하여Message
클래스의 인스턴스를 생성하는 것이 가능합니다:kotlin- 가변(mutable),
MessageController.kt
파일에서index()
함수 대신Message
객체 목록을 반환하는listMessages()
함수를 생성합니다:kotlin// MessageController.kt package com.example.demo import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/") class MessageController { @GetMapping fun listMessages() = listOf( Message("1", "Hello!"), Message("2", "Bonjour!"), Message("3", "Privet!"), ) }
컬렉션 – listOf()
Kotlin 표준 라이브러리는 기본 컬렉션 타입인 세트, 리스트, 맵에 대한 구현을 제공합니다.
각 컬렉션 타입은 읽기 전용 또는 가변일 수 있습니다:- 읽기 전용 컬렉션은 컬렉션 요소에 접근하기 위한 연산을 제공합니다.
- 가변 컬렉션은 요소를 추가, 제거 및 업데이트하는 쓰기 연산도 제공합니다.
Kotlin 표준 라이브러리에서 이러한 컬렉션의 인스턴스를 생성하기 위한 해당 팩토리 함수도 제공합니다.
이 튜토리얼에서는
listOf()
함수를 사용하여Message
객체 목록을 생성합니다. 이것은 읽기 전용 객체 목록을 생성하는 팩토리 함수입니다. 목록에서 요소를 추가하거나 제거할 수 없습니다.
목록에 쓰기 연산을 수행해야 하는 경우,mutableListOf()
함수를 호출하여 가변 리스트 인스턴스를 생성하세요.후행 쉼표
후행 쉼표는 일련의 요소 중 마지막 항목 뒤에 오는 쉼표 기호입니다:
kotlin이는 Kotlin 구문의 편리한 기능이며 완전히 선택 사항입니다. 이것이 없어도 코드는 여전히 작동합니다.
위 예시에서
Message
객체 목록을 생성하는 부분에는 마지막listOf()
함수 인수 뒤에 후행 쉼표가 포함되어 있습니다.
MessageController
의 응답은 이제 Message
객체 컬렉션을 포함하는 JSON 문서가 될 것입니다.
Jackson 라이브러리가 클래스패스에 있다면 Spring 애플리케이션의 모든 컨트롤러는 기본적으로 JSON 응답을 렌더링합니다. build.gradle.kts 파일에서
spring-boot-starter-web
의존성을 지정했으므로, Jackson을 전이 의존성으로 받았습니다. 따라서 엔드포인트가 JSON으로 직렬화될 수 있는 데이터 구조를 반환하면 애플리케이션은 JSON 문서로 응답합니다.
다음은 DemoApplication.kt
, MessageController.kt
, Message.kt
파일의 전체 코드입니다:
// DemoApplication.kt
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
// MessageController.kt
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/")
class MessageController {
@GetMapping
fun listMessages() = listOf(
Message("1", "Hello!"),
Message("2", "Bonjour!"),
Message("3", "Privet!"),
)
}
// Message.kt
package com.example.demo
data class Message(val id: String?, val text: String)
애플리케이션 실행
Spring 애플리케이션이 실행할 준비가 되었습니다:
애플리케이션을 다시 실행합니다.
애플리케이션이 시작되면 다음 URL을 엽니다:
texthttp://localhost:8080
JSON 형식의 메시지 컬렉션이 포함된 페이지를 보게 될 것입니다:
다음 단계
튜토리얼의 다음 부분에서는 프로젝트에 데이터베이스를 추가하고 구성하고 HTTP 요청을 수행할 것입니다.