#kotlin

코틀린 기초

1jeongg 1jeongg Follow 2024년 02월 15일 · 3 mins read
Share this

01. 코틀린이란 무엇이며, 왜 필요한가?

코틀린은 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하기 위해 만들어진 언어이다.

코틀린의 특성

  • 자바가 실행되는 모든 곳에서 사용될 수 있다.
  • 정적 타입 지정 언어 -> 성능, 신뢰성, 유지 보수성, 도구 지원에 좋음
    • 타입 추론
    • ⭐ 널이 될 수 있는 타입 (nullable type) 지원
  • 함수형 프로그래밍, 객체지향 프로그래밍
    • first-class 함수
    • 불변성
    • 부수효과 없음
  • 실용성, 간결성, 안전성, 상호운용성

02. 코틀린 기초

문(statement)과 식(expression)

식은 값을 만들어 내며 다른 식의 하위 요소로 계산에 참여할 수 있음

문은 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하며 아무런 값을 만들지 않음

if

  • Kotlin - expression
  • Java - statement

대입문

  • Kotlin - statement
  • Java - expression
  • 블록이 본문인 함수
      fun max(a: Int, b: Int): Int {
          if (a > b) return a
          else return b
      }
    
  • 식이 본문인 함수
      fun max(a: Int, b: Int) = if (a > b) a else b
    

스마트 캐스트

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Expr, val right: Expr) : Expr

fun eval(e: Expr): Int {
    if (e is Num){
        // 여기서 Num으로 타입을 변환 (불필요한 중복)
        val n = e as Num
        return n.value
    }
    if (e is Sum){
        // 변수 e에 대해 스마트 캐스트를 사용
        return eval(e.right) + eval(e.left)
    }
    throw IllegalArgumentException()
}

코틀린의 is는 자바의 instanceof와 비슷하다.
하지만 자바에서 어떤 변수의 타입을 instanceof로 확인한 다음에 그 타입에 속한 멤버에 접근하기 위해서는 명시적으로 타입 캐스팅해야 한다.

코틀린에서는 컴파일러가 캐스팅을 해준다.
어떤 변수가 원하는 타입인지 일단 is로 검사하고 나면 굳이 변수를 원하는 타입으로 캐스팅하지 않아도 마치 처음부터 그 변수가 원하는 타입으로 선언된 것처럼 사용할 수 있다.

-> 스마트 캐스트

03. 함수 정의와 호출

코틀린의 함수

  • 자신만의 컬렉션 기능을 제공하지 않는다.
  • 빈 파일의 최상단에 함수만 선언할 수 있다. 컴파일러가 이 파일을 컴파일할 때 새로운 클래스를 정의해주기 때문이다.
  • 확장 함수는 클래스 밖에 선언되며 오버라이드할 수 없다.

컬렉션 처리

  • vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있다.
      fun main(args: Array<String>){
          // 스프레드 연산자가 배열의 내용을 펼쳐준다.
          val list = listOf("args: ", *args)
          println(list)
      }
    
  • infix(중위) 함수 호출 구문을 사용하면 인자가 하나뿐인 메서드를 간편하게 호출할 수 있다.
      infix fun Any.to(other: Any) = Pair(this, other)
    
  • destructuring declaration(구조분해선언)을 사용하면 복합적인 값을 분해해서 여러 변수에 나눠 담을 수 있다.
      val (number, name) = 1 to "one
    


1jeongg
Written by 1jeongg Follow

I'm studying Android development by Kotlin and Spring by Java