# Kotlin의 함수
함수는 상자로 생각하면 이해가 쉽다
Kotlin의 함수는 fun으로 시작하고 함수 이름과 소괄호, 중괄호를 붙인다
함수를 만드는 이유는 코드를 여러 번 반복하게 될 때 만들어 놓고 실행만 시키면 시간 단축이 되어서이다
함수 이름 뒤 소괄호 안에는 여러 개의 파라미터가 들어간다
파라미터의 기본 모양은 파라미터 이름 : 파라미터의 자료형이다
Ex) fun add (a:Int, b:Int) { }
그리고 함수를 축약도 할 수 있다.
파라미터가 정확하게 몇 개가 들어올지 모를 때는 파라미터 앞에다가 vararg를 붙여준다.
Ex) fun add(varary a:Int){ }
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val result = add(20,20)// add함수를 실행하고 결과를 result 변수에 넣어준다
println("더하기 값은 : $result") // 출력 값은 "더하기 값은 : 40"이 나온다
var result2 = add4(10,20,30,40) // vararg 때문에 파라미터 여러개 입력 가능
}
fun add(a:Int,b:Int) : Int { // Int형 파라미터 두개가 있는 함수를 선언
return a + b // a + b 값을 return을 해준다
}
fun add2(a:Int,b:Int):Int = a + b // 중괄호를 없애고 = 기호 뒤에 문장을 넣으며 return 생략
fun add3(a:Int,b:Int) = a + b // 반환 자료형을 추론할 수 있으면 반환 자료형 생략 가능
fun add4(vararg a:Int) // vararg를 붙여 여러개의 파라미터를 받는게 가능
{
var output = 0
for(num in a){ // 반복문으로 a로 들어오는 값들을 하나씩 num에 넣어준다
output = output + num // num에 들어간 값을 output에 누적 시켜 준다
{
return output // 총 누적된 값을 return 해준다
}
}
# Kotlin의 람다식
람다식은 중괄호 안에 실행 코드가 들어간 익명 함수라 할 수 있다 즉 이름이 없는 함수로 이해하면 편하다
기본 모양으로는 {<실행될 문장>} ex) {x, y -> x + y}
화살표 기호 왼쪽은 파라미터, 오른쪽은 실행 코드이다
람다식에는 함수의 이름이 없다
람다식을 쓰면 람다식으로 된 익명 함수를 다른 함수의 파라미터로 전달할 수 있다
다른 함수의 파라미터로 전달할 때에는 함수의 이름과 파라미터의 이름을 빼고 기록하면 그것이 함수의 자료형이 된다
ex) fun add(a:Int, b:Int)를 다른 함수의 파라미터로 전달 (Int, Int)->Int 이런 식으로 변환을 해준다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var show = { println("show 함수 호출됨") } // 람다식으로 show에다가 함수 생성
val sum = fun (a:Int, b:Int):Int{ // 익명 함수를 생성한다
return a + b
}
sum(10,10) // 익명 함수 실행
doAction(fun (){
println("전달된 함수 호출됨")
})
doAction { // 위에 doAction코드와 동일하다 이런식으로 축약이 가능하다
println("전달된 함수 호출됨")
10 // 값을 리턴하고 싶으면 그냥 적어주면 리턴이 된다
}
doAction { // 위에 doAction코드와 동일하다 이런식으로 축약이 가능하다
println("전달된 함수 호출됨")
return@doAction 10 // return을 명확하게 하고 싶으면 @(라벨)을 붙여서 리턴을 해준다
}
}
fun doAction(action:()->Unit){ // 파라미터가 없고 반환 자료형이 없는 함수를 파라미터로 받아온다
println("doAction 호출됨.")
action()
}
}
# When 조건문
코틀린에서는 when이라는 조건문이 있다 이 when은 기존 자바의 switch ~ case를 대체를 한다
변수의 값이 어떤 값인지를 비교하여 각각의 값에 맞는 코드를 실행한다.
ex) when (변수) {
값 1 -> 코드 1
값 2 -> 코드 2
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val a = 1
val b = 2
when(a){ // when을 기본적으로 이렇게 사용한다
1 -> {
println("들어있는 값은 1입니다")
}
2 -> {
println("들어있는 값은 2입니다")
}
else -> {
println("들어있는 값이 1도 아니고 2도 아닙니다")
}
}
when(a){ // 1,2이 똑같은 값을 출력한 경우에는 이런식로 가능
1,2 -> {
println("들어있는 값은 1이거나 2입니다")
}
else -> {
println("들어있는 값이 1도 아니고 2도 아닙니다")
}
}
when(a){ // 범위를 지정해주고 싶으면 in을 붙이고 숫자 사이에 ..을 붙여주면 된다
in 1..10 -> { // 이것은 1부터 10까지라는 뜻이다
println("들어있는 값은 1부터 10까지 중의 하나입니다")
}
else -> {
println("들어있는 값이 1도 아니고 2도 아닙니다")
}
}
}
}
# 생성자 직접 정의 / 초기화
코틀린에서는 constructor 키워드를 사용하여 생성자를 직접 정의할 수 있다
<Person.Kt>
class Person{
var name:String? = null
var age:Int? = null
lateinit var adress:String
constructor(){
println("첫번째 생성자 호출됨")
}
constructor(name:String?){
println("두번째 생성자 호출됨")
this.name = name
}
constructor(name:String?, age:Int?, address:String?){
println("세번째 생성자 호출됨")
this.name = name
this.age = age
this.address = address
}
}
<MainActivity.kt>
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val person = person("홍길동",20,"서울시") // person의 객체를 만드는 동시에 만들어놓은
// 생성자를 통해 생성을 한다
}
}
자바에서 생성자의 파라미터로 받은 값의 유효성을 검사하고 초기화하는 경우가 많다.
Kotlin에서는 init 키워드를 사용한다.
class Person(var name:String, var age:Int, var adress:String){
init{
println("${this.name}님은 ${this.age}살이고 ${this.adress}살고 있습니다.")
}
}
'Kotlin 공부 노트' 카테고리의 다른 글
코틀린의 접근 제한자(Kotlin's Visibility Modifier) (0) | 2022.02.06 |
---|---|
코틀린의 문법 (let, with, run, apply, also) (0) | 2022.01.02 |
리사이클러뷰(RecyclerView)만들어보기 (1) | 2021.12.24 |
코틀린의 배열/리스트 (0) | 2021.12.15 |
코틀린의 기본 문법(Toast,변수선언,출력,Null,형 변환) (0) | 2021.12.15 |