2022. 10. 30. 15:22ㆍDev/코틀린
fun log(level: String = "ERROR", message: String){
println("[$level]$message")
}
//위 함수를 아래와 같이 여러 방법으로 호출 가능하고, 출력값은 우측과 같다.
fun main(){
log(message = "에러 로그"); --> [ERROR]에러 로그
log(level = "DEBUG", "디버그 로그") --> [DEBUG]디버그 로그
log("WARN", "경고 로그") --> [WARN]경고 로그
log(level = "FATAL", "심각한로그") --> [FATAL]심각한로그
}
오늘은 코틀린의 함수 선언방법에 대해 공부해보자!
코틀린의 함수 선언방법은 자바의 그것보다 좀 더 간결하고 유용한 기능이 제공된다.
■ 기본적인 함수 선언
코틀린의 가장 기본적인 함수 선언 문법이다. 아래와 같이 함수 선언에 필요한 모든 키워드들이 붙어 있는 구조이다.
- fun : 함수를 의미하는 키워드인 fun (function의 약자) 이 붙어 있다.
- plus : 함수명
- (a : Int, b : Int) : 매개변수 a와 b를 받는다고 선언되어 있고, 각각 매개변수의 데이터타입도 Int로 선언되어 있다.
- : Int : 이 함수에서 반환되는 데이터의 타입을 정의해둔 부분이다.
fun plus(a : Int, b : Int) : Int {
return a + b
}
■ 표현식 스타일
함수의 몸통(바디)를 의미하는 '{ }' 가 없이 선언하는 방법이다.
반환타입을 생략하는 경우, 컴파일러가 매개변수의 타입을 자동으로 추론하여 반환타입을 결정해준다.
//표현식 스타일
fun plus2(a: Int, b: Int) : Int = a + b
//표현식 스타일 - 반환타입을 생략
fun plus3(a: Int, b: Int) = a + b;
단, 몸통(바디)이 있는 함수는 반환타입을 생략하면 오류가 발생한다.
//몸통이 있는 함수는 반환타입 생략 시, 오류 발생 (아래의 함수는 반환타입이 생략되어 오류가 발생함)
fun plus4(a: Int, b: Int) {
return a + b
}
■ 디폴트 파라미터를 이용한 함수 선언
매개변수에 값이 없을 경우, 디폴트로 사용한 값을 정의하여 함수를 선언한다. 자바에는 없는 기능이다.
//msg라는 매개변수에 값이 전달되지 않을 때 "HELLO OGRIMA!!" 이라는 값을 디폴트로 넣어준다.
fun hello(msg : String = "HELLO OGRIMA!!") {
println(msg)
}
hello() <- 함수 호출 시 HELLO OGRIMA!! 문자열이 출력됨
만약, 위와 동일한 기능을 하는 함수를 자바에서 선언한다면, 아래와 같다.
public void hello(String msg){
if(msg == null || msg.length() == 0){
msg = "HELLO OGRIMA!!";
}
System.out.println(msg);
}
■ 반환타입이 없는 경우, Unit을 반환
위에서 설명한 hello 라는 함수는 반환타입이 없이 선언되었다.
이럴 경우, Unit이라는 타입을 자동으로 반환한다.
//반환타입이 없으먄, 컴파일러가 Unit을 자동으로 넣어주게 된다. (코딩 시에는 안 보임)
fun hello(msg : String = "HELLO OGRIMA!!") : Unit {
println(msg)
}
■ Named argument 를 이용한 선언 및 호출
함수를 호출할 때, 매개변수명을 지정하여 호출할 수 있다.
fun log(level: String = "ERROR", message: String){
println("[$level]$message")
}
//위 함수를 아래와 같이 여러 방법으로 호출 가능하고, 출력값은 우측과 같다.
fun main(){
log(message = "에러 로그"); --> [ERROR]에러 로그
log(level = "DEBUG", "디버그 로그") --> [DEBUG]디버그 로그
log("WARN", "경고 로그") --> [WARN]경고 로그
log(level = "FATAL", message = "심각한로그") --> [FATAL]심각한로그
}
위에서 log(message= "에러 로그") 와 같이 매개변수 1개만 호출을 해도 log 함수가 호출이 된다.
'Dev > 코틀린' 카테고리의 다른 글
코틀린 팩토리 패턴(Kotlin Factory Pattern) - 스프링부트 (0) | 2023.05.09 |
---|---|
[코틀린/Kotlin] 변수의 선언방법 (0) | 2022.10.19 |