공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 코틀린 메서드에 대해 공부합니다.
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에 대해 공부합니다.
'코틀린(Kotlin)' 카테고리의 다른 글
코틀린(kotlin) : Inline Function 인라인 메서드 (0) | 2018.02.06 |
---|---|
코틀린(kotlin) : Lambda 고차함수와 람다, 익명 함수 (0) | 2018.02.06 |
코틀린(kotlin) : 객체 표현식과 객체 선언 Object Expression and Declaration (2) | 2018.02.05 |
코틀린(kotlin) : Nested Class, inner class, Enum Class 중첩, 내부, Enum 클래스 (0) | 2018.02.05 |
코틀린(kotlin) : Data Class 와 Sealed Class (0) | 2018.01.31 |