먼저, 저 또한 코틀린을 공부하고 코틀린의 매력에 빠진 사람 중 하나로써 공부한 내용을 공유하고 싶은 마음에 해당 글을 작성하였습니다.
"Kotlin 공부하기" 시리즈의 첫 번째 글로써 해당 글에선 아래와 같은 내용을 알아가실 수 있습니다.
해당 내용은 나무위키를 일부 참조하였습니다. 특징 일부를 참조하였고, 그에 따른 설명과 예시를 추가하였습니다.
// Java
final Post post = new Post();
// Kotlin
// 먼저 상수임을 final이 아닌 val로 나타내었다.
// 그리고 new 키워드를 생략한다.
val post:Post = Post()
// Null can not be a value of a non-null type String
// 위 문구와 함께 컴파일 에러가 납니다.
val hello:String = null
// 문제 없음!
val hello2:String? = null
String limc = "limc";
// 동일성 비교로 false, limc 변수의 주소와 "limc"가 존재하는 주소를 비교
System.out.println(limc == "limc")
// 동등성 비교로 true, limc의 값인 "limc"와 "limc"의 값이 같은지 비교
System.out.println(limc.equals("limc"))
특징 중 코루틴 지원, 클래스 상속, 예외 처리 관련된 내용은 제외하였습니다. 이는 추후 별도 게시글로 다루겠습니다.
제 개발환경 구성은 아래와 같습니다.
JAVA 관련 개발자 도구를 쉽게 관리해 주고 설치할 수 있게 돕는 툴입니다. 사용법이 간단하며 아래와 같은 특징을 가지고 있습니다.
사용법은 매우 간단합니다.
> curl
# 아래와 같이 출력된다면 curl이 설치되어 있는 상태입니다.
curl: try 'curl --help' or 'curl --manual' for more information
기본적으로 Linux나 macOS에는 기본으로 탑재되어있습니다. 만약 curl이 설치되어있지 않다면 자신의 운영체제에 맞는 curl 설치법을 검색하여 설치해주세요
> curl -s "https://get.sdkman.io" | bash
해당 명령어를 실행하면 SDKMan 설치 쉘파일을 가져오고 해당 쉘파일을 실행하여 자동으로 설치를 진행합니다. 설치가 정상적으로 완료되었다면 아래 명령어를 입력해주세요.
> source "$HOME/.sdkman/bin/sdkman-init.sh"
별다른 오류 없이 진행되었다면 아래 명령어를 입력하여 SDKMan이 정상적으로 설치되었는지 확인합니다.
> sdk version
# 아래와 같이 출력됩니다.
SDKMAN!
script: 5.18.2
native: 0.4.2
> sdk l java
"sdk l java" 를 입력한다면 위와 같이 사용 및 설치가 가능한 JDK 리스트가 출력됩니다. 너무 많은 종류에 당황하지 마시고 Version과 Identifier만 주의해서 봐주세요.
전 아마존에서 제작한 Corretto OpenJDK를 설치하겠습니다.
그 중에서도 버전 17에서 가장 높은 버전인 17.0.8 버전을 설치하겠습니다. 해당 버전을 설치하기 위해 Identifier를 사용해야합니다. 해당 Identifier를 기억하거나 복사해주세요.
> sdk i java 17.0.8-amzn
"sdk i java 17.0.8-amzn"를 입력하여 설치를 진행합니다.
"sdk {명령어} {SDK} {identifier}" 구조를 사용한다고 생각하면 쉽습니다. 위에서 목록을 보기위해 사용한 명령어는 l(list)였고 지금은 i(install)입니다. "sdk" 만 입력하면 SDKMan 의 사용법이 간략히 소개됩니다. 궁금하신 분들은 해당 명령어를 입력해주세요.
정상적으로 설치되었는지 "sdk l java" 명령어를 사용하여 다시 목록을 출력해봅시다.
> sdk l java
보시면 설치한 버전의 Use, Status에 각각 사용여부와 상태가 나오고 있는걸 확인할 수 있습니다.
Status는 현재 해당 JDK가 설치되어있음을 나타내고 Use는 현재 선택되어 있는 JDK는 해당 버전이라는 것을 나타냅니다.
아래 명령어를 통해 java가 정상적으로 설치되었음을 확인합니다.
> java --version
openjdk 17.0.8 2023-07-18 LTS
OpenJDK Runtime Environment Corretto-17.0.8.7.1 (build 17.0.8+7-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.8.7.1 (build 17.0.8+7-LTS, mixed mode, sharing)
> sdk l kotlin
현재 Kotlin 언어 관련 릴리스는 Jetbrains 에서만 진행하고 있어 다른 벤더사들 없이 버전만 존재하는걸 볼 수 있습니다. 가장 최신버전인(2023-08-21 기준) 1.9.0을 설치하겠습니다.
> sdk i kotlin 1.9.0
정상 설치가 되었다면 아래 명령어들로 SDKMan과 kotlin 버전을 출력해봅니다.
> sdk l kotlin
> kotlin -version
Kotlin version 1.9.0-release-358 (JRE 17.0.8+7-LTS)
이렇게 되었다면 일단 환경 구성은 완료되었습니다. 이제 개발자들이 지겹도록 하는 Hello World를 코틀린으로 출력해보겠습니다.
먼저 프로그램 작성 전 kotlinc와 kotlin 실행방법을 설명하겠습니다.
예제만 시도해보실 분은 해당 내용을 패스하셔도 좋습니다.
# 폴더를 생성합니다.
> mkdir kotlin-hello-world
# 해당 폴더로 이동합니다.
> cd kotlin-hello-world
> vi HelloWorld.kt
// HelloWorld.kt
fun main() {
println("Hello World")
}
# 현재 경로에 존재하는 프로그램 출력
> ls
HelloWorld.kt
코드가 간결하지 않나요?
지금은 해당 프로그램이 어떻게 작동하는지 몰라도 무방합니다.
여러분이 작성한 이 내용은 단순하게 Hello World라는 문자열을 출력하는 프로그램입니다.
> kotlinc HelloWorld.kt
> ls
HelloWorld.kt HelloWorldKt.class META-INF
"kolinc {파일명}" 의 명령어를 통해 HelloWorldKt.class 파일이 생성되었습니다.
META-INF는 우리가 만든 프로그램의 메타데이터 입니다. 메타데이터란 어떤 목적을 가지고 만들어진 데이터를 뜻합니다.
우리가 만든 메타데이터(컴파일 시 자동으로 생성됩니다.)는 우리가 작성한 main 이라는 함수가 어느 class에 있는지, 해당 프로그램의 보안 정책, 컴포넌트 정보 등등...프로그램의 정보를 가지고 있습니다.
지금 진행하고 있는 예제에선 그냥 이런게 있구나, 라고 생각하시고 넘어가주세요.
> kotlin HelloWorldKt.class
Hello World!
정상적으로 Hello World가 출력되는 모습을 볼 수 있습니다!
JAR(Java Archive)란 여러개의 클래스 파일과 해당 클래스들이 이용하는 리소스 그리고 앞서 잠깐 살펴봤던 META-INF와 같은 메타데이터를 한데 모아 만든 파일입니다.
라이브러리를 배포하거나 자바 애플리케이션을 배포하고 구동하기 위해선 우리의 프로젝트를 JAR 형태로 만들어 실행하여야 합니다.
하지만 저희가 만든 Hello World는 고작 main 파일 하나 있는 애플리케이션입니다. kotlinc 를 이용해 이런식으로 JAR 파일을 만들 수 있구나 하는 생각으로 해당 예제를 진행해주시면 감사하겠습니다.
> rm -r META-INF
> rm HellowWorldKt.class
> ls
HelloWorld.kt
> kotlinc HelloWorld.kt -include-runtime -d HelloWorld.jar
> ls
HelloWorld.jar HelloWorld.kt
먼저 kotlinc 부터 하나하나 뜯어보겠습니다.
> java -jar HelloWorld.jar
Hello World
정상적으로 실행되는 모습을 볼 수 있습니다.
마지막으로 kotlinc의 다양한 옵션들에 대해 추가로 알아보겠습니다.
먼저 긴 글 읽어주셔서 감사합니다. 내용 중 운영체제나 프로세서의 차이로 예제가 진행되지 않을 수 있습니다. 그런경우 최상단에 표시된 이메일로 통해 제보주시면 최대한 도움을 드리겠습니다.
이 글을 통해 우리는 앞서 말씀드렸듯이
1. Kotlin 은 무엇인지?
2. Kotlin의 언어적 특성
3. Kotlin의 언어 외적인 특징
4. Apple Silicon Mac 에서 SDKMan을 활용하여 Kotlin 개발환경구성
5. Kotlin으로 Hello World 애플리케이션을 만들고 컴파일 후 구동
에 관한 내용들을 전부 알 수 있었습니다.
다음 글은 예제를 통하여 Kotlin의 언어가 어떤 방식으로 구동되는지에 대해 살펴볼 예정입니다.
또한 kotlinc 를 사용하는 예제에서 사용된 -include-runtime 옵션에 대한 자세한 설명은 추후 다른 게시글로 풀 수 있도록 해보겠습니다.
원 글 : limc.dev