코틀린

코틀린을 사용하는 이유

rotomoo 2025. 12. 19. 14:00

Kotlin은 왜 만들어졌는가?

젯브레인은 스프링 개발자가 자주 사용하는 인텔리제이를 만든 회사이다.

젯브레인은 기존의 자바가 가진 생산성 한계를 극복하기 위해 코틀린 프로그래밍 언어를 만들었다.

 

자바가 가진 생산성 한계가 무엇일까?

예시를 통해 알아보자.

 

백준 1157 문제이다.

자바코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine().toUpperCase(); // 대문자 변환
        int[] count = new int[26];

        // 1. 빈도수 계산 (Loop 1)
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'A']++;
        }

        int max = -1;
        char answer = '?';

        // 2. 최댓값 찾기 및 중복 체크 (Loop 2)
        for (int i = 0; i < 26; i++) {
            if (count[i] > max) {
                max = count[i];
                answer = (char) (i + 'A');
            } else if (count[i] == max) {
                answer = '?';
            }
        }
        System.out.println(answer);
    }
}

자바는 30줄이 필요하지만

파이썬코드

s = input().upper() # 입력받고 대문자로

c = max(set(s), key=s.count) # set(s)에서 가장 많이(count) 등장하는 글자를 찾아라

print('?' if s.count(c) > 1 else c) # 최댓값이 여러 개인지 확인 후 출력

파이썬은 3줄이면 끝난다.

코틀린코드

fun main() {
    // 1. 입력받고 대문자 변환 후, 문자별 개수 카운팅 (Map<Char, Int> 반환)
    val counts = readln().uppercase().groupingBy { it }.eachCount()
    
    // 2. 가장 많이 등장한 횟수(Max Value) 찾기
    val maxCount = counts.maxOf { it.value }
    
    // 3. 최댓값을 가진 문자들만 필터링
    val maxChars = counts.filter { it.value == maxCount }
    
    // 4. 결과 출력 (2개 이상이면 ?, 아니면 그 문자)
    println(if (maxChars.size > 1) "?" else maxChars.keys.first())
}

코틀린은 6줄이면 된다.

자바가 int[] 선언하고 for문 돌면서 로직을 짜거나 stream().max() 등의 처리를 길게 해야된다면

코틀린은 직관적인 함수명으로 더 가독성 좋게 해결해준다.

 

그럼 3줄 사용하는 파이썬 쓰면 되는거 아닌가 생각할 수 있다.

 

하지만 코틀린은 100% 자바와 상호 운용된다.

컴파일시 .class 바이트코드를 생성하기 때문에 JVM은 같은 언어로 인식한다.

 

위처럼 언어 설계,

NPE(Null Pointer Exception) 방지,

비동기 프로그래밍 코드 복잡성 해결 (코틀린의 꽃 코루틴, Coroutine)

등을 지원하여

자바 개발자가 겪는 고통을 줄이는 데 집중하며

기존 자바 생태계(라이브러리, 프레임워크)를 버리지 않고 그대로 사용하면서 더 나은 자바 가 되는것을 목표로 했다.

 

수많은 JVM 언어 중 Kotlin이 선택받는 이유

Groovy, Scala, 클로저(Clojure), Kotlin

이중 Kotlin이 선택받는 이유를 예시를 통해 알아보자

 

Groovy 코드

def calculate(val) {

    pritln "Calculating..." 

    return "100" * 10 
}

MethodMissingException

컴파일 시점에 에러를 못 잡고 (pritln 오타, 문자열에 숫자를 곱함)

컴파일에 성공하여

런타임에 서버 장애가 발생한다. (MethodMissingException)

 

Scala 코드

implicit val x = 1000

def plus(y: Int)(implicit z: Int) = y + z

println(plus(100)(200)) // 300 출력

println(plus(100)) // 1100 출력

Scala에는 임플리싯(implicit)이라는 암시적 변환이 있다.

implicit 키워드를 통해 선언한 값이 존재할 때 그 값을 쓰게 된다.

그만큼 디버깅 하기가 복잡하고 어려워 러닝커브가 있다.

 

클로저(Clojure) 코드

(defn hello [name]
  (str "Hello, " name))

그냥 자바랑 너무 다르다.

 

코틀린

fun hello(name: String) = "Hello, $name"

println(hello("Kotlin"))  // Hello, Kotlin 출력

자바랑 비슷하다.

 

 

코틀린을 사용하는 이유는 자바를 대체하기에 가장 적합하기 때문이다.