데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [Kotlin] 코틀린 환경설정 & CLI 이용하기

      KIDO 23.10.26
      6,490 19 0
      DEVOTEE 요약
      Kotlin은 Java의 문제를 개선한 개발 언어로 그 인기를 누리고 있다. Kotlin의 주요 장점은 간결한 코드, Null Safe 기능, 타입추론, 확장함수, 함수형 프로그래밍 등이며, 코루틴 및 자바와의 호환성도 갖추고 있다. 또한, SDKMan을 활용하면 원할한 버전 변경이 가능하고, Intellij 설치를 통해서 코틀린 개발 환경을 구축할 수 있다.
      DEVOTEE 추천 블로그

      Kotlin을 배워야 하는 이유

      • kotlin은 java 개발자에게는 매우 쉽고 편한 개발 언어로 인식되고 있다.

      • 그러나 사실 kotlin은 java의 여러가지 문제점을 많이 개선한 언어이며, 최근에는 kotlin은 자바의 인기를 넘어섰다고 할 수 있다.

      • kotlin은 어떤 장점이 있기에 최근 인기있는 언어가 되었는지 특징을 알아보자.


      Kotlin의 장점

      • 간결한 코드

        • kotlin은 java에서 사용하던 일명 세레모니 형식이 없다.

        • 자바가 가지고 있던 public 등의 접근 제어도 사실 크게 필요하지 않고, 세미콜론으로 문장을 끝내야 하는 것과 같은 군더더기를 많이 덜어냈다.

        • getter, setter은 기본적으로 내장하고 있으며, 커스텀으로 확장이 가능하다.

      • Null Safe

        • 코틀린은 기본적으로 변수값이 널이 될수 없다.

        • 널을 지정할 수 있지만 (?, ?:, ?.) 등을 사용하여 널처리도 가능하다.

        • 그러나 널을 기본적으로 허용하지 않음으로 해서 간결하면서도, 안전한 코드를 작성할 수 있다.

        • 개발자에게 NullPointerException은 좋은 코딩 습관이 아니다.

      • 타입추론

        • 데이터 타입을 지정해야했던 java와는 다르게 컴파일 타임에 데이터 타입을 추론한다.

        • 이를 통해 간단한 코드를 작성할 수 있고, 읽기도 쉽다.

      • 함수형 프로그래밍

        • 자바는 1급 객체가 클래스이다.

          • 자바에서는 아규먼트를 전달하거나 결과를 반환할때 꼭 기본타입이나, 클래스 타입만을 반환할 수 있다.

          • 이러한 특징은 개발의 상상력을 제한하고, 함수형 언어로 작성하기 매우 어렵게 만든다.

          • Java에서는 이런 함수형식을 흉내내기 위해서 FunctionalInterface라는 인터페이스를 만들었었다. (이는 메소드가 오직 1개만 있는 인터페이스를 말한다.)

        • kotlin에서는 함수가 1급 객체이다. 즉, High order function 언어이다.

        • 이를 통해 함수를 파라미터로 전달하고, 응답으로 반환할 수 있어 함수형 언어를 작성하기 수월하며, 개발의 상상력도 향상 시킨다.

      • 확장함수

        • 기존 클래스를 상속받지 않고, 새 함수로 확장할 수 있는 확장함수 기능을 제공한다.

        • 이를 통해 쉽게 기존 코드를 재사용할 수 있다.

      • 코루틴

        • 자바에서 쓰레드가 있다면, 코틀린에서는 코루틴이라는 방식을 지원한다.

        • 코루틴은 쓰레드보다 가벼우며, 매우 간결한 코드로 비동기 프로그램을 작성할 수 있다.

      • 자바와 호환성

        • 코틀린을 이용하면, 자바 코드를 쉽게 사용할 수 있는 상호 호환성을 가진다.


      최근 동향

      Install JDK with SDK man

      1. SDKMan

      • SDK man 은 개발 환경에 따라 SDK를 변경하면서 사용할 수 있는 매우 유용한 유틸이다.

      • 복수개의 SDK(Software Development Took Kit) 을 설치해두고, 스위치하면서 사용할 수 있는 장점이 있다.

      • SDKMan 에서 내용을 확인해 보자.

      2. Install

      • SDKMan 은 Linux 계열의 OS에서 호환되는 툴이며, Mac OSX, Linux, WSL, Cygwin, Solaris, FreeBSD 등에서 설치가 가능하다.

      curl -s "https://get.sdkman.io" | bash
      • 명령을 실행하면 화려한 텍스트 이미지와 함께 SDK가 설치된다.

      • 아래 커맨드로 sdkman 을 초기화 해주고, 환경에 등록해준다.

      source "$HOME/.sdkman/bin/sdkman-init.sh"
      • 정상 등록 체크하기

      sdk version
      
      SDKMAN 5.11.4+709
      • 5.11.4+709 버젼이 설치된것을 확인할 수 있다.

      3. sdk help 정보 보기

      sdk help
      • 아래 내용과 같은 결과를 확인할 수 있다.

      Usage: sdk <command> [candidate] [version]
             sdk offline <enable|disable>
      
         commands:
             install   or i    <candidate> [version] [local-path]
             uninstall or rm   <candidate> <version>
             list      or ls   [candidate]
             use       or u    <candidate> <version>
             completion        <bash|zsh>
             config
             default   or d    <candidate> [version]
             home      or h    <candidate> <version>
             env       or e    [init|install|clear]
             current   or c    [candidate]
             upgrade   or ug   [candidate]
             version   or v
             broadcast or b
             help
             offline           [enable|disable]
             selfupdate        [force]
             update
             flush             [archives|tmp|broadcast|version]
      
         candidate  :  the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
                       use list command for comprehensive list of candidates
                       eg: $ sdk list
         version    :  where optional, defaults to latest stable if not provided
                       eg: $ sdk install groovy
         local-path :  optional path to an existing local installation
                       eg: $ sdk install groovy 2.4.13-local /opt/groovy-2.4.13

      4. 사용방법

      • 사용방법은 아래와 같이 확인할 수 있다.

      Usage: sdk <command> [candidate] [version]
             sdk offline <enable|disable>
      • command: 커맨드는 설치, 삭제, 사용 등의 명령이 올 수 있다.

      • candidate: 이것은 제공하는 SDK의 종류를 나타낸다. groovy, scala, grails, gradle, kotlin 등이 있을 수 있으며, 자세한 사항은 SDKMan sdklist 에서 확인할 수 있다.

      • version: 설치할 버젼을 선택할 수 있다.

      • 설치 가능한 Java SDK 확인하기.

      • 이제 Java 를 설치할 것이기 때문에 다음 명령어로 설치가능한 Java SDK를 살펴보자.

      sdk list java

      5. 결과보기

      ================================================================================
      Available Java Versions
      ================================================================================
       Vendor        | Use | Version      | Dist    | Status     | Identifier
      --------------------------------------------------------------------------------
       AdoptOpenJDK  |     | 16.0.1.j9    | adpt    |            | 16.0.1.j9-adpt      
                     |     | 16.0.1.hs    | adpt    |            | 16.0.1.hs-adpt      
                     |     | 16.0.0.j9    | adpt    |            | 16.0.0.j9-adpt      
                     |     | 16.0.0.hs    | adpt    |            | 16.0.0.hs-adpt      
                     |     | 11.0.11.j9   | adpt    |            | 11.0.11.j9-adpt     
                     |     | 11.0.11.hs   | adpt    |            | 11.0.11.hs-adpt     
                     |     | 11.0.10.j9   | adpt    |            | 11.0.10.j9-adpt     
                     |     | 11.0.10.hs   | adpt    |            | 11.0.10.hs-adpt     
                     |     | 8.0.292.j9   | adpt    |            | 8.0.292.j9-adpt     
                     |     | 8.0.292.hs   | adpt    |            | 8.0.292.hs-adpt     
                     |     | 8.0.282.j9   | adpt    |            | 8.0.282.j9-adpt     
                     |     | 8.0.282.hs   | adpt    |            | 8.0.282.hs-adpt     
       Amazon        |     | 16.0.1.9.1   | amzn    |            | 16.0.1.9.1-amzn     
                     |     | 16.0.0.36.1  | amzn    |            | 16.0.0.36.1-amzn    
                     |     | 15.0.2.7.1   | amzn    |            | 15.0.2.7.1-amzn     
                     |     | 11.0.11.9.1  | amzn    |            | 11.0.11.9.1-amzn    
                     |     | 11.0.10.9.1  | amzn    |            | 11.0.10.9.1-amzn    
                     |     | 8.292.10.1   | amzn    |            | 8.292.10.1-amzn     
                     |     | 8.282.08.1   | amzn    |            | 8.282.08.1-amzn     
       Azul Zulu     |     | 16.0.1       | zulu    |            | 16.0.1-zulu         
                     |     | 16.0.0       | zulu    |            | 16.0.0-zulu         
                     |     | 16.0.0.fx    | zulu    |            | 16.0.0.fx-zulu      
                     |     | 15.0.2.fx    | zulu    |            | 15.0.2.fx-zulu      
                     |     | 11.0.11      | zulu    |            | 11.0.11-zulu        
                     |     | 11.0.10      | zulu    |            | 11.0.10-zulu        
                     |     | 11.0.10.fx   | zulu    |            | 11.0.10.fx-zulu     
                     |     | 8.0.292      | zulu    |            | 8.0.292-zulu        
                     |     | 8.0.282      | zulu    |            | 8.0.282-zulu        
                     |     | 8.0.282.fx   | zulu    |            | 8.0.282.fx-zulu     
                     |     | 7.0.302      | zulu    |            | 7.0.302-zulu        
                     |     | 7.0.292      | zulu    |            | 7.0.292-zulu        
       BellSoft      |     | 16.0.1.fx    | librca  |            | 16.0.1.fx-librca    
                     |     | 16.0.1       | librca  |            | 16.0.1-librca       
                     |     | 16.0.0.fx    | librca  |            | 16.0.0.fx-librca    
                     |     | 16.0.0       | librca  |            | 16.0.0-librca       
                     |     | 11.0.11.fx   | librca  |            | 11.0.11.fx-librca   
                     |     | 11.0.11      | librca  |            | 11.0.11-librca      
                     |     | 11.0.10.fx   | librca  |            | 11.0.10.fx-librca   
                     |     | 11.0.10      | librca  |            | 11.0.10-librca      
                     |     | 8.0.292.fx   | librca  |            | 8.0.292.fx-librca   
                     |     | 8.0.292      | librca  |            | 8.0.292-librca      
                     |     | 8.0.282.fx   | librca  |            | 8.0.282.fx-librca   
                     |     | 8.0.282      | librca  |            | 8.0.282-librca      
       GraalVM       |     | 21.1.0.r16   | grl     |            | 21.1.0.r16-grl      
                     |     | 21.1.0.r11   | grl     |            | 21.1.0.r11-grl      
                     |     | 21.0.0.2.r11 | grl     |            | 21.0.0.2.r11-grl    
                     |     | 21.0.0.2.r8  | grl     |            | 21.0.0.2.r8-grl     
                     |     | 20.3.2.r11   | grl     |            | 20.3.2.r11-grl      
                     |     | 20.3.1.2.r11 | grl     |            | 20.3.1.2.r11-grl    
                     |     | 20.3.1.2.r8  | grl     |            | 20.3.1.2.r8-grl     
                     |     | 19.3.6.r11   | grl     |            | 19.3.6.r11-grl      
                     |     | 19.3.5.r11   | grl     |            | 19.3.5.r11-grl      
                     |     | 19.3.5.r8    | grl     |            | 19.3.5.r8-grl       
       Java.net      |     | 17.ea.23     | open    |            | 17.ea.23-open       
                     |     | 17.ea.22     | open    |            | 17.ea.22-open       
                     |     | 17.ea.21     | open    |            | 17.ea.21-open       
                     |     | 17.ea.20     | open    |            | 17.ea.20-open       
                     |     | 17.ea.19     | open    |            | 17.ea.19-open       
                     |     | 17.ea.7.lm   | open    |            | 17.ea.7.lm-open     
                     |     | 17.ea.3.pma  | open    |            | 17.ea.3.pma-open    
                     |     | 16           | open    |            | 16-open             
                     |     | 16.0.1       | open    |            | 16.0.1-open         
                     |     | 11.0.2       | open    |            | 11.0.2-open         
       Microsoft     |     | 11.0.11.9.1  | ms      |            | 11.0.11.9.1-ms      
                     |     | 11.0.10.9    | ms      |            | 11.0.10.9-ms        
       SAP           |     | 16           | sapmchn |            | 16-sapmchn          
                     |     | 16.0.1       | sapmchn |            | 16.0.1-sapmchn      
                     |     | 15.0.2       | sapmchn |            | 15.0.2-sapmchn      
                     |     | 11.0.11      | sapmchn |            | 11.0.11-sapmchn     
                     |     | 11.0.10      | sapmchn |            | 11.0.10-sapmchn     
       TravaOpenJDK  |     | 11.0.9       | trava   |            | 11.0.9-trava        
                     |     | 8.0.232      | trava   |            | 8.0.232-trava       
      ================================================================================
      Use the Identifier for installation:
      
          $ sdk install java 11.0.3.hs-adpt
      ================================================================================
      • 위 내용과 같이 설치가능한 JDK 버젼들을 확인할 수 있다.

      • 우리는 위에서 AdoptOpenJDK 11 버젼을 설치할 것이다.


      JDK 설치하기

      1. 설치형식

      • 설치 형식은 아래와 같다.

      sdk install <candidate> <version>

      2. Java 11설치하기

      sdk install java 11.0.11.j9-adpt
      • 이미 설치되어 있다면 다음과 같은 메시지가 나온다.

      java 11.0.11.j9-adpt is already installed.

      3. Java 16 버젼 설치해보기

      • 이제 Java 16 버젼을 설치해보자.

      sdk install java 16.0.1.hs-adpt
      • 이미 설치되어 있는 버젼이 있다면 기본 설정을 물어보는 화면이 아래와 같이 나온다.

      Downloading: java 16.0.1.hs-adpt
      
      In progress...
      
      ############################################################################################################################### 100.0%############################################################################################################################### 100.0%
      
      Repackaging Java 16.0.1.hs-adpt...
      
      Done repackaging...
      Cleaning up residual files...
      
      Installing: java 16.0.1.hs-adpt
      Done installing!
      
      Do you want java 16.0.1.hs-adpt to be set as default? (Y/n): Y
      
      Setting java 16.0.1.hs-adpt as default.

      4. 테스트하기

      java --version
      
      openjdk 16.0.1 2021-04-20
      OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
      OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
      • 16.0.1 버젼이 설치되어 있는것을 확인할 수 있다.

      5. 버젼 교체하기

      • 11버젼도 존재하고, 16버젼도 존재한다, 이제 11버젼으로 교체해 보자.

      sdk use java 11.0.11.j9-adpt
      
      Using java version 11.0.11.j9-adpt in this shell.

      6. 테스트하기

      java --version
      
      openjdk 11.0.11 2021-04-20
      OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
      Eclipse OpenJ9 VM AdoptOpenJDK-11.0.11+9 (build openj9-0.26.0, JRE 11 Mac OS X amd64-64-Bit Compressed References 20210421_957 (JIT enabled, AOT enabled)
      OpenJ9   - b4cc246d9
      OMR      - 162e6f729
      JCL      - 7796c80419 based on jdk-11.0.11+9)
      • 11 버젼으로 default sdk 가 변경되었다.

      7. 삭제하기

      • 이제 java 16을 사용하지 않는다고 해보자.

      • 설치된 버젼을 삭제하기 위해서 다음 명령을 수행하자.

      sdk uninstall java 16.0.1.hs-adpt
      
      Deselecting java 16.0.1.hs-adpt...
      
      Uninstalling java 16.0.1.hs-adpt...

      8. 삭제여부 확인하기

      • 이제 삭제가 정상으로 되었는지 확인해보자.

      sdk list java                    
      ================================================================================
      Available Java Versions
      ================================================================================
       Vendor        | Use | Version      | Dist    | Status     | Identifier
      --------------------------------------------------------------------------------
       AdoptOpenJDK  |     | 16.0.1.j9    | adpt    |            | 16.0.1.j9-adpt      
                     |     | 16.0.1.hs    | adpt    |            | 16.0.1.hs-adpt      
                     |     | 16.0.0.j9    | adpt    |            | 16.0.0.j9-adpt      
                     |     | 16.0.0.hs    | adpt    |            | 16.0.0.hs-adpt      
                     | >>> | 11.0.11.j9   | adpt    | installed  | 11.0.11.j9-adpt     
                     |     | 11.0.11.hs   | adpt    |            | 11.0.11.hs-adpt     
                     |     | 11.0.10.j9   | adpt    |            | 11.0.10.j9-adpt     
                     |     | 11.0.10.hs   | adpt    |            | 11.0.10.hs-adpt     
                     |     | 8.0.292.j9   | adpt    |            | 8.0.292.j9-adpt     
                     |     | 8.0.292.hs   | adpt    |            | 8.0.292.hs-adpt     
                     |     | 8.0.282.j9   | adpt    |            | 8.0.282.j9-adpt     
                     |     | 8.0.282.hs   | adpt    |            | 8.0.282.hs-adpt     
       Amazon        |     | 16.0.1.9.1   | amzn    |            | 16.0.1.9.1-amzn  
      
      ... 생략
      • 기타 상세한 사용법 알아보기.

      • 사용법 에서 상세한 사용법을 확인할 수 있다.


      Wrap Up

      • SDKman 은 개발시 자유로운 버젼 변경을 원활하게 수행할 수 있도록 해준다.

      • 설치된 SDK의 경로를 찾아서 shell의 환경 변수를 바꾸어 주는 방식을 이용하지 않아도, 편리하게 원하는 버젼으로 교체할 수 있게 해주어, 개발자에게 매우 효과적인 툴이 될 것이다.



      Intellij 설치

      • IntelliJ 는 Java 개발자라면 가장 유명한 IDE중 하나라는 것을 알 것이다.

      • Eclipse STS 는 무료 버젼으로 인기있으며, IntelliJ 는 유료이지만 강력한 기능으로 자바 개발자에게 사랑받는 IDE이다.

      • https://www.jetbrains.com/idea/download/?section=mac 에서 IntelliJ를 다운받고 설치하자. (맥 버젼 주소이며 윈도우 개발자는 윈도우 탭을 클릭해서 설치하자. )


      kotlin 프로그램 생성하기


      kotlin cli 도구 이용하기

      • kotlin 을 원활히 이용하기 위해서는 Intellij와 같은 전문 IDE를 사용하는 것이 편리하다.

      • 그러나 cli를 이용해서 간단한 kotlin 을 수행하고 싶을때가 있다.


      JDK 설치 여부 확인하기

      • kotlin 을 실행하기 위해서는 java sdk가 설치 되어 있어야한다.

      ᐅ java --version
      openjdk 17.0.6 2023-01-17 LTS
      OpenJDK Runtime Environment Corretto-17.0.6.10.1 (build 17.0.6+10-LTS)
      OpenJDK 64-Bit Server VM Corretto-17.0.6.10.1 (build 17.0.6+10-LTS, mixed mode, sharing)
      • 위와 같이 java 가 정상으로 설치 되었는지 확인하자.

      • jdk 설치에 대해서는 Install JDK 을 참조하자.


      kotlin compiler 설치하기

      • mac에서는 kotlin compiler를 brew 를 통해서 설치가 가능하다.

      ᐅ brew install kotlin
      Running `brew update --auto-update`...
      ==> Auto-updated Homebrew!
      • 컴파일러 버전 확인을 해보자.

      ᐅ kotlin -version
      Kotlin version 1.9.10-release-459 (JRE 17.0.6+10-LTS)
      • 정상으로 설치 되었음을 알 수 있다.


      소스 파일 작성하기

      • HelloWorld.kt 파일을 생성하고 다음과 같이 작성한다.

      fun main(args: Array<String>) {
        println("Hello Kotlin.")
      }
      • 다음 명령을 통해서 컴파일을 수행하자.

      ᐅ kotlinc 01.HelloWorld.kt -include-runtime -d hello.jar
      01.HelloWorld.kt:1:10: warning: parameter 'args' is never used
      fun main(args: Array<String>) {
               ^
      
      ᐅ ls
      01.HelloWorld.kt hello.jar
      
      ᐅ java -jar hello.jar
      Hello Kotlin.
      • 위와 같이 kotlinc 를 이용하여 *.kt 파일을 컴파일 한다.

      • -include-runtime 을 이용하여 런타임을 포함시킨다.

      • -d <jar파일이름.jar> 을 이용하여 jar 파일을 출력결과로 한다.

      • java -jar hello.jar 로 우리가 생성한 바이트코드를 실행할 수 있으며, 결과는 "Hello Kotlin" 인것을 알 수 있다.


      WrapUp

      • 지금까지 수동으로 kotlin을 생성하고, 이를 컴파일 및 실행해 보았다.

      • 컴포일 결과로 .jar 파일을 만들었다.

      • java 환경에서 수행되는 hello.jar 파일을 생성했고, 결과역시 확인할 수 있었다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KIDO 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기