Kotlin

    코틀린 기초: 함수 정의와 호출

    코틀린에서 컬렉션 만들기 코틀린은 자체적인 컬렉션 클래스를 제공하진 않으나 자바보다 더 풍부한 API를 지원합니다. val set = hashSetOf(1, 7, 53) // class java.util.HashSet val list = arrayListOf(1, 7, 53) // class java.util.ArrayList val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") // class java.util.HashMap 함수를 호출하기 쉽게 만들기 Named Parameter 이름 붙인 파라미터를 사용하면 함수의 파라미터가 많을 때 함수 호출의 가독성을 향상시킬 수 있습니다. joinToString(collection, separa..

    코틀린이란 무엇이며, 왜 필요한가?

    코틀린의 등장 배경 코틀린은 자바의 대체제로 자주 언급되는데요. 하지만 처음 개발될 당시엔 자바를 대체 하는것이 목표는 아니었습니다. 코틀린의 개발사 Jetbrains에서 개발을 주도하던 드미트리(Dmitry Jemerov)는 코틀린을 개발할 당시 스칼라를 제외한 언어들에는 찾고자 하는 기능이 존재하지 않았고, 스칼라는 컴파일 시간이 매우 느렸기때문에 아쉬움이 있었다고 말했습니다. 결국 코틀린을 통해 원하는 기능을 모두 지원하면서 자바만큼 빠르게 컴파일하는 것이 주요 목적이었던 것입니다. 그러다보니 코틀린은 다수의 유용한 기능을 제공하며, 아직 자바 만큼은 아니지만 빠른 컴파일 타임을 가진 언어로 개발되었습니다. 코틀린의 주요 장점 그럼 코틀린은 어떤 장점을 지니고 있을까요? 1. 간결한 구문 언어의 표..

    [Kotlin] 상태를 가변적으로 관리했을 때 발생하는 문제

    개발을 하다보면 '상태'라는 단어를 정말 많이 듣게 됩니다. 그렇다면 상태가 뭘까요? 객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체간에 메시지를 주고 받는게 바로 프로그래밍의 중심이 됩니다. 객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있습니다. 커피 머신, 바리스타 등등... 이러한 객체는 자신만의 상태(state)와 행동(behavior)으로 구성되게 되는데, 이 '상태'를 의미합니다. 각 객체가 지닌 고유한 특성인거죠. 그럼 상태가 가변적이란건 무슨 의미일까요? 상태는 각 객체가 지닌 고유한 특성이라고 설명드렸는데요. 예를 들어보겠습니다. 버튼은 어떨까요? 이왕이면 조금 더 직관적이게 누르기만하면 핵 미사일이 발..

    jacoco Unexpected SMAP line: *S KotlinDebug 에러

    이번에 Kotlin + SpringBoot로 새로운 프로젝트를 시작했는데, jacoco를 붙이려고 과거에 사용했던 세팅을 그대로 가져왔다. 하지만 Unexpected SMAP line: *S KotlinDebug 라는 에러가 발생하며 Verification과 Report Task 실행이 되지 않았다. 뭐가 문제일까? 문득, 버전의 문제가 아닐까? 라는 생각이 들었다. 프로젝트를 진행하고 시간이 지남에 따라 각 프로젝트마다 코틀린과 스프링부트의 버전이 다른데, 이게 문제가 아닐까? 검색을 해보니 역시나 버전 문제였다. jacoco의 버전을 기존 0.8.5에서 최신 0.8.7으로 올리는 것으로 해결했다. jacoco { toolVersion = "0.8.7" } Appendix https://blog.leo..

    SpringBoot에서 STOMP로 채팅 애플리케이션 만들기 (3)

    목차 SpringBoot에서 STOMP로 채팅 애플리케이션 만들기 (1) SpringBoot에서 STOMP로 채팅 애플리케이션 만들기 (2) SpringBoot에서 STOMP로 채팅 애플리케이션 만들기 (3) - 현재 게시글 이제 만들어둔 서버와 통신한 클라이언트를 만들어볼 차례다. 개략적으론 SocketJS와 STOMP Client를 이용해 통신하고, vue/bootstrap/freemarker로 화면을 그릴 예정이다. 1. 의존성 추가 dependencies { implementation("org.webjars.bower:bootstrap:4.3.1") implementation("org.webjars.bower:vue:2.5.16") implementation("org.webjars.bower:ax..