본문 바로가기

개발 노트/Kotlin

[kotlin]함수

  • 함수는 fun으로 정의하고, 반환값이 있는 함수는 내부에서 return으로 값을 반환한다
  • 함수를 정의할 때 입력값을 기술한것을 "파라미터"라고 하는데, 이 파라미터를 전달하고 결괏값을 돌려받는 다양한 방법에 대해 알아볼것이다!
  • 모든 코드는 함수 안에 작성해야하며, 코드의 실행은 함수를 호출하는것에서 시작한다
  • 안드로이드 앱도 onCreate()함수를 호출해서 실행된다고 할 수 있다 (물론 내부는 더 복잡한 구조로 되어있지만, 일단은 단순하게 접근하자!)

 

# 함수의 정의

- 함수는 fun 키워드로 정의하며, 값을 입력받아서 사용할 수 있다

- 이때 입력될 값을 기술한 것파라미터(Parameter) 라고 한다

- 기본 구조는 아래와 같다

fun 함수명(파라미터 이름: 타입): 반환 타입 {
    return 값	// 반환값
}

 

-> 파라미터와 반환값이 없는 함수도 있는데, 없는 경우에는 둘 다 작성하지 않는다

-> 반환값이 없는 대표적인 함수가 log에 정의되어있는 d함수이다

-> 함수의 괄호 안에 입력되는 "파라미터 이름 : 타입" 은  "변수명 : 타입" 과 동일하게 사용된다

-> 함수를 호출할 때, 괄호 안에 값을 넣어서 전달하는데, 이때 입력되는 값의 타입함수에 정의된 파라미터 타입과 동일하게 입력해야한다

 

 

# 함수의 사용 

- 함수의 사용은 이름 뒤에 괄호를 붙여서 명령어를 실행하는 형태다

함수명(값)

 

-> 함수는 이름만 호출해서는 실행되지 않고, 반드시 괄호를 붙여야 실행된다

-> 괄호를 붙이지 않으면 함수의 코드가 실행되지 않고, 마치 값처럼 인식된다 

 

 

 

 

 

 

 

# 반환값과 입력값이 있는 함수의 정의

 

- 다음은 Int타입의 x라는 입력 파라미터를 갖는 함수 square()를 정의했다

fun square(x: Int): Int {
    return x * x
}

 

-> square함수가 호출되면, 입력값을 제곱해서 호출한 측으로 반환하고 실행이 종료된다

 

 

# 반환값과 입력값이 있는 함수의 호출

 

- 파라미터에 전달할 값을 입력하고, 반환값은 대입연산자(=)로 변수에 담은 후에 사용한다

var squareResult = square(30)
Log.d("fun", "30의 제곱은 ${squareResult}입니다.")

 

 

 

 

 

# 반환값이 없는 함수의 정의

 

- 다음은 반환값 없이 입력값을 받아서 log로 출력하는 함수 printSum()을 정의했다

fun printSum(x: Int, y: Int) {
    Log.d("fun", "x + y = ${x + y}")
}

 

-> printSum함수가 호출되면, 결괏값을 log로 출력하고 실행이 종료된다 

 

 

# 반환값이 없는 함수의 호출

 

- 반환값이 없으면 대입연산자(=)를 사용하지 않고, 바로 호출해서 실행한다

printSum(3, 5)

 

 

 

 

 

# 입력값 없이 반환값만 있는 함수의 정의

 

fun getPi(): Double {
    return 3.14
}

 

-> getPi 함수는 호출한 측으로 3.14를 반환하고 실행이 종료된다

 

 

# 입력값이 없는 함수의 호출

 

- 입력값이 없으면, 괄호만으로 실행하고 결괏값을 받을 수 있다

val PI = getPi()
Log.d("fun", "지름이 10인 원의 둘레는 ${10 * PI}입니다.")

 

 

 

 

 

 

# 함수 파라미터의 정의

- 함수에 입력되는 파라미터는 변수를 정의하듯이 "이름 : 타입"의 형태로 정의되며,

여러개의 파라미터가 정의될 경우는 콤마로 구분한다

- Kotlin에서 함수 파라미터를 통해 입력되는 모든 값은 변하지 않는 이뮤터블이다 

- 따라서 Kotlin에서 함수 파라미터는 모두 읽기전용키워드 val이 생략된 형태라고 생각할 수 있다

fun 함수명((val 생략) name1: String, name2: Int, name3: Double) { 실행 코드 }

 

 

 

