ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kotlin in action - 코틀린 기초
    공부/Kotlin 2021. 1. 3. 15:47

    Hello world!

    fun main(args: Array<String>) {
        println("Hello world!")
    }
    • 함수를 선언할 때 fun 키워드 사용.
    • 파라미터 이름 뒤에 타입을 선언.
    • 함수를 최상위 수준에 정의할 수 있다.
    • 배열 처리를 위한 문법이 따로 존재하지 않는다.
    • 코틀린 표준 라이브러리가 있어, 여러 자바 함수들을 간결하게 사용할 수 있게 wrapper 제공한다.
      • ex ) println (System.out.println 의 wrapper 함수)
    • 세미콜론을 붙히지 않아도 된다!

    함수

    fun max(a: Int, b: Int): Int {
        return if (a > b) a else b
    }
    • 리턴 타입을 파라미터 목록 뒤에 콜론으로 구분 후 선언

    문과 식의 구분

    • 코틀린에선 if 는 식이지 문이 아니다.
      • 식 : 값을 만들어 내며 다른 식의 하위 요소로 계산에 참여할 수 있다.
      • 문 : 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하며 아무런 값을 만들어내지 않는다.
    • 대입문은 자바에서는 식이었으나 코틀린에서는 문이 됐다.

    식이 본문인 함수

    • 위 함수를 아래처럼 간결하게 표현할 수 있다.
    • 본문이 식으로만 이루어진 경우 중괄호를 없애고 return을 제거하면서 등호를 식 앞에 붙이면 더 간결하게 함수를 표현할 수 있다.
    • 식이 본문인 함수인 경우 반환 타입이 생략 가능하다. > 타입 추론 이 가능하기 때문.
    fun max(a: Int, b: Int): Int = if (a > b) a else b

    변수

    • 코틀린에서는 타입 지정을 생략하는 경우가 흔하다.

    • 컴파일러가 초기화 식을 분석해서 초기화 식의 타입을 변수 타입으로 지정한다. (타입 지정 생략가능한 이유)

    • 초기화 식이 없다면, 반드시 타입을 지정해야함! > 초기화 식이 없으면 정보가 없기떄문에 컴파일러가 타입을 추론할 수 없다.

    • val(값을 뜻하는 value에서 따옴) - 변경 불가능한 참조를 저장하는 변수.

    • var(변수를 뜻하는 variable에서 따옴) - 변경 가능한 참조

    • 기본적으로는 모든 변수를 val 키워드를 사용해 선언하고, 나중에 꼭 필요할 떄만 var 로 변경하라! > 함수형 코드에 가까워지는 길

    • val 변수는 블록을 실행할 때 정확히 한 번만 초기화돼야 한다. 컴파일러가 한 초기화 문장만 실행할 수 있다면, 조건에 따라 여러 값으로 초기화 할 수 있다.

      val message: String
      if (isExample()) {
          message = "이곳에서 초기화 할 수도 있고"
      } else {
          message = "여기서도 초기화 할 수 있다."
      }
    • val 참조 자체는 불변일지라도 가리키는 객체의 내부 값은 변경될 수 있다.

      val languages = arrayListOf("Java")
      languages.add("Kotlin")
      println(lanauges) // [Java, Kotlin]
    • var 키워드는 값을 변경할 수 있지만, 타입은 고정되어 바뀌지 않는다.

      var answer = 42 // Int 형으로 타입 선언
      answer = "no answer" // 컴파일 오류 발생

    문자열 템플릿

    val language = "Kotlin"
    val languages = arrayListOf("Java")
    languages.add("Python")
    
    println("이 언어는 $language")  >> 이 언어는 Kotlin
    println("이 언어는 ${language}입니다.") >> 이 언어는 Kotlin입니다. // 뒤에 글자가 바로 붙어 구분이 어려운 경우 중괄호로 구분
    println("이 언어는 ${lanauges[0]}") >> 이 언어는 Java // 간단한 변수 이름이 아닌 경우. 이보다 더 복잡한 식도 가능하다.
    println("이 언어는 ${if (args.isNotEmpty()) args[0] else "Kotlin"}!") // 이렇게!!
    
    // 진짜 $ 를 출력하고 싶을땐?
    println("\$") >> $ 
Designed by Tistory.