본문 바로가기

kotlin17

[kotlin] 코틀린 차곡차곡 - 13. data class 안녕하세요. 오늘은 코틀린의 13번째 시간입니다. 오늘 여러분들과 공유할 내용은 코틀린의 data 클래스입니다. kotlin data class에서 만들어지는 것들 Java로 코딩을 하다보면 DTO나 VO를 만들 때 get/set 메서드, toString 과 같은 코드를 만드는 일이 반복적으로 일어나게 됩니다. 이러한 반복적인 코드를 보일러플레이트 코드라고 하는데요. 자바에서 이러한 코드르 없애려고 노력하듯이 코틀린 또한 노력하고 있습니다. 자바에서는 lombok 이나 16버전 이상부터 사용학능한 record를 사용하면 됩니다만 코틀린에서는 data class 라는 타입으로 이를 해결할 수 있습니다. 예제로 한번 알아보도록 하겠습니다. 아래는 일반적인 java 코드입니다. get/set/toString/.. 2021. 10. 5.
[mockk] 코틀린 테스트 프레임워크에 대해서 알아보자 안녕하세요. 오늘은 코틀린 테스트 프레임워크인 mockk의 사용법에 대해서 알아보는 시간을 가져보도록 하겠습니다. mockk framework mockk는 코틀린 스타일로 테스트 코드를 작성할 수 있도록 도와주는 라이브러리입니다. 기존의 java에서 사용하시던 mockkito를 대체한다고 보시면 됩니다. mockk를 사용하기 위해서는 아래처럼 mockk에 대한 의존성을 주입해주실 필요가 있습니다. 포스팅을 쓰는 시점의 가장 최신 버전은 1.12.0 이므로 저는 이 버전을 사용하도록 하겠습니다. testImplementation("io.mockk:mockk:1.12.0") 테스트 서비스 예제 코드 mockk로 테스트를 만드는데 사용할 코드는 아래와 같습니다. 메인으로 테스트할 코드는 마지막에 있는 Mapp.. 2021. 9. 6.
[kotlin] 코틀린 차곡차곡 - 12. 리플렉션(reflection) 안녕하세요. 오늘은 코틀린에서의 리플렉션(reflection)에 대해서 알아보도록 하겠습니다. 리플렉션(reflection) 이란 리플렉션이란 런타임에 프로그램의 클래스를 조사하기 위해서 사용되는 기술입니다. 즉, 프로그램이 실행중일 때 인스턴스 등을 통해 객체의 내부 구조 등을 파악할 수 있습니다. Spring에서는 이 기술을 적극적으로 활용하고 있습니다. 대표적으로 어노테이션의 활용을 들 수 있습니다. 멤버 변수에 어노테이션을 붙인다면 어떻게 활용할 수 있을까요? 바로 이 리플렉션을 이용하는 것입니다. 리플렉션을 이용해서 멤버변수에 해당 어노테이션이 붙어있다면이라는 조건문을 통해 처리할 수 있는 것입니다. 우리가 자주사용하는 jackson library의 field를 추가하는 메서드 코드를 보도록 하.. 2021. 8. 29.
[kotlin] 코틀린 차곡차곡 - 11. Annotation ( 어노테이션 ) 안녕하세요. 오늘은 코틀린에서 Annotation을 사용하는 방법에 대해서 알아보도록 하겠습니다. 어노테이션( Annotation ) 어노테이션은 자바 또는 코틀린에서 사용됩니다. 어노테이션은 메타데이터 ( 부가기능 )을 코드에 비침투적으로 추가할 수 있는 수단으로 kotlin docs에서는 정의하고 있습니다. 어노테이션은 멤버 변수, 함수, 클래스 등 다양한 곳에 위치 시킬 수 있으며 또한 다양한 기능을 가진 다양한 어노테이션이 있습니다. 그리고 우리는 기 정의된 어노테이션 뿐만 아니라 스스로 정의한 커스텀 어노테이션을 만들어 사용할 수도 있습니다. 기본적인 선언 및 사용방법 코틀린에서 어노테이션은 아래와 같이 선언하면 사용할 수 있습니다. 아래 코드는 Karol이라는 어노테이션을 제작한 것이며 @Ka.. 2021. 8. 28.
[gRPC + java or kotlin] gRPC를 직접 구현재보자 - 공통 모델편 안녕하세요. 오늘부터는 gRPC를 직접 구현해보는 시간을 가져보도록 하겠습니다. 총 3개의 챕터로 진행될 예정이며 이번 포스팅은 공통 모델, 서버, 클라이언트 편으로 나누어서 진행하려고 합니다. 오늘은 protocol buffer를 이용해서 java에서 공통된 모델을 만드는 과정을 보도록 하겠습니다. IDL(Interface Defintion Language) gRPC는 Interface를 먼저 정의해야한는 언어라고 말씀드렸습니다. 이부분에 대해서는 이전 시간에 [gRPC] protocol buffer3를 실제로 사용해보자 포스팅을 참고하시면 좀 더 자세한 내용을 알 수 있습니다. 오늘 사용할 protocol buffer 파일은 아래와 같습니다. 각 라인의 설명은 코드에 달아두었습니다. 위 링크에서 pr.. 2021. 7. 31.
[kotlin + Spring] 코틀린, Spring Boot 환경에서 JPA 사용하기, plugin과 함께 안녕하세요. 오늘은 코틀린 그리고 Spring Boot 환경에서 JPA를 사용하는 방법에 대해서 알아보도록 하겠습니다. 환경 JDK 버전 : 1.8.0.292 kotlin 버전 : 1.4.32 spring boot 버전 : 2.4.5 gradle 버전 : 6.8.3 intellij 버전 : 2021.1.1 프로젝트 시작하기 처음에 프로젝트를 시작하는 방법과 기본적인 gradle kotlin dsl의 설정에 대해서는 이전 포스팅에서 자세히 다루었습니다. 참고해주시기 바랍니다. [kotlin + Spring] 코틀린 환경에서 Spring Boot 사용하기 gradle kotlin dsl 설정 먼저 gradle kotlin dsl 설정을 하는 법부터 알아보도록 하겠습니다. gradle kotlin dsl 설정.. 2021. 7. 30.
[kotlin + Spring] 코틀린 환경에서 Spring Boot 사용하기 우리가 자바를 사용하는 이유는 스프링 프레임워크가 있기 때문이다라는 말이 있을 정도로 자바 언어를 사용하는 유저에게 스프링은 정말 없어서는 안될 존재이기도 합니다. 최근 코틀린이 자바유저들의 관심을 받기 시작한것도 물론 언어적으로 좀 더 실용적이라는 관점도 있지만 스프링을 사용할 수 있기때문에 진입장벽이 낮게 여겨지는 이유도 있을것이라고 봅니다. 그런이유로, 오늘은 코틀린 환경에서 스프링 프레임워크를 사용해보도록 하겠습니다. 환경 오늘 프로젝트는 아래의 환경을 기반으로 이루어집니다. 만약 동일하게 따라했으나 오류가 난다면 버전문제일 수 있으니 확인해주시기 바랍니다. JDK 버전 : 1.8.0.292 kotlin 버전 : 1.4.32 spring boot 버전 : 2.4.5 gradle 버전 : 6.8.3.. 2021. 7. 25.
[kotlin] 코틀린 차곡차곡 - 10. 인라인(inline) 함수와 reified 키워드 안녕하세요. 오늘은 코틀린에서 인라인 함수와 reified 키워드에 대해서 알아보는 시간을 가져보도록 하겠습니다. inline function 인라인(inline) 키워든는 자바에서는 제공하지 않는 코틀린만의 키워드입니다. 이러한 인라인 키워드를 이용하여 함수를 만들고 이를 잘 활용한다면 다양한 이득을 얻을 수 있는 경우가 있습니다. 하나씩 알아보도록 하겠습니다. 람다식을 사용했을 때 무의미한 객체 생성을 예방 인라인 함수를 사용한다면 람다식을 사용했을 때 무의미한 객체 생성을 막을 수 있습니다. 무슨 의미일까요? 이를 이해하기 위해서는 kotlin의 람다식이 컴파일될때 어떻게 변하는지를 확인해봐야합니다. 아래의 예제를 보도록 하겠습니다. 아래의 코드는 함수를 파라미터로 받고 특정한 일을한 후 해당 함수.. 2021. 7. 14.
[kotlin] 코틀린 차곡차곡 - 9. 연산자 오버로딩 (Operator Overloading) 안녕하세요. 오늘은 코틀린의 연산자 오버로딩에 대해서 알아보도록 하겠습니다. 연산자 오버로딩 Java, javascript 만 사용하여 코딩을 하셨던 분들은 연산자 오버로딩이라는 개념이 생소하실 수 있습니다. 만약 C++, C#, python 등의 언어를 사용해 본적이 있으시다면 해당 언어에서도 연산자 오버로딩을 제공하기 때문에 알고 있으실 수 도 있습니다. 연산자 오버로딩이란 위키에서 객체 지향 프로그래밍에서 다형성의 특별한 경우로 다른 연산자들이 함수 연사자를 통해서 구현을 할 때를 말한다. 라고 정의되어 있습니다. 이 말인 즉슨 +, - 등 과 같은 연산자가 어떤 값과 함께 사용하느냐에 따라서 다르게 동작할 수 있도록 그것을 커스터마이징 할 수 있다는 의미입니다. java 에서도 연산자 오버로딩은 .. 2021. 7. 4.
[kotlin] 코틀린 차곡차곡 - 8. Scope Function 안녕하세요. 오늘은 코틀린 Scope Function에 대해서 알아보도록 하겠습니다. Scope Function 란 코틀린으 표준 라이브러리에서는 Scope Function을 지원하고 있습니다. Scope Fuction은 객체 컨텍스트 내에서 코드 블럭을 실행할 수 있도록 해줍니다. 즉, Scope Fuction을 이용하면 객체의 정보를 기본적으로 가지고 있는 코드 블럭을 만들어 사용할 수 있어 간결한 코딩을 가능하게 해줍니다. 아래 예제를 보시면 좀 더 이해가 되실 것입니다. 오늘 포스팅에서 사용할 클래스의 코드는 아래와 같습니다. class MappingService( private var name: String, private var age: Int ) { fun changeName(name: St.. 2021. 6. 28.
[kotlin] 코틀린 차곡차곡 - 7. NPE(NullPointException) 안전하게 코딩하기 안녕하세요. 오늘은 코틀린이 NPE에서 안전할 수 있는 언어적인 특성에 대해서 알아보도록 하겠습니다 ! NPE(NullPointerException) 문제 null 이라는 개념은 1965년 ALGOL W의 창시자 Tony Hoare에 의해서 발명되었다고 합니다. 그리고 2009년 소프트웨어 컨퍼런스에서 null에 대해서 개념상 편해서 만들어졌으며 스스로 1조원 짜리 실수(The Billion Dollar Mistake) 평가했습니다. 여러분이 기존에 Java 언어로 개발을 해보셨다면 NullPointerException을 한번쯤은 경험해 보셨을 것이라고 생각되어집니다. NullPointerException은 기본적으로 객체에 값이 할당되지 않았을 때(nul 일 경우) 해당 값을 호출하면 발생하는 에러입니.. 2021. 6. 20.
[kotlin] 코틀린 차곡차곡 - 6. 클래스 - 3 안녕하세요. 오늘은 코틀린 차곡차곡 6번째 시간입니다. 오늘은 이전 시간에 이어서 코틀린 클래스에 대해서 알아보는 3번째 시간이자 마지막 시간입니다. 마지막까지 잘부탁드립니다. :) 정적 클래스 ( static class ) 클래스 내부에 정적 클래스 및 변수를 선언하기 위해서는 companion 키워드를 사용하면 됩니다. companion 클래스를 선언하고 그 내부에 변수 및 함수를 선언하면 이곳에 선언된 요소들은 객체를 만들지 않고도 바로 접근이 가능합니다. 아래코드를 통해 companion object를 좀 더 알아보도록 하겠습니다. 아래 코드는 companion object에 2개의 함수와 1개의 정적 변수를 선언해서 사용하고 있습니다. 이 예제는 정적 함수를 사용하여 객체 생성시에 validat.. 2021. 6. 19.