코틀린을 좋아하는 이유

김민중·2024년 7월 14일
0

들어가기 전,,

내가 처음으로 개발을 한 소프트웨어는 "안드로이드 앱"이다. 이때 접한 언어가 "Koltin"이다. 처음에는 아무생각 없었지만, 지금은 다른 언어보다 kotlin이 좋다.

그럼 나는 왜 kotlin이 좋은걸까,?

많이 생각을 해봤고 나름 결론이 났다. 바로 다음과 같다.

  • Null Safe
  • 하나의 언어처럼 읽히는 코드
  • 함수형 프로그래밍

Null Safe

내가 kotlin을 사용하면서 가장 크게 느낀 특징은 바로 Null Safe이다. Null Safe란 쉽게 말해서 NullPointerException과 같이 Null참조의 멤버에 액세스하면 발생하는 에러에 대응하는 것이다.

NullPointerException은 개발하면서 가장 많이 발생하는 에러 중 하나이다. kotlin은 이러한 에러에 대응하기 위해 타입을 명확히 한다.

아래 자바 코드를 보자

String str = "hello";
String str =null;

코드를 보면 알겠지만 str에는 null이 들어갈 수 있다. 즉, 컴파일 단계에서 str이 null인지 잡아내지 못하기 때문에 휴먼에러가 발생할 수 있다.

하지만 코틀린에서는 아래코드와 같이 nullabler과 non-nullable타입을 구분한다.

val str:String = "hello"
val str:String? = null

이런식으로 타입만 보더라도 nullable한지 알 수 있기 때문에 컴파일 단계에서 잡을 수 있고 개발자는 명확히 코드를 작성할 수 있다. 그래서 NullPointerException을 줄일 수 있다.

하나의 언어처럼 읽히는 코드

아래 자바 코드를 보자

try {
    int number = Integer.parseInt(str);
    System.out.println(number);
} catch (NumberFormatException e) {
    System.out.println("Error: The string \"" + str + "\" is not a valid integer.");
}

해당 코드는 str가 int로 변환할 수 있는 String일 경우 변환을 하는 코드이다. 물론 이걸 함수로 따로 만들어서 가독성 있게 만들 수 있지만 java자체에서는 제공하지 않는다.


그럼 똑같은 코드를 kotlin으로 작성해보자

try {
    val number = str.toIntOrNull();
    System.out.println(number);
} catch (NumberFormatException e) {
    print("Error: The string \"" + str + "\" is not a valid integer.");
}

위 코드에서 val number = str.toIntOrNull() 부분을 보면 toIntOrNull()이라는 메소드 이름만 읽더라도 무슨 기능을 하는 지 단번에 이해가 된다.

java : int number = Integer.parseInt(str);
kotlin : val number = str.toIntOrNull();

클린코드 입장에서 보더라도 코틀린코드가 훨씬 더 가독성이 좋다. 마치 하나의 언어처림 읽힌다.

함수형 프로그래밍

kotlin은 함수형 프로그래밍을 지원한다.
거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.
즉, 함수를 변수처럼 사용할 수 있고, 파라미터로도 받고 할 수 있는 것이다.

아래 코드를 보자. 이 코드는 람다식을 활용해서 변수에 함수를 할당하고 있다. 즉, 함수를 변수처럼 사용할 수 있다.

	val printStr = { text: String -> println("$text") }





또한 apply, with등등 함수 호출 범위내에 수신 객체를 사용할 수 있다.
아래코드를 보면 with를 사용하는 예시이다.

	val person: Person = getPerson()
	with(person) {
    	print(name)
	    print(age)
    }

즉, 함수를 호출하면 범위지정내에 수신 객체가 전달이 되어 마치 하나의 필드처럼 사용할 수 있다.

만약 위 코드를 자바에서 작성했다면 다음과 같을 것이다.

	Person person = getPerson();
    
    print(person.getName());
    print(person.getAge());

결론

위에서 따로 언급은 안했지만 kotlin은 java랑 100% 상호운용이 된다. java에서 지원하는 모든 것들을 kotlin에서 사용할 수 있고, 코드도 짧으며, kotlin에서만 제공하는 편리한 메소드도 많다.

예를 들어 java에서는 getter, setter를 만들어야 한다면 kotlin은 자동으로 생성해주기에 getter, setter를 따로 만들지 않아도 된다.

이런 자잘한 부분들이 개발자의 피로를 많이 덜어주는 거 같다. 그리고 "kotlin스럽게" 작성한다면 하나의 언어를 읽는 것처럼 가독성도 좋아진다. 마치 toIntOtNull() 처럼 말이다.

profile
개발블로그

0개의 댓글