개요

  • 함수와 변수 사용법에 대해 알아보자.

함수

프로그래밍 언어를 배우면서 첫파트에 Hello, world!를 찍는 것은 오래된 낭만(?)이다.
심지어 오디오를 재생하는 OpenAL의 경우, Hello_world 음원 파일을 제공한다.

  • 함수 구조에 대해 알아보자.

    • 함수(function)을 선언할 때는 fun 키워드를 사용한다.

    • fun 다음에는 함수의 이름을 작성한다.

    • 파라미터는 (파라미터명: 타입) 으로 정의한다.

    • 반환 값은 파라미터를 닫는 괄호 옆 세미콜론(:)를 찍은 뒤 명시한다.

    • 자바의 경우 함수를 정의하려면, 클래스 내부에 정의해야만 한다. 하지만 코틀린은 함수만 정의를 할 수 있다.

    • System.out.println이 아니라 println으로 사용할 수 있다. 이는 코틀린이 표준 자바 라이브러리를 간결하게 사용할 수 있는 래퍼를 제공하기 때문이다.

    • 세미콜론의 경우 붙여도 되지만, 붙이지 않는 것을 강력히 권장한다.

  • 함수의 리턴형에 대해 알아보자.

    • 기본형의 경우 String, Int, Double과 같이 리턴형을 명시해 줘야한다.
    • Void형인 경우 main 함수처럼 생략 가능하다.
    • Unit은 리턴형이 없음을 명시적으로 선언할 때 사용한다.
  • 리턴에 대해 알아보자.

    • 보통의 경우 가장 위의 sum 함수처럼 리턴형을 선언하고, 리턴값을 정의할 것이다.

    • 이러한 형태의 함수를 블록이 본문인 함수라고 부른다.

    • 코틀린에서는 2번째 줄의 sum 처럼, 중괄호를 제거하고, return을 생략하고, 등로(=)로 식을 표현할 수 있다.

    • 이러한 형태의 함수를 식이 본문인 함수라고 부른다. 코틀린에서는 식이 본문인 형태인 함수가 주로 사용된다.

    • 마지막으로 3번째 줄에서는 리턴형을 생략하였다. 이는 컴파일러가 본문을 해석하여 리턴형이 Int임을 추론할 수 있기 때문이다.

    • 이 기능을 타입 추론(type inference)라고 한다. 이 방식은 식이 본문인 함수에서만 가능한 방식이다.

      코틀린에서는 허용하는 문법이지만, 리턴값을 명시하지 않는 문법은 좋은 습관인지 생각해봐야 할 것 같다.


fun sum(a: Int, b:Int): Int {
    return a+b
}

// fun sum(a: Int, b:Int): Int = a + b <-- 리턴이 없음 (Convert to expression body)

// fun sum(a: Int, b:Int) = a + b <-- 리턴 타입이 없음 (type inference)

fun pow(a: Double, b: Double) : Double {
    return a * b
}

fun getName() : String {
    return "MinJae"
}

fun printName() : Unit {
    println("MinJae")
}

fun main(args: Array<String>) {
    println("Hello, world!")
}

문(statement)과 식(expression)

  • 자바에서는 모든 제어 문구가 문(statement)로 구성되어 있다.
  • 코틀린은 반복문을 제외한 대부분의 제어문이 식(expression)으로 평가된다.

식(Expression)

  • 식은 하나 이상의 값으로 표현 될 수 있는 코드를 말한다.
  • 식은 평가(evaluate)가 가능해서 하나의 값으로 환원될 수 있다.
  • 흔히 사칙연산 x=5+1에서 6으로 평가될 수 있는 5+1이 바로 식이다.
  • 프로그래밍에서 식은 함수 호출, 변수 이름과 같은 식별자, 배열 등의 할당 연산자([])를 포함한다.
  • 코틀린에서 if는 아래와 같이 식으로 사용된다.
    fun max(a:Int, b:Int): Int = if(a>b) a else b

문(Statement)

  • 문(Statement)이란 프로그래밍에서는 실행가능한 최소의 독립적인 코드 조각을 말한다.
  • 문은 보통 하나 이상의 식과 프로그래밍 키워드를 포함하는 경우가 많다.
  • 아래 예제어서 while (x > 0)은 어떤 값으로 환원 가능한가? 할 수 없다면, 해당 코드는 문이다.
while (x > 0) {
    x--
}

문(statement)과 식(expression)의 관계

  • 아래 예제에서 보면 a*b는 식이다.
  • 하지만 실행 가능한 문(statement)으로 볼 수 있다.
  • return의 경우는 어떠한가? return은 a*b의 결과를 반환할 뿐, a*b로 평가되지 않는다.
  • 따라서 모든 식(expression)은 문(statement)에 속하지만, 모든 문(statement)은 식(expression)에 속하지 않는다.

모든 햄버거는 샌드위치에 속하지만, 모든 샌드위치가 햄버거에 속하지 않는 것 처럼...

fun pow(a: Double, b: Double) : Double {
    return a * b
}

'프로그래밍 > Kotiln' 카테고리의 다른 글

[Kotlin] 4. 변수  (0) 2020.01.30
[Kotlin] 2. 개발환경 구축  (0) 2020.01.29
[Kotlin] 1. 코틀린은 무엇인가?  (0) 2019.10.30

+ Recent posts