[내일하이] Kotlin 웹 마스터:Java에서 함수형까지, 실무형 웹 마이그레이션 완전 정복#01 Java와 Kotlin, 변수

부트챌린지/내일하이:Kotlin 웹마스터
2026.07.20
반응형

 

오늘(7/20)부터 시작하는 Kotlin 부트챌린지. 내일하이에서 진행하는 것으로, 총 22차시까지 있는 커리큘럼이다. 왜 이걸 하게 되었냐면 최근 Kotlin을 쓰는 기업도 많이 늘어났기 때문일 것이다. 실제로 Java에서 Kotlin으로 마이그레이션 하는 경우가 많이 늘었다고 한다. 그거 외에도 앱 언어를 쓸 수 있으면 만들 수 있는 게 늘어나니까도 있다. 실리적인 부분 외에도 개인적인 욕심도 있어서 듣게 된 게 맞다.

 

이번 수업에서는 간단히 왜 Kotlin이 만들어졌는가와 Kotlin의 변수체계에 대해서 배웠다.

 

 

Kotlin이란

Kotlin은 JetBrains에서 만든 프로그래밍 언어로, JVM을 기반으로 동작하는 Java 대체 언어라고 할 수 있다. Java의 코드 복잡성이나 `NullPointerException`으로 인한 Null 불안정성을 보완하기 위한 언어로, 2011년에 발표되었다. 본래는 스칼라Scala라고 하는 언어가  유력한 대안으로 검토되었지만, 문법 복잡성과 느린 컴파일 속도, Java와의 불완전한 호환성으로 인해 대체된 게 바로 이 Kotlin이다. 이후 구글에서 Android 시스템의 공식 언어로 발표함에 따라(2017년), 현재 Android 기반 앱 개발은 Kotlin으로 이루어지고 있다.

 

즉, 본래 Java의 한계인 복잡한 코드를 간단하게 했다는 장점이 있는데, Java를 쓴 사람들은 알겠지만 Java는 굉장히 정적인 언어로 엄격한(strict) 편인데, 장점으로는 높은 안정성과 뛰어난 유지보수성, 대규모 데이터처리 등이 있었다. 그러나 컴퓨터 성능이 발달됨에 따라 이런 장점보다 복잡하여 개발 기간이 길어지고 알아보기 어렵다는 단점이 더 부각되게 되었다. 이에 따라 Java도 Lombok 같은 플러그인(라이브러리)을 통해서 간편화할 수 있었지만, 이건 어디까지나 플러그인의 설치지 언어 그 자체가 간편해진다는 건 아니었다.

 

Java의 언어 특징에 대해서는 다음 포스트에 자세히 정리해두었다.

 

[Java 풀스택 개발자] Java의 용어와 개념: 낯선 Java를 친숙하게 만들어보자!

 

[Java 풀스택 개발자] Java의 용어와 개념: 낯선 Java를 친숙하게 만들어보자!

0. 들어가기에 앞서본래는 특별편인 React 실전으로 먼저 만나려고 했다. 그러나 생각보다 만들려던 것의 규모가 커지면서 다음 기회에 포스팅하게 되었다. 따라서 이번 주는 한국의 백엔드 중심

bbbbabbbababababa.tistory.com

 

이러한 복잡성에 대해서는 다음과 같은 코드를 참조해보자. 

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    @Override
    public boolean equals(Object o) { /* ... 생략 ... */ }
    @Override
    public int hashCode() { /* ... 생략 ... */ }
    @Override
    public String toString() { return "User{name='" + name + "'}"; }
}

 

data class User(var name: String, var age: Int)

 

위는 Java, 아래는 Kotlin이다. Java에서 사용한 `Getter`와 `Setter` 등의 복잡한 과정을 Kotlin에서는 `data class` 를 통해 바로 해결할 수 있게 되었다.

 

그리고 `NullPointerException` 문제가 있었다. `Null` 상태인 것을 참조하거나 하려 할 때 오류가 나는 문제인데, 이게 컴파일할 때는 안 나타나는 문제가 있던 것이다. 이에 따라 Kotlin은 아예 `Null`을 틀어막아버려 해결을 했는데, nullable과 Not Null이라는 두 가지 속성으로 나눈다. nullable은 말 그대로 null일 수도 있는 값을 다루는 것으로, 이에 대한 안전 기호까지 만들어 `NullPointerException`을 해결했다.

 

