코틀린(Kotlin)

코틀린(kotlin) : 메서드 Function

알통몬_ 2018. 2. 5. 17:38
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 코틀린 메서드에 대해 공부합니다.


Functions

Function Declarations : 메서드 선언

코틀린에서는 메서드 선언 시 앞에 fun 키워드를 사용합니다.

fun aaa() : String {
return "it's AAA()"
}

Function Usage : 메서드 사용

메서들를 호출할 때 전통적인 접근 :

var a = aaa()

멤버 메서드일 경우 dot notation을 사용해서 호출


fun main(args: Array<String>) {
var a = AAA().aaa() // 인스턴스의 생성과 동시에 사용
}

class AAA {
fun aaa() {
print("It's aaa")
}
}


Parameters

메서드의 파라미터는 파스칼 표기법으로 정의됩니다.

name : type

파라미터가 여러 개일 경우 콤마로 구분하여 사용합니다.

fun member(name : String, id : String) {
//
}

각 파라미터마다 타입을 명시적으로 표기해야 합니다.


Default Arguments

메서드 파라미터는 기본 값을 가질 수 있습니다. 해당 인수가 생략될 때 사용합니다.


fun member(name : String, id : String, age : Int = 27) {
//
}

기본 값을 가지는 메서드 호출 시 해당 인수를 입력하지 않으면, 메서드 정의 시 입력한

기본 값으로 가져가고, 입력하면 새롭게 인수로 입력된 값을 가져갑니다.

만약 기본 값을 가지는 파라미터가 기본 값이 없는 파라미터 보다 앞에 온다면,

메서드 호출 시 기본 값이 없는 파라미터 이름 = 값 으로 호출해야 합니다.

ex)

fun main(args: Array<String>) {
var a = AAA().aaa()
member(name = "박성균", id = "altongmon")
}

fun member( age : Int = 27, name : String, id : String) {
//
}


Named Arguments

메서드가 호출될 때 메서드의 파라미터는 이름 지을 수 있습니다.

그냥 값만 넣어서 호출할 수도 있지만,

각각의 이름 = 값으로 호출하면 의미를 더 명확히 확인할 수 있습니다.


fun main(args: Array<String>) {
member("a", "s" , 21)
member(name="b", id="b", age = 27)
}

fun member(name : String, id : String,age : Int = 27) {
//
}

매개 변수가 여러 개일 때 하나의 매개 변수만 이름을 같이 호출하거나 할 수는 없습니다.

전부 하던가 아예 안 하던가 둘 중 하나입니다.

그리고 기본 값이 있는 파라미터는 마찬가지로 호출하지 않아도 됩니다.

member(name="b", id="b")

자바 메서드 호출 시에는 named arguments 를 사용할 수 없습니다.


---------------------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------------



Unit-returning functions

Unit 타입은 다른 언어의 void와 같다고 보시면 됩니다.

메서드 호출의 결과로 아무 것도 반환하지 않을 경우 사용합니다.

그리고 Unit 타입은 Unit을 생략해도 됩니다.

fun member(name : String, id : String,age : Int = 27) : Unit {
//
}


Single-Expression functions

메서드의 내용이 한 줄로 선언 가능하다면, 중괄호를 생략하고 = 을 사용해서 선언할 수

있습니다.

fun main(args: Array<String>) {
sum(10, 20)
}

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

이 경우에는 반환타입이 Unit이 아니어도 생략 가능합니다.

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


Explicit return types

모든 메서드에는 항상 특정 반환타입을 명시해주어야 합니다. 명시하지 않았을 경우에는

Unit 타입으로 간주합니다. 


Variable number of arguments(Varargs)

함수의 파라미터(일반적으로 마지막 파라미터)는 vararg 수정자로 표시될 수 있습니다.

vararg 수정자를 가지는 파라미터는 인수를 여러 개 입력할 수 있습니다.

Arrays.asList(1,2,3)

Arrays 클래스의 asList() 메서드가 그 예입니다.

vararg 마크는 하나의 파라미터만 가질 수 있습니다.



Infix notation

메서드는 Infix 표기법을 사용하여 호출할 수도 있습니다.

- 멤버 함수 or 확장 함수입니다.

- 파라미터를 하나만 가집니다.

- 메서드 앞에 infix 키워드를 선언합니다.

아래 같은 방식으로 사용합니다.


fun main(args: Array<String>) {
print("a".multiply("hi"))
}

infix fun String.multiply(str : String) : String {
return str + str
}


Funtion Scope 메서드의 범위

코틀린에서 메서드는 파일의 top-level에 선언할 수 있습니다, 

이 의미는 자바,C#, Scala처럼 메서드를 만들기 위해 

클래스를 만들 필요가 없다는 의미 입니다.

top-level 메서드 이외에도 로컬 메서드, 멤버 메서드, 확장 메서드를 선언할 수 있습니다.


Local Function

로컬 메서드는 메서드 안에 메서드를 선언한 것을 말합니다.

fun main(args: Array<String>) {
aaa()
}

fun aaa() {
fun bbb() {
print("bbb() called")
}

bbb()
}

로컬 메서드는 outer 메서드의 로컬 변수에 접근할 수 있습니다.


Member Function

멤버 메서드는 클래스나 object 내부에 정의된 메서드입니다.

class Ex {
fun ex() {

}
}

멤버 메서드는 dot notation 으로 호출할 수도 있습니다.

예 :   Ex().ex()


Generic Function

Generic 파라미터를 가지는 메서드도 선언할 수 있습니다.

fun <T> singletonList(item : T) : List<T> {
//...
}

Generic에 대해 더 자세한 내용은 공부 후 따로 포스팅하겠습니다.


Tail recursive function

코틀린에서는 꼬리 재귀 메서드라는 함수적 프로그래밍을 지원합니다.

자세한 내용은 아래 링크를 들어가보시면 됩니다.

https://kotlinlang.org/docs/reference/functions.html#tail-recursive-functions


이상입니다.

감사합니다.

다음 포스팅에서는 lambda에 대해 공부합니다.







반응형