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
}
'Mobile > Kotlin' 카테고리의 다른 글
[Kotlin] 데이터 클래스 (0) | 2020.12.09 |
---|---|
[Kotlin] 클래스(Class) (0) | 2020.12.09 |
[Kotlin] 배열과 컬렉션 (0) | 2020.12.07 |
[Kotlin] 반복문 (0) | 2020.12.07 |
[Kotlin] 제어문 - 조건문 (0) | 2020.10.01 |