이러한 안전 기호로는 `?.`과 `?:` 두 가지가 있는데, 전자는 Null이 아니라면 실행하고, 아니라면 무시한 뒤 Null을 반환하는 안전 호출 연산자이고, 후자는 Null일 경우 다음과 같은 default 값으로 사용하라는 엘비스 연산자이다.

예를 들어 `println(email?.length)`와 같은 코드가 있을 경우, email이 null일 경우 오류를 반환하지 않고 그냥 null 상태로 사용한다. 아니면 `val userEmail = email ?: "이메일 없음"`와 같은 코드가 있다면, email이 null이면 "이메일 없음"을 대신 출력한다. 전자의 경우 React를 해봤으면 조금은 익숙할지도 모르겠다. 옵셔널 체이닝과 정확히 같은 동작 방식이다.

 

여기까지가 Kotlin이 가지는 장점에 대해서 알아보았는데, 물론 단점도 있다. 대표적으로 긴 컴파일 시간이 있고, 그 다음으로는 Java와 다른 문법으로 인하여 새로이 언어를 배워야한다는 점이다. 새로운 언어를 배운다는 건 개발자에게는 어려운 일이 아닐 수 없으며(외국어를 새로 배우는 것보다는 쉽겠지만 비슷하긴 할거다!), 이에 대해 부담을 가질 수도 있다. 이에 따라 유의하면서 들어보는 게 좋아보인다.

 

 

Kotlin의 변수

먼저 Kotlin은 자료형을 앞에서 명시하지 않는다. `변수명:자료형(타입)` 형태의 변수가 되는데, 그러면 앞에 키워드는 뭘 붙이냐 싶을 것이다. 바로 `var`과 `val`이다. `val`을 먼저 보면 `var`의 오타 같기도 한데, `value`(값)의 준말이다. 이건 Java에서 사용한 `final` 선언 변수와 사용이 동일하며, 읽기 전용이라고 할 수 있다. 재할당, 재선언이 불가능하다. 반대로 `var`는 `variable`의 준말이므로 일반 변수와 비슷하다고 할 수 있다.

 

재미 있는건 Kotlin은 선언된 타입을 추론하고, 그것으로 형 고정을 하는데, 이건 var도 val도 마찬가지이다. `var`의 경우도 함부로 int(정수형)으로 고정된 변수를 String으로 수정할 수 없다. 또한 선언만 하고 후에 할당을 할 예정이라면 그때는 `var str:String`과 같이 선언해주어야 한다.(`val`의 경우에도 선언만 하고 후에 할당이 가능하다. 물론 1회만.) 무슨 타입도 담고 싶다면 `:Any`로 Any 타입을 선언하는데, Java의 `Object`와 같은 역할을 한다고 볼 수 있다.

 

또한 변수 등을 가져오려면 문자열 템플릿(`$`) 형태로 가져오면 된다. 수식 등을 사용하게 된다면 `${name}` 처럼 사용하게 된다. 이런 부분이 JS와 비슷한 게 재미있다고 생각했다. 또한 multiple Line을 지원한다.

 

    fun main() {
    // Kotlin에서는 main을 선언할 때 fun main(){} 형태로 선언한다.
    // fun main(vararg args: Array<String>){} 처럼 사용도 가능하지만 보통은 생략한다.
    
        val multiLine = """
            Hello,
            This is a multiline String.
            No need for escape characters like \n.
            Variables like Kotlin can be used here too.
            Complex expressions: ${2 + 2} = 4
        """.trimIndent()

        println(multiLine)
    }

 

`"""`으로 감싸 사용함으로써 여러 줄의 글을 쓸 수 있고, 당연히 문자열 템플릿도 지원한다. 여기서 `trimIndent()`는 좌측에 Indent(들여쓰기)를 잘라낸다는 의미다.

 

좌측이 trimIndent() 적용, 우측이 미적용이다. 보다시피 제거할 경우 우측처럼 들여쓰기가 적용된다.

 

 

여기까지 오늘은 간단하게 Kotlin의 특징과 간단한 변수 체계에 대해서 알아보았다.

반응형
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31