[Kotlin] Kotlin 기초 - 변수,타입,연산자

easyone·2026년 5월 17일

Kotlin

목록 보기
4/4
post-thumbnail

자바 개발자를 위한 코틀린 입문
해당 강의를 듣고 작성하였다.

안드로이드,스프링에서 코틀린을 많이 사용하게 되었는데, 자바랑 비슷한 것 같다가도 너무 다른 것 같은데 지식 없이 사용하자니 어떤 실수를 하는지도 모르는 것 같아서 빠르게 기초를 공부하고자 한다.

변수

  • var, val이 있는데 val을 주로 사용한다. final 같은 느낌이다.

  • 객체는 new 없이 생성 가능하다.

Null

  • **Safe Call**: null이 아닌 경우에만 호출한다. ?.로 호출하면 null이면 null을 반환한다.

  • **Not-null assertion**: null이 절대 아니라면 !!로 단언 가능하다. null이라면 NPE를 던진다.

  • **엘비스 연산자**: ?:null이라면 이 값으로 정의한다. 즉 null일 때만 호출된다.

  • ****?.let { }****: null이 아닐 때만 블록을 실행한다.

  • **플랫폼 타입**: 코틀린이 null 관련 정보를 알 수 없는 타입은 exception이 날 수 있다. 자바 코드 사용 시 유의한다.

  • null 검사를 한 번 하면 non-null임을 컴파일러가 알 수 있다.

Type

기본 타입

  • 기본값을 보고 타입을 추론한다. L이 붙으면 Long, f가 붙으면 Float이다.

  • 코틀린에서 타입 변환은 명시적으로 이루어져야 한다. 자바는 암시적으로 큰 타입으로 자동 변형되지만, 코틀린은 타입이 안 맞으면 에러가 난다. to변환타입()을 반드시 사용한다.

  • 결과를 타입 변환할 때 자바는 괄호를 사용하지만, 코틀린은 결과.to변환타입()으로 한다.

  • 변수가 nullable이면 적절한 처리가 필요하다.

타입 캐스팅

  • instanceOf 대신 is로 해당 타입인지 true/false를 반환한다.

  • value as Type: 괄호 대신 as로 타입 캐스팅한다. 타입이 아니면 예외를 던진다.

  • value as? Type: value가 해당 타입이 아니거나 null이면 null을 반환한다. 안전한 타입 형변환 방법이다.

  • **스마트 캐스트**: is를 통과했다면 as를 생략하고 바로 해당 타입으로 써도 된다. 컴파일러가 이를 기억하기 때문이다.

  • !isinstanceOf의 반대이다.

코틀린의 특이한 타입

  • Any

    - Java의 Object 역할로, 모든 객체와 모든 원시타입의 최상위 타입이다.

    - equals, hashCode, toString이 존재한다.

    - Any 자체는 null을 포함하지 못한다. 포함하려면 Any?로 쓴다.

  • Unit

    - Java의 void와 동일한 역할을 한다.

    - Unit은 그 자체로 타입 인자로 사용 가능하다. 제네릭 void를 하려면 Void를 써야 하는데, Unit은 그냥 쓰면 된다.

    - 코틀린의 Unit은 실제로 존재하는 타입이다.

  • Nothing

    - 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할을 한다.

    - 무조건 예외 반환하거나 무한 루프인 함수에 사용한다.

    - 잘 사용하지 않는다.

String interpolation / String indexing

  • ${변수}를 사용하면 값이 들어간다.

  • 자바에서는 String.format으로 문자열 포맷을 했어야 했다.

  • 단일 변수라면 중괄호를 생략할 수도 있다.

  • 그런데 변수 이름만 사용하더라도 ${변수}로 쓰는 것이 가독성, 정규식 활용, 통일성 측면에서 좋다.

  • 여러 줄에 걸친 문자열 작성 시 """ """.trimIndent()로 한다. 자바에서는 StringBuilderappend를 써야 했다.

  • 문자열에서 특정 문자 가져오기: 자바에서는 charAt을 사용했지만, 코틀린에서는 배열처럼 str[인덱스]로 가져온다.

연산자

  • **단항, 산술 연산자: 자바와 완전히 동일하다.

  • 비교 연산자와 동등성, 동일성

    - 비교 연산자는 사용법이 완전히 동일하다.

    - 객체에 비교 연산자를 사용하면 compareTo를 자동으로 호출한다. 자바는 무조건 compareTo를 직접 사용했어야 했다.

    - **동등성**: 두 객체의 값이 같은지를 본다.

    - **동일성**: 객체가 동일한지, 즉 주소가 같은지를 본다.

    - 코틀린에서는 동일성에 ===, 동등성에 ==를 사용한다. == 호출 시 간접적으로 equals를 호출해준다.

    - ==은 값 비교, ===은 주소까지 같은지를 본다.

  • **논리 연산자**: 자바와 동일하게 lazy 연산을 한다. or 연산 시 앞 내용이 true면 뒤를 수행하지 않고 바로 본문으로 이동하고, and 연산 시 앞 내용이 false면 수행하지 않고 바로 이동한다.

  • **코틀린의 특이한 연산자**

    - in / !in: 컬렉션이나 범위에 포함되어 있는지/아닌지를 본다.

    - a..b: a부터 b까지의 범위 객체를 생성한다.

    - a[i]: 특정 인덱스 i로 값을 가져온다.

    - a[i] = b: ib를 넣는다.

  • **연산자 오버로딩**

    - 코틀린에서는 객체마다 연산자를 직접 정의할 수 있다.

    - 자바에서는 객체 안 요소에서 연산자를 쓰려면 함수를 만들어야 했다. 코틀린에서도 함수를 정의하면 되지만, 한 번 정의하면 해당 연산자를 그대로 사용 가능하다. 대신 내부적으로 해당 연산의 함수가 호출되며, 연산마다 정해진 이름의 함수여야 한다.

profile
백엔드 개발자 지망 대학생

0개의 댓글