Kotlin 10

Kotlin에서 SLF4J Logger 객체 생성하기

SLF4JSimple Logging Facade for Java로깅 인터페이스를 제공한다. (구현체 예: java.util.logging, logback, log4k)클라이언트는 SLF4J 추상화에 의존하면 실제 구현체를 몰라도 된다. (DIP) 스프링부트 web은 default로 logback를 쓴다." logging.level" 프로퍼티들을 통해 로깅 수준을 정할 수 있고, "classpath:logback.xml" 파일을 통해 구성을 할 수 있다. 롬복을 쓴다면 `@Slf4j`를 사용해 Logger 객체를 생성할 수 있다. @Slf4jpublic class someClass { public void someMethod() { log.info("test"); }} 위 코드는 아래와 ..

Kotlin 2024.09.20

Kotest로 테스트 코드 작성하기

내가 쓸 것 같은 부분 메모‪ ⸜( ˶'ᵕ'˶)⸝    Kotest | KotestFlexible, powerful and elegant kotlin test framework with multiplatform supportkotest.io  Kotest는 세 가지 부분으로 구성되어 있다. 필요한 것만 쓰면 된다.Test framework - 테스트 작성하고 실행하기Assertions library - 단언문 작성하기Property testing - 어떤 속성을 만족하는지 랜덤 입력값으로 확인하기 Kotest는 멀티플랫폼 프로젝트다. (다른 플랫폼에서 사용하기 위해 재작성할 필요 없단 말)JVM/Gradle(Groovy)에서 사용하려면 다음과 같은 의존성 설정을 해준다.testImplementation ..

Kotlin 2024.09.09

Kotlin으로 JPA Entity 정의하기

JPA specJPA 엔티티와 프로퍼티의 제약 사항에 대해 먼저 알고 가야한다.https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.pdf The entity class must be annotated with the Entity annotation.have a public or protected no-arg constructor.be a top-level class. (An enum or interface must not be designated as an entity.)not be final.implement the Serializable interface, if an entity instance is to be ..

Kotlin 2024.09.04

Kotlin과 Java 함께 사용하기

타입 코틀린에서 자바 코드를 불러오면 코틀린 타입으로 전환된다. e.g.) int → Int / Integer → Int! / void → Unit / double[] → DoubleArray! / T[] → Array! / Object → Any 자바의 참조 타입을 코틀린으로 불러오면 타입 이름 뒤에 느낌표가 붙는다. (String! 처럼) 이는 실제 문법은 아니고 IDE에서 Nullable인지 Not-Null인지 알 수 없어서 표시하는 것뿐이다. String! 타입은 String?이나 String으로 적을 수 있으나, null이 들어오지 않는다는 확신이 없으면 String?으로 적어주는 것이 안전하다. 자바에서 @NotNull 어노테이션이 붙은 매개변수 타입은 코틀린에서 String으로 인식된다. 키..

Kotlin 2022.10.08

Kotlin 문법 - 표준 라이브러리편

유용한 코틀린 표준 라이브러리에 대해 알아본다. 이전 글) Kotlin 문법 - 입문편 Kotlin 문법 - 초보편 Kotlin 문법 - 중수편 Pair 클래스 Pair 클래스는 두 개의 변수를 하나로 묶는다. data class Pair( val first: A, val second: B ) : Serializable fun divide(a: Int, b: Int) : Pair = Pair(a / b, a % b) fun main(args: Array) { val (q, r) = divide(10, 3) println("몫: $q, 나머지: $r") //몫: 3, 나머지: 1 } Triple 클래스 Triple 클래스는 세 개의 변수를 하나로 묶는다. data class Triple( val first..

Kotlin 2022.10.08

Kotlin 문법 - 중수편

헷갈릴만한 코틀린 문법을 정리해본다. 이전 글) Kotlin 문법 - 입문편 Kotlin 문법 - 초보편 객체 선언 프로그램 전체에서 공유하는 하나뿐인 객체를 만들기 위해 Java에서는 싱글톤 패턴 코드를 작성하였다. 코틀린에서는 다음과 같이 간단하게 만들 수 있다. object Person { var name: String = "" var age: Int = 0 fun print() { println("$name, $age") } } fun main(args: Array) { Person.name = "Sarah" Person.age = 42 Person.print() //Sarah, 42 } Person 식별자로 바로 객체에 접근한다. Person은 타입 이름이기도 하여서 var person: Per..

Kotlin 2022.10.03

Kotlin 문법 - 초보편

헷갈릴만한 코틀린 문법을 정리해본다. 이전 글) Kotlin 문법 - 입문편 객체 Object val person = object { val name: String = "홍길동" val age: Int = 30 } println(person.name) //홍길동 name, age처럼 객체에 포함된 변수들을 property라고 한다. 프로퍼티는 반드시 선언과 동시에 초기화되어야 한다. 프로퍼티가 자바의 필드와 동일해보이지만, 프로퍼티는 필드와 getter, setter가 합쳐진 개념이다. 클래스 Class class Person { var name: String = "" var age: Int = 0 } fun main(args: Array) { var person = Person() person.name..

Kotlin 2022.09.29

Kotlin 문법 - 입문편

이 글에선 헷갈리겠다 싶은 코틀린 문법에 대해서 남겨보려고 한다. 산술 연산의 결과 타입 모든 산술 연산자 +,-,*,/,% 에 대하여, Double/Int 이든 Int/Double 이든 결과 타입은 항상 Double이다. 10.0/5 처럼 계산 결과에 소수점이 없다고 하더라도 결과 타입은 Double이다. 결과 타입이 Int가 되면 계산 결과의 소수점이 손실될 수 있기 때문이다. Int 타입끼리 산술 연산을 하게 되면 결과 타입은 무조건 Int이다. 3/2 (둘 다 Int)의 계산 결과가 1.5일 것 같지만 1이다. 계산 결과에 소수점이 존재하더라도 보존되지 않는다. Int 타입보다 작은 정수 타입들(Byte, Short)끼리 산술 연산을 하면 무조건 Int이다. 변수 타입 변경 코틀린의 자바보다 타입..

Kotlin 2022.09.28

TypeScript 시작하기

Why TypeScript?function fn(x) { return x.flip();}자바스크립트는 런타임에 타입을 확인하고 무엇을 할지 결정한다.위 코드에서 fn은 특정한 타입의 x를 받아야 하고, x가 반드시 callable한 flip를 가지고 있어야 한다.이로 인해 시스템의 동작을 예측하기 어려워지고, 프로그래머의 실수를 런타임에야 발견하게 된다.tscTypeScript compiler설치하기: npm install -g typescripttsc hello.ts타입을 체크한다.hello.js라는 새로운 파일이 생성된다.에러가 있더라도 hello.js 파일이 생성된다. (당신이 TypeScript보다 잘 알 것이기에)에러가 있을 때 컴파일을 하고 싶지 않다면 --noEmitOnError 옵션을..

Kotlin 2021.09.08

Kotlin 시작하기

const 컴파일 타임에 결정됨 read-only Top-level / object의 멤버 / companion object의 멤버 No custom getter lateinit - var, non-null 프로퍼티에 사용 - 초기화 되기 전에 접근시 예외 발생 if (foo::bar.isInitialized) { println(foo.bar) } data class getters & setters in case of `var` equals() hashCode() toString() copy() componentN() read-only list val list = listOf("a", "b", "c") read-only map val map = mapOf("a" to 1, "b" to 2, "c" to ..

Kotlin 2021.05.02