23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
kotlin은 java 개발자에게는 매우 쉽고 편한 개발 언어로 인식되고 있다.
그러나 사실 kotlin은 java의 여러가지 문제점을 많이 개선한 언어이며, 최근에는 kotlin은 자바의 인기를 넘어섰다고 할 수 있다.
kotlin은 어떤 장점이 있기에 최근 인기있는 언어가 되었는지 특징을 알아보자.
간결한 코드
kotlin은 java에서 사용하던 일명 세레모니 형식이 없다.
자바가 가지고 있던 public 등의 접근 제어도 사실 크게 필요하지 않고, 세미콜론으로 문장을 끝내야 하는 것과 같은 군더더기를 많이 덜어냈다.
getter, setter은 기본적으로 내장하고 있으며, 커스텀으로 확장이 가능하다.
Null Safe
코틀린은 기본적으로 변수값이 널이 될수 없다.
널을 지정할 수 있지만 (?, ?:, ?.) 등을 사용하여 널처리도 가능하다.
그러나 널을 기본적으로 허용하지 않음으로 해서 간결하면서도, 안전한 코드를 작성할 수 있다.
개발자에게 NullPointerException은 좋은 코딩 습관이 아니다.
타입추론
데이터 타입을 지정해야했던 java와는 다르게 컴파일 타임에 데이터 타입을 추론한다.
이를 통해 간단한 코드를 작성할 수 있고, 읽기도 쉽다.
함수형 프로그래밍
자바는 1급 객체가 클래스이다.
자바에서는 아규먼트를 전달하거나 결과를 반환할때 꼭 기본타입이나, 클래스 타입만을 반환할 수 있다.
이러한 특징은 개발의 상상력을 제한하고, 함수형 언어로 작성하기 매우 어렵게 만든다.
Java에서는 이런 함수형식을 흉내내기 위해서 FunctionalInterface라는 인터페이스를 만들었었다. (이는 메소드가 오직 1개만 있는 인터페이스를 말한다.)
kotlin에서는 함수가 1급 객체이다. 즉, High order function 언어이다.
이를 통해 함수를 파라미터로 전달하고, 응답으로 반환할 수 있어 함수형 언어를 작성하기 수월하며, 개발의 상상력도 향상 시킨다.
확장함수
기존 클래스를 상속받지 않고, 새 함수로 확장할 수 있는 확장함수 기능을 제공한다.
이를 통해 쉽게 기존 코드를 재사용할 수 있다.
코루틴
자바에서 쓰레드가 있다면, 코틀린에서는 코루틴이라는 방식을 지원한다.
코루틴은 쓰레드보다 가벼우며, 매우 간결한 코드로 비동기 프로그램을 작성할 수 있다.
자바와 호환성
코틀린을 이용하면, 자바 코드를 쉽게 사용할 수 있는 상호 호환성을 가진다.
https://stacktrends.dev/technologies/programming-languages/kotlin/ 에서 코틀린의 동향을 살펴볼 수 있다.
즉 꾸준히 성정하고 있으며, 미국 여러 도시에서도 점점 코틀린의 사용이 많아지고 있어 Java 프로그래머의 대안으로 뜨고 있음을 알 수 있다.
https://www.linkedin.com/pulse/top-programming-language-trends-2023-experttal/
SDK man 은 개발 환경에 따라 SDK를 변경하면서 사용할 수 있는 매우 유용한 유틸이다.
복수개의 SDK(Software Development Took Kit) 을 설치해두고, 스위치하면서 사용할 수 있는 장점이 있다.
SDKMan 에서 내용을 확인해 보자.
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+7095.11.4+709 버젼이 설치된것을 확인할 수 있다.
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사용방법은 아래와 같이 확인할 수 있다.
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================================================================================
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 버젼을 설치할 것이다.
설치 형식은 아래와 같다.
sdk install <candidate> <version>sdk install java 11.0.11.j9-adpt이미 설치되어 있다면 다음과 같은 메시지가 나온다.
java 11.0.11.j9-adpt is already installed.이제 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.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 버젼이 설치되어 있는것을 확인할 수 있다.
11버젼도 존재하고, 16버젼도 존재한다, 이제 11버젼으로 교체해 보자.
sdk use java 11.0.11.j9-adpt
Using java version 11.0.11.j9-adpt in this shell.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 가 변경되었다.
이제 java 16을 사용하지 않는다고 해보자.
설치된 버젼을 삭제하기 위해서 다음 명령을 수행하자.
sdk uninstall java 16.0.1.hs-adpt
Deselecting java 16.0.1.hs-adpt...
Uninstalling java 16.0.1.hs-adpt...이제 삭제가 정상으로 되었는지 확인해보자.
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
... 생략기타 상세한 사용법 알아보기.
사용법 에서 상세한 사용법을 확인할 수 있다.
SDKman 은 개발시 자유로운 버젼 변경을 원활하게 수행할 수 있도록 해준다.
설치된 SDK의 경로를 찾아서 shell의 환경 변수를 바꾸어 주는 방식을 이용하지 않아도, 편리하게 원하는 버젼으로 교체할 수 있게 해주어, 개발자에게 매우 효과적인 툴이 될 것이다.
IntelliJ 는 Java 개발자라면 가장 유명한 IDE중 하나라는 것을 알 것이다.
Eclipse STS 는 무료 버젼으로 인기있으며, IntelliJ 는 유료이지만 강력한 기능으로 자바 개발자에게 사랑받는 IDE이다.
https://www.jetbrains.com/idea/download/?section=mac 에서 IntelliJ를 다운받고 설치하자. (맥 버젼 주소이며 윈도우 개발자는 윈도우 탭을 클릭해서 설치하자. )
코틀린으로 시작하기: https://www.jetbrains.com/help/idea/get-started-with-kotlin.html
REPL로 코틀린 빠르게 실행하기: https://www.jetbrains.com/help/idea/kotlin-repl.html
첫번째 어플리케이션 개발하기: https://www.jetbrains.com/help/idea/create-your-first-kotlin-app.html
테스트 드리븐 코틀린 개발하기: https://www.jetbrains.com/help/idea/tdd-with-kotlin.html#write-test-body
위 과정을 꼭 따라해보자.
kotlin 을 원활히 이용하기 위해서는 Intellij와 같은 전문 IDE를 사용하는 것이 편리하다.
그러나 cli를 이용해서 간단한 kotlin 을 수행하고 싶을때가 있다.
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 을 참조하자.
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" 인것을 알 수 있다.
지금까지 수동으로 kotlin을 생성하고, 이를 컴파일 및 실행해 보았다.
컴포일 결과로 .jar 파일을 만들었다.
java 환경에서 수행되는 hello.jar 파일을 생성했고, 결과역시 확인할 수 있었다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.