Skip to content

테스트 페이지

이것은 이미지가 포함된 블록입니다 (Compose Multiplatform 시작하기 튜토리얼에서 가져옴).

첫 번째 단계 Kotlin으로 Spring Boot 프로젝트 만들기
두 번째 단계 Spring Boot 프로젝트에 데이터 클래스 추가하기
세 번째 단계 Spring Boot 프로젝트에 데이터베이스 지원 추가하기
네 번째 단계 데이터베이스 액세스를 위해 Spring Data CrudRepository 사용하기>

동기화된 탭

kotlin
plugins {
    kotlin("kapt") version "1.9.23"
}
groovy
plugins {
    id "org.jetbrains.kotlin.kapt" version "1.9.23"
}
kotlin
plugins {
    kotlin("plugin.noarg") version "1.9.23"
}
groovy
plugins {
    id "org.jetbrains.kotlin.plugin.noarg" version "1.9.23"
}

섹션

접힌 섹션

여기에 약간의 텍스트와 코드 블록이 있습니다:

kotlin
plugins {
    kotlin("plugin.noarg") version "1.9.23"
}

코드 블록

단순 코드 블록:

kotlin
    import java.util.*

@Service
class MessageService(val db: MessageRepository) {
    fun findMessages(): List<Message> = db.findAll().toList()

    fun findMessageById(id: String): List<Message> = db.findById(id).toList()

    fun save(message: Message) {
        db.save(message)
    }

    fun <T : Any> Optional<out T>.toList(): List<T> =
        if (isPresent) listOf(get()) else emptyList()
}

확장 가능한 코드 블록

kotlin
package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}

@RestController
class MessageController {
    @GetMapping("/")
    fun index(@RequestParam("name") name: String) = "Hello, $name!"
}

실행 가능한 코드 블록

kotlin
data class User(val name: String, val id: Int)

fun main() {
    val user = User("Alex", 1)
    
    // 출력을 읽기 쉽게 만들기 위해 toString() 함수를 자동으로 사용합니다
    println(user)            
    // User(name=Alex, id=1)
}

테이블

Markdown 테이블

기본 타입 배열 (Primitive-type array)Java에서의 대응 타입
BooleanArrayboolean[]
ByteArraybyte[]
CharArraychar[]
DoubleArraydouble[]
FloatArrayfloat[]
IntArrayint[]
LongArraylong[]
ShortArrayshort[]

XML 테이블

마지막 수정일2023년 12월
다음 업데이트2024년 6월

내부에 코드 블록이 포함된 XML 테이블

간단한 테이블:

이전현재
kotlin
kotlin {
    targets {
        configure(['windows',
            'linux']) {
        }
    }
}
kotlin
kotlin {
    targets {
        configure([findByName('windows'),
            findByName('linux')]) {
        }
    }
}

더 복잡한 테이블:

이전현재
jvmMain 컴파일 의존성
kotlin
jvm<Scope>
kotlin
jvmCompilation<Scope>
kotlin
dependencies {
    add("jvmImplementation",
        "foo.bar.baz:1.2.3")
}
kotlin
dependencies {
    add("jvmCompilationImplementation",
        "foo.bar.baz:1.2.3")
}
jvmMain 소스 세트 의존성
kotlin
jvmMain<Scope>
jvmTest 컴파일 의존성
kotlin
jvmTest<Scope>
kotlin
jvmTestCompilation<Scope>
jvmTest 소스 세트 의존성
kotlin
jvmTest<Scope>

리스트

순서가 있는 리스트

  1. 하나

    1. 셋의 1
    2. 셋의 2
    3. 셋의 3
      1. 셋의 1의 1
  2. 내부에 코드 블록 포함:

    kotlin
    jvmTest<Scope>

순서가 없는 리스트

  • 첫 번째 불렛

  • 두 번째 불렛

  • 세 번째 불렛

    • 하나 더
    • 또 다른 하나
      • 와우, 하나 더
  • 내부에 코드 블록 포함:

    kotlin
    jvmTest<Scope>

정의 리스트 (Definition list)

접이식 항목 #1

CrudRepository 인터페이스의 findById() 함수 반환 타입은 Optional 클래스의 인스턴스입니다. 하지만 일관성을 위해 단일 메시지를 포함하는 List를 반환하는 것이 편리할 수 있습니다. 이를 위해 Optional 값이 있는 경우 이를 꺼내고(unwrap), 해당 값을 포함하는 리스트를 반환해야 합니다. 이는 Optional 타입에 대한 확장 함수로 구현할 수 있습니다.

코드에서 Optional<out T>.toList().toList()Optional에 대한 확장 함수입니다. 확장 함수를 사용하면 모든 클래스에 추가 함수를 작성할 수 있으며, 특히 일부 라이브러리 클래스의 기능을 확장하고 싶을 때 유용합니다.

접이식 항목 #2

이 함수는 새로운 객체가 데이터베이스에 ID를 가지고 있지 않다는 가정하에 작동합니다. 따라서 삽입을 위해서는 ID가 null이어야 합니다.

만약 ID가 null이 아니면, CrudRepository는 객체가 이미 데이터베이스에 존재한다고 가정하고 이를 삽입(insert) 작업이 아닌 수정(update) 작업으로 간주합니다. 삽입 작업 후에는 데이터 저장소에 의해 id가 생성되어 Message 인스턴스에 다시 할당됩니다. 이것이 id 속성을 var 키워드를 사용하여 선언해야 하는 이유입니다.

텍스트 요소

변수

  • 변수 사용: 최신 Kotlin 버전은 2.4.10입니다

임베디드 요소

YouTube 동영상

이미지

일반 (Markdown):

테스트 생성

일반 (XML):

멀티플랫폼 웹 위저드

인라인:

YouTrack

확대 가능:

클래스 다이어그램

버튼 스타일:

프로젝트 생성

노트

경고:

kapt 컴파일러 플러그인에서의 K2 지원은 실험적(Experimental)입니다. 명시적 동의(Opt-in)가 필요하며(아래 세부 정보 참조), 평가 목적으로만 사용해야 합니다.

참고:

Kotlin/Native와 함께 제공되는 네이티브 플랫폼 라이브러리(Foundation, UIKit, POSIX 등)의 경우, 일부 API만 @ExperimentalForeignApi를 통한 명시적 동의가 필요합니다. 이러한 경우 명시적 동의 요구 사항과 함께 경고가 표시됩니다.

팁:

Kotlin/Native와 함께 제공되는 네이티브 플랫폼 라이브러리(Foundation, UIKit, POSIX 등)의 경우, 일부 API만 @ExperimentalForeignApi를 통한 명시적 동의가 필요합니다. 이러한 경우 명시적 동의 요구 사항과 함께 경고가 표시됩니다.