이전 포스팅에서 id 프로퍼티를 어느 위치에 선언하는게 좋을지 얘기해봤다. 이번엔 Long 과 Long? 중 어떤걸로 선언할지, 어떤차이가 있는지, 그리고 왜 이런 고민을 하게되는지 얘기해보려한다. # Long? vs Long @Entity @Table(name = "person") class Person( @Column(name = "person_name") val name: String, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "person_id") val id: Long? = null ) id 값의 생성을 DB 에 위임하는 IDENTITY 방식을 주로 사용할텐데 이 방식을 사용하면 엔티티가 영속화되기 전에는 id..
# 이슈 annotation class CustomAnnotation 위와 같이 커스텀 애노테이션을 정의한다. 애노테이션은 다양하게 활용할 수 있지만 내 의도는 프로퍼티에 사용하려는 의도라고 가정한다. class Person( name: String, ) { @CustomAnnotation val name: String = name } @Test fun findAnnotation() { val person = Person3("LichKing") val properties = person::class.memberProperties for (property in properties) { if (property.name == "name") { assertThat(property.hasAnnotation())...
얼마전 코틀린 1.4 버전이 릴리즈됐다. 추가된 기능들에 대해 간략히 살펴보자. # SAM conversions for Kotlin interfaces 지금까지 코틀린은 SAM(Single Abstract Method, 추상메서드가 하나뿐인 인터페이스) 에 대해 람다 표현식을 지원하지않았다. 함수 자체를 타입으로 나타낼 수 있었기때문에 함수 타입에만 람다를 지원하고, 자바의 함수형 인터페이스(마찬가지로 추상메서드가 1개인 인터페이스)만 람다로 표현할 수 있었다. fun main() { val calculator = object: Calculator { override fun add(n1: Int, n2: Int): Int = n1 + n2 } } interface Calculator { fun add(n..
기본적으로 kotlin의 generics 는 자바와 많은 부분에서 비슷하다. 하지만 몇가지 달라진점, 추가된점들이 있는데 그 것들을 정리한다. 기본적으로 자바의 generics 을 어느정도 이해하고있다는 가정하에 얘기가 진행되므로 generics 전체를 자세히 설명하지는 않는다. 1. Star Projection * 를 이용해서 표현한다. 특정 타입을 지정하지않을때 사용하며, 자바의 와일드카드라고 생각하면 된다. 와일드카드와 동일하게 타입을 캡쳐하지않기때문에 타입안정성을 보장받지못한다. 다만 자바의 와일드카드처럼 한정적 와일드카드(bounded wildcard) 문법은 지원하지않는다. // 와일드카드처럼 사용 가능. val list: List = listOf(1, 2, 3) // 타입을 캡쳐하지않기때문에..
1. 자바의 지역변수 스레드 세이프 자바에서 지역변수는 람다나 익명클래스 내에서 값을 변경할 수 없다. 람다나 익명클래스에서만 값을 변경할 수 없을뿐아니라 람다나 익명클래스에서 읽고(read) 있다면 외부 메서드 내에서도 값을 변경할 수 없다. 이 규약을 지키기위해 람다가 없던 자바7까지는 익명클래스에서 외부 메서드의 지역변수를 읽기위해선 지역변수를 final 로 선언했어야했고, 람다가 추가된 자바8 이상에서는 effectively final(사실상 final) 이라는 규약으로 final 변수가 아니더라도 람다나 익명클래스에서 읽고있다면 사실상 final 이 되어 어디서도 값을 변경할 수 없다. public void test() { int number = 100; new Runnable() { @Over..
요근래 kotlin+spring boot2 로 개발을 하고있다. 이중에 코드를 리팩토링하고싶은 부분이 있었고, 이를 리팩토링하는 과정에서 꽤나 삽질을 하게만든 경험을 포스팅하려한다. 뭔가 특정한 내용에 대해 포스팅한다기보다 실제 상황에서 이슈를 만나고, 그 이슈를 해결해가는 과정을 남겨보려한다. 실제 이슈는 회사에서 프로덕션 코드를 리팩토링하는 과정에서 발생한부분이고, 포스팅에서 나오는 코드는 해당 코드를 예제화한 코드이다. 참고로 아래 예제코드를 위한 개발환경은 다음과같다. - kotlin - spring boot 2.1.5 - spring boot stater web - spring boot starter jdbc (필수) 1. 코드작성 abstract class BaseApiRepository(pr..
기존 운영중인 자바 프로젝트에서 테스트코드를 코틀린으로 작성하고자했다.어떤 것들을 해줘야하는지 찾아봤는데 정말 별거 없다. plugins { id 'org.jetbrains.kotlin.jvm' version '1.3.20' } 이것만 추가해주면 바로 코틀린 클래스를 만들어서 테스트 코드를 작성할 수 있다. class KotlinTest { @Test fun `안녕 코틀린`() { assertThat("hello").isEqualTo("hello") } }
- Total
- Today
- Yesterday
- spring cloud
- DesignPattern
- MySQL
- JavaScript Core
- code
- Jackson
- toby
- frontend개발환경
- JPA
- servlet
- 정규표현식
- backend개발환경
- go-core
- Spring
- mariadb
- http
- OOP
- Kotlin
- java
- programming
- generics
- Design Pattern
- Git
- frontcode
- javascript
- java8
- TEST
- clean code
- db
- EffectiveJava
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |