개요
자바로 개발자로 짧은 시간을 보내면서 느낀 점은, 자바는 수많은 미움?을 받고 있다는 것이다. 아직 살면서 자바 좋다는 사람 못 봤다. 나는 솔직히 자바라는 프로그래밍 언어에서 큰 불편함을 느낀 적이 없어서 (C로 입문해서 그럴지도?) 별 생각이 없었는데, 최근 코틀린과 자바를 비교하는 말들이 많아진게 느껴졌다.
코틀린 한 번 쓰면 자바로 돌아갈 수 없다는 말이 진짜인지, 직접 코틀린을 사용해보고 확인해보자 🚀
코틀린 등장 배경
의외로 코틀린은 자바의 단점을 개선하기 위해, 또는 자바의 대체품으로 등장한 언어는 아니다. 위키백과를 참고했을 때, 코틀린의 목적은 스칼라만큼 많은 기능을 제공하면서, 자바만큼 빠르게 컴파일하는 것이라고 봐도 무방할 듯 하다.
코틀린이 현재까지 제공하는 기능들의 특징은 다음과 같다.
특징 | 설명 |
멀티 플랫폼 | JVM, JS, Native 등 다양한 플랫폼에서 실행할 수 있다. |
Null 안정성 | 타입 시스템을 이용해 컴파일 단계에서 NPE를 방지할 수 있다. |
함수형 프로그래밍 | 함수를 변수에 저장하거나, 함수를 매개변수로 전달할 수 있다. |
객체지향 프로그래밍 | 클래스, 상속, 인터페이스 등의 객체 지향 개념을 사용할 수 있다. |
정적 언어 | 컴파일 단계에서 자료형을 검사하고 확정하는 특성을 갖는다. |
간결한 문법 | 간결하고 쉬운 문법으로 코드를 작성할 수 있다. |
Java 상호 운용성 | 기존 Java 코드를 그대로 사용하거나, Java 코드에서 코틀린 코드를 호출할 수 있다. |
위의 특징들을 정리해보았을 때, 자바의 대체품으로 코틀린이 자주 언급되는 이유는 자바의 번거로운 문법을 간단하게 줄여줄 수 있으며, 자바의 고질병인 NPE를 좀 더 유연하게 컨트롤할 수 있기 때문이라고 생각된다.
Mac OS 환경에서의 코틀린 설치
코틀린 공식 문서의 코틀린 설치 파트를 확인하면, IntelliJ와 Android Studio에 코틀린이 포함되어 있으니 그 친구들을 설치하라고 한다. 코틀린 유저의 대부분이 해당 IDE를 사용할 것 같긴 하지만, 해당 포스팅에선 homebrew를 이용한 설치 방법도 추가로 알아보려 한다.
⚡️ 필수 조건 ⚡️
1. Homebrew가 설치 되어 있을 것
2. JDK가 설치 되어 있을 것
코틀린은 JVM 위에서 동작하는 언어이기 때문에, JDK를 설치해야만 동작할 수 있다. jdk 또한 homebrew로 설치할 수 있지만, m1과 intel 칩의 homebrew 설치 경로가 달라서 종종 충돌이 발생하는 것 같아 난 그냥 다운받아 쓰는 편이다. 이쪽이 더 빠르기도 하다 🙃
위의 두 조건이 충족되었다면 나머지는 간단하다. 터미널을 열고 아래 명령어를 입력한다.
brew install kotlin
성공적으로 설치가 완료되었다면 아래 명령어를 이용해 버전을 확인할 수 있다.
와! 코틀린 설치하기 타이어보다 싸다! 👍
Hello World! (vs Java)
프로그래밍 언어를 배우면 항상 제일 먼저 해보는 헬로 월드 출력하기를 코틀린과 자바로 각각 작성해보자.
Hello world
Java.ver
public class Main {
public void main(String[] args) {
System.out.println("Hello World!");
}
}
Kotlin.ver
fun main(args: Array<String>) {
println("Hello World!")
}
확실히 한 눈에 보니 코틀린의 문법이 간결하다고 하는지 알겠다. Java의 경우, 클래스와 메서드를 작성해야 하고 print 함수 자체도 길어서 보일러 플레이트가 꽤 긴 편이다.
하지만 코틀린의 경우, fun을 이용해 함수를 정의해주기만 하면 된다. print 함수도 훨씬 짧고 세미콜론도 생략 가능해 코드 양 자체가 많이 줄어든 것을 확인할 수 있다.
Variables
Java.ver
자바의 변수 선언 방법은 기본적으로 <자료형> <변수명> = <초기값>; 형태를 갖는다.
int number = 1;
Java 11 부터는 지역 변수에 대한 타입 추론을 기반으로 자료형을 할당할 수 있는 로컬 변수 유형 추론 기능인 var 키워드가 도입되어 아래처럼 사용할 수 있게 되었다.
var number = 1; // 타입 추론에 의해 int로 추론된다
Kotlin.ver
코틀린엔 두 가지의 변수 선언 방법이 있다. JS 사용자에겐 익숙할 val와 var이다.
var number = 1 // 가변 변수
number = 2 // 변수에 할당된 값을 변경 가능
val number2 = 1 // read-only 변수
number2 = 3 // Val cannot be reassigned 에러
공식 문서에 따르면, 모든 변수는 기본적으로 read-only 타입인 val로 선언하기를 추천하며 var은 필요할 때만 사용하라고 한다. 이는 Java에서 모든 변수에 final을 붙이는 케이스를 생각해보면 이해할 수 있다.
val은 Java로 따지면 final이 붙은 var이다. 즉 변경할 수 없는 불변 변수이기에 멀티 스레드 환경에서 동기화를 보장할 수 있으며, 함수형 프로그래밍의 핵심 원칙도 만족할 수 있다.
이런 점을 고려했을 때, 일반적인 메서드 모습을 다음과 같이 표현할 수 있다.
Java의 변수 선언에 final 키워드까지 붙인 모습을 봤을 때, 마찬가지로 코틀린에서의 물리적인 코드 양이 확연히 줄어듬을 확인할 수 있다.
String templates
Java.ver
final int customers = 10;
System.out.println("There are " + customers + "customers");
// 또는
final String message = String.format("There are %d customers.", customers);
System.out.println(message);
자바는 문자열 템플릿 기능을 제공하지 않는다. 따라서 문자열 중간에 변수를 출력하기 위해 + 연산자를 이용하거나, String.format을 이용한다.
String name = "John";
int age = 30;
String message = """
My name is %s
and I am %d years old.
""".formatted(name, age);
chatGPT에게 물어보니, Java15 부터는 text blocks 기능을 이용해 위와 같이 문자열 조합이 가능하다고 한다. 하지만 그닥 편리해보이진 않는다 🤔
Kotlin.ver
val customers = 10
println("There are $customers customers") // 10
println("There are ${customers + 1} customers") // 11
반면 코틀린은 문자열 템플릿 기능을 제공한다. 템플릿 표현식을 이용해 변수 또는 objects에 저장된 값에 접근하고 이를 문자열로 변환할 수 있다.
방법은 위 코드 블럭과 동일하게 $ 키워드를 이용하면 되며, 만약 템플릿 표현식 안에서 변수 값을 다르게 표현하고 싶다면 ${}를 이용해 코드를 작성하면 된다.
사실 Java 프로그램을 작성할 때, 디버깅이나 로그 목적이 아니라면 출력 기능을 이용할 일이 별로 없긴 하다. (저는 그랬습니다ㅎ) 평소 slf4j를 이용해 log를 찍는 방식으로 개발하다보니 문자열 템플릿의 필요성을 크게 느끼지 못했는데, 이번 포스팅을 작성하며 System.out.println을 사용해보니 확실히 입출력 기능을 많이 사용해야 하는 경우엔 코틀린의 문자열 템플릿 기능이 유용할 것 같다.
마무리
이번 포스팅에선 코틀린의 등장 배경과 특징에 대해 알아보고, 기본적인 문법에 대해 공부했다. 아주 기본적인 문법만 알아보았는데도 코틀린이 추구하는 간결한 문법이 어떤 의미인지 대충 이해가 가더라..! 코틀린 써보면 자바로 못 돌아온다는 의미는 다시 저 많은 코드 양을 하나하나 입력할 수는 없다는 의미일지도 모르겠다.
다음 포스팅에선 타입과 컬렉션, 함수와 널 안정성 등 본격적인 코틀린 문법을 공부해보려고 한다. 최종 목표는 자프링과 코프링으로 동일 기능 개발해보기! 코틀린 책도 한번 읽어봐야겠다 😎
레퍼런스
- 코틀린 공식 문서 : https://kotlinlang.org/docs/home.html
- 코틀린 탄생 배경 : https://juyeop.tistory.com/3
'Develop > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린을 쌈싸먹어 보자 (2) - 계산기 프로그램 만들기 (1) | 2023.07.08 |
---|