# 파라미터의 기본값 정의와 호출

 

- 파라미터는 정의할 때 등호(=)를 사용해서 기본값을 설정할 수 있다

fun 함수명(name1: String, name2: Int = 157, name3: Double) { 실행 코드 }

 

fun newFunction(name: String, age: Int = 29, weight: Double = 65.5){
    Log.d("fun", "name의 값은 ${name}입니다.")
    Log.d("fun", "age의 값은 ${age}입니다.")
    Log.d("fun", "weight의 값은 ${weight}입니다.")
}

newFunction("Hello")

/** [로그캣 출력 내용]
name의 값은 Hello입니다.
age의 값은 29입니다.
weight의 값은 65.5입니다.
*/

 

-> 파라미터의 기본값을 가지는 함수를 정의한 예이다

-> 정의된 newFunction함수를 호출할 때, 기본값이 없는 첫번째 파라미터에만 값을 입력하면, 두번째와 세번째 파라미터에는 설정한 기본값이 자동으로 입력된다

 

 

 

# 파라미터 이름으로 값을 입력하기 (호출할때)

 

- 함수에 정의된 파라미터가 많을 경우, 입력하는 값의 의미가 명확하지 않을때가 있다

- 이럴 경우, 순서와 상관없이 정의된 파라미터 이름을 지정해서 직접 값을 입력할 수 있다

newFunction("Michael", weight = 67.5)

/** [로그캣 출력 내용]
name의 값은 Michale입니다.
age의 값은 29입니다.
weight의 값은 67.5입니다.
*/

 

 

 

지금까지 공부한 함수의 전체코드이다

package net.flow9.thisiskotlin.basicsyntax

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 4. 반환값이 있는 함수 square 사용하기
        var squareResult = square(30)
        Log.d("fun", "30의 제곱은은 ${squareResult}입니다")

        // 5. 반환값이 없는 함수는 그냥 실행한다
        printSum(3, 5)

        // 6. 입력값이 없는 함수 사용
        val PI = getPi()
        Log.d("fun", "지름이 10인 원의 둘레는 ${10 * PI}입니다")

        // 7. 기본값이 있는 함수 사용
        newFunction("Hello")

        // 8. 파라미터 이름을 직접 지정하기
        newFunction("Michael", weight = 67.5)

        // 문제풀이 호출
        Log.d("fun", "5와7을 더한 결과값은 ${plus(5, 7)}입니다")
        Log.d("fun", "0부터 100을 모두 더한 결과값은 ${sum(100)}입니다")
        printString("문자열")
    }

    // 1. 반환값이 있는 함수
    fun square(x: Int): Int {
        return x * x  // <- square 함수는 입력받은 값에 2를 곱해서 반환한다.
    }

    // 2. 반환값이 없는 함수
    fun printSum(x: Int, y: Int) {
        Log.d("fun", "x + y = ${x + y}")
    }

    // 3. 입력값 없이 반환값만 있는 함수
    fun getPi(): Double {
        return 3.14
    }

    // 7. 기본값을 갖는 함수
    fun newFunction(name: String, age: Int = 29, weight: Double = 65.5) {
        Log.d("fun", "name의 값은 ${name}입니다")
        Log.d("fun", "age의 값은 ${age}입니다")
        Log.d("fun", "weight의 값은 ${weight}입니다")
    }

    // 문제 1
    fun plus(x: Int, y: Int): Int {
        return x + y
    }

    // 문제 2
    fun sum(x: Int): Int {
        var result = 0
        for (num in 0..x) {
            result += num
        }
        return result
    }

    // 문제 3
    fun printString(word: String) {
        System.out.println(word)
    }

}

/** [로그캣 출력 내용]
30의 제곱은은 900입니다
x + y = 8
지름이 10인 원의 둘레는 31.400000000000002입니다
name의 값은 Hello입니다
age의 값은 29입니다
weight의 값은 65.5입니다
name의 값은 Michael입니다
age의 값은 29입니다
weight의 값은 67.5입니다
5와7을 더한 결과값은 12입니다
0부터 100을 모두 더한 결과값은 5050입니다
*/

'개발 노트 > Kotlin' 카테고리의 다른 글

[kotlin]null 값에 대한 안정적인 처리 - Null Safety  (0) 2024.01.16
[kotlin]클래스와 설계  (0) 2024.01.16
[kotlin]반복문  (0) 2024.01.16
[kotlin]배열과 컬렉션  (0) 2024.01.16
[kotlin]조건문  (0) 2024.01.16