본문 바로가기

# 02/코틀린

[Kotlin] Function

반응형

Defining function - java


void 함수명 (변수) {

값 처리;

}


리턴타입 함수명 (변수) {

return 값

}



Defining functions - 비교


void 함수명 (변수) {

값 처리;

}

리턴타입 함수명(변수) {

return 값;

}


fun 함수명(변수) : Unit {             // Unit은 생략 가능

값 처리

}


fun 함수명(변수) : 리턴타입 {

return 값

}



Defining functions - 예


int getSum(int a, int b) {

return a + b;

}


fun getSum(a : Int, b : Int) : Int {

return a + b

}


// return 생략

fun getSum (a : Int, b : Int) : Int = a + b


// 유추하기를 통한 생략

fun getSum(a : Int, b : Int) = a + b



Defining functions - 예


void printSum(int a, int b) {

Log.d("TEMP" , "sum : " + (a+b));

}


fun printSum(a : Int, b : Int) : Unit {

println("sum : ${a + b}")

}


fun printSum(a : Int, b : Int) {

println("sum : ${a + b}")

}



- 함수를 확장하여 기존에 있던 것처럼 사용할 수 있다.


fun 타입.함수명(변수) : 리턴 타입 {

return 값

}


fun Int.max(x : Int) : Int

= if (this > x) this else x


// 사용할 때는

숫자.max(숫자)

1.max(15)





fun test() {

println("sum ${1.getSum(1, 2)}")

}


fun Int.getSum(b : Int) : Int? = this + b



Extension Functions


fun Int.max(x : Int) : Int

= if (this > x) this else x


// 사용할 때는

숫자.max(숫자)

1.max(15)


> 변수 1개만 있을 경우 infix notation을 사용하여 더 축약 가능


infix fun Int.max(x : Int)

= if (this > x) this else x


1.max(15) -> 1 max 15



- 원래 있던 함수처럼 접근하여 사용이 가능

- Extension 보다 Class 내에 있던 원래 함수가 우선이다.



open class C


class D : C()


fun C.foo() = "c"                  // C의 확장함수 foo를 만듬


fun D.foo() = "d"                 // D의 확장함수 foo를 만듬


fun printFoo(c : C) {

println(c.foo())

}


printFoo(D())                       // c 출력, printFoo안에 매개변수 타입이 C라서 c 출력




class C {

fun foo() { println("member")}                    // class 내부의 함수

}


fun C.foo() { println("extension") }                     // 확장함수


fun text() {

val c = C()

c.foo()                                                  // class 내부의 함수가 호출되어 member 출력

}



class C {

fun foo() { println("member")}                    // class 내부의 함수

}


fun C.foo(a : Int) { println("extension") }                     // 확장함수


fun text() {

val c = C()

c.foo(1)                                                  // 확장함수 foo를 호출하고 싶으면 매개변수 추가 해주면됨!!

}




val <T> List<T>.lastIndex : Int

get() = size -1


fun test() {

println(mutableListOf(1, 0, 3, 30, 50).lastIndex)

}




Named Arguments


fun setParams (age : Int, name : String = "Default", email : String) {

// ..

}


// use

setParams (0, "email@email.com")

반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] Lambda  (0) 2019.07.11
[Kotlin] Control Flow - if/when/loops  (0) 2019.07.11
[Kotlin] Class  (0) 2019.07.11
[Kotlin] Properties and Fields  (0) 2019.07.11
[Kotlin] Types  (0) 2019.07.11