상세 컨텐츠

본문 제목

[Kotlin] 함수

Mobile/Kotlin

by 클리엘 클리엘 2020. 12. 8. 14:18

본문

728x90

Android Studio에서 Kotlin으로 프로젝트를 생성하면 대부분 아래와 같은 구조의 코드로 시작합니다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        
    }
}

우리가 주목해야 할 부분은 onCreate입니다. onCreate는 함수이며 MainActivity클래스에 속해 있습니다. 함수라는 것은 프로그램을 구성하는 최소한의 덩어리이며 프로그램을 실행하면서 필요한 처리를 하기 위한 부분이기도 합니다. 참고로 onCreate는 Android가 시작할 때 가장 먼저 호출되는 함수이며 C언에서 main함수와 같습니다.

 

함수는 아래와 같은 방법으로 선언할 수 있습니다.

fun plus(i: Int, j: Int): Int {
    return i + j
}

위 예제에서 plus는 함 수명입니다. 이 함수는 Int형의 값을 2개를 받아 이를 더한 결과를 반환하고 있습니다. Int형의 값을 2개 받는다는 것은 'i: Int, j: Int'로 결정되며 이것을 매개변수 혹은 파라메터라고 합니다.

 

그리고 결과는 역시 같은 Int형인 정수를 반환하고 있으며 이것은 : 다음에 오는 Int로 결정됩니다. 마지막으로 함수의 실행 부분은 {와 } 사이에 작성될 수 있으며 예제에서는 return으로 곧장 i + j의 결과를 반환하는 구문이 작성되어 있습니다.

 

함수는 매개변수를 생략할 수 있으며

fun plus(): Int {
    return 10 + 20
}

값(결과)을 반환하지 않고 내부에서 종결하는 것도 가능합니다.

fun plus() {
    Log.d("test", "plus 함수 본문")
}

함수를 위와 같이 생성하고 나면 '함수명(전달 값...)'의 형태로 함수를 호출해 사용할 수 있습니다.

var r = plus(10,20)
Log.d("test", "결과는 ${r}입니다.")

함수를 호출할 때 매개변수에 전달되는 값이 거의 동일한 경우가 많거나 특정값으로 고정될 수 있을 때는 함수에서 매개변수의 기본값을 정의할 수 있습니다.

fun plus(i: Int, j: Int = 20): Int {
    return i + j
}

이 경우에는 함수를 호출할 때 i에 해당하는 값만 전달할 수 있으며 이때 j의 값은 20으로 처리됩니다.

var r = plus(10)

단, 매개변수가 여러 개일 경우에는 기본적으로 앞에 매개 변수만 기본값을 정의할 수 없으나

fun plus(i: Int = 10, j: Int): Int {
    return i + j
}

함수를 호출할 때 전달할 값을 어느 매개변수로 입력할지를 명확히 지정하는 경우라면 위의 함수의 경우에도 정상적으로 함수를 호출할 수 있습니다.

var r = plus(j = 30)

함수는 경우에 따라 매개변수의 타입뒤에 ?를 사용함으로써 null을 받을 수 있으며 이때는 함수 내부에서 null상황에 대한 확인 구문을 먼저 추가해야 합니다.

fun plus(i: Int = 10, j: Int?): Int {
    if (j == null)
        return i
    else
        return i + j
}

혹은 다음과 같이 ?. 을 사용해 변수의 null상황을 간략하게 확인할 수도 있습니다.

fun plus(i: Int = 10, j: Int?): Int {
    return j?.plus(i)
}

상기 예제에서는 j가 null인 경우 곧장 null을 반환하도록 했으며 null이 아닌 경우에는 i에 더해진 값을 반환하도록 하였습니다.

만약 null인 경우 다른 값 사용을 대체하고자 한다면 ?: 을 사용해 값을 지정할 수 있습니다. 아래 예제는 j가 null인 경우 null대신 20 값을 사용하도록 처리하는 방법을 보여줍니다.

fun plus(i: Int = 10, j: Int?): Int {
    return j?.plus(i)?:20
}

함수가 null을 반환할 수 있는 경우도 마찬가지로 타입뒤에 ?를 사용해 null을 반환할 수 있도록 허용할 수 있습니다.

fun plus(i: Int = 10, j: Int?): Int? {
    if (j == null)
        return null
    else
        return i + j
}

 

728x90

'Mobile > Kotlin' 카테고리의 다른 글

[Kotlin] 데이터 클래스  (0) 2020.12.09
[Kotlin] 클래스(Class)  (0) 2020.12.09
[Kotlin] 함수  (0) 2020.12.08
[Kotlin] 배열과 컬렉션  (0) 2020.12.07
[Kotlin] 반복문  (0) 2020.12.07
[Kotlin] 제어문 - 조건문  (0) 2020.10.01

관련글 더보기

댓글 영역