2. [1] 기본요소: 함수와 변수

(1) Hello World

fun main(args: array<String>) { println("Hello World") }

해당 코드를 보고 알 수 있는 사실

  • 함수를 최상위 수준에 정의 가능
  • 자바와 달리 배열 처리를 위한 문법 존재 X
  • ;(Semicolon)의 불필요
  • 여러가지 표준 라이브러리 함수들의 간결화

(2) 함수

fun max(a: Int, b: Int): Int { return if (a > b) a else b }

Kotlin Statement와 Expression의 구분

문(Statement) 자신을 둘러싸고 있는 안쪽 블록의 최상위 요소로 존재함
아무런 값을 만들어 내지 않음  
Java의 일반적인 제어구조  
식(Expression) 값을 만들어내며, 다른 식의 하위 요소를 계산에 참여 가능
kotlin의 일반적인 제어구조  

[식이 본문인 함수]

fun max(a: Int, b: Int): Int { return if (a > b) a else b }
fun max(a: Int, b: Int): Int = return if (a > b) a else b
fun max(a: Int, b: Int) = if(a > b) a else b
  • Kotlin은 정적 타입 지정 언어이므로, 컴파일 시점에 모든 식의 타입을 지정해야 하며, 반환타입이 정해져야 한다.
  • 하지만, 식이 본문인 함수(등호와 식으로 이루어진 함수)의 경우에는 사용자가 타입을 적지 않아도, 컴파일러가 정해준다.
  • 반대로 블록이 본문인 함수는 반드시 반환 타입을 지정해야 하고, return 문을 사용하여 반환 값을 명시해야 함.

[IntelliJ 사용 시]

인텔리제이 IDEA 사용 시, 함수를 두 가지 방식으로 나누어서 변환할 수 있다.

  • Convert to Block Body : 분문이 중괄호로 이루어진 '블록이 본문인 함수' 로 변환
  • Convert to expression Body : 본문이 등호와 식으로 이루어진 '식이 본문인 함수'로 변환

(3) 변수

Kotlin에서는 키워드로 변수선언을 시작하는 대신, 변수의 이름 뒤에 타입을 명시하거나 생략하도록 허용한다.

val question = "삶, 우주, 그리고 모든 것에 대한 궁극적인 질문"
val answer: Int = 42 // 해당 변수 선언 시, 타입 표기 생략 가능
val yearsToCompute = 7.5e6 // 부동소수점 상수 사용 시, Double로 변경 (7.5 * 10^6)

[val 과 var]

  • val
    • 변경 불가능한 참조를 저장하는 변수
    • 초기화 하고 나면 재대입이 불가
    • 참조가 가르키는 객체의 내부 값은 변경 가능
    • Java의 final 변수의 역할과 동일
  • var
    • 변경 가능한 참조
    • 값은 변경할 수 있으나, 타입이 변경되서는 안됨
    • Java의 일반 변수의 역할과 동일

(4) 문자열 템플릿

fun main(args: Array<String>) {
 val name = if (args.size > 0) args[0] else "Kotlin"
 println("Hello, $name!")
}
  • Kotlin은 변수를 문자열 안에 사용할 수 있다.
  • 문자열 리터럴의 필요한 곳에 변수를 넣되 변수 앞에 $ 표시를 추가해야 한다.
  • Java 문자열 접합 연산을 사용하여 효율적으로 표시 가능하다. ("Hello, " + name + "!")
  • 한글의 경우, 문자열 템플릿을 사용 시, 유니코드 변수 이름과 충돌의 우려가 있으므로, 변수를 중괄호로 감싸야 한다.