## 함수 선언

kotlin에서는 fun 키워드를 통해 사용자 지정 함수를 선언할 수 있음

아래는 호출시 안뇽을 출력하는 hello() 함수

fun hello(){
	return print("안뇽);
}

작성 규칙은 아래와 같음

fun 함수명(매개변수: 타입, 매개변수: 타입){
	return 반환 값;
}

각 매개변수는 쉼표로 구분, 타입이 무조건 있어야함

return을 통해 함수 종료


명명된 인자

함수를 호출할 때 매개변수를 넣는 과정에서 매개변수 이름도 같이 넣을 수 있음

말이 조금 복잡한데 예시 코드를 보면 한눈에 알 수 있음

fun main() {  
    print(sum(y=3,x=5));  
}  

sum이라는 함수를 호출할 때 y와 x의 이름을 적어서 넣어주면 순서 상관없이 매개변수를 넣을 수 있음


매개변수의 기본 값

함수를 선언할 때 아래와 같이 매개변수의 기본값을 지정해 줄 수 있음

fun 함수명 (매개변수: 타입 = 기본값, 매개변수: 타입){
	함수 내용
}

이렇게 작성하면 함수에 매개변수를 넣는 과정에서 기본값이 존재하는 매개변수는 넣지 않고 넘길 수있음

예시 코드와 함께 설명하겠음

fun printMessage(message: String, user: String = "박현빈", time: String){  
    println("${user}: ${message}, ${time}시");  
}  

위 코드는 메시지, 메시지를 보낸 사용자, 메시지를 보낸 시각을 파라미터로 받아 출력하는 함수임

원래라면 message, user, time 매개변수들을 전부 채워서 호출 해야하지만 user는 기본값을 설정 했기 때문에 생략 할 수 있음

단 생략할 때엔 명명된 인자들을 넣어줘야함

fun main() {
	printMessage(message="저는 졸립니다", time="00")
	//result = 박현빈 : 저는 졸립니다, 00시
}

함수 반환 타입

코틀린은 반환 타입을 지정해 줄 수 있음

fun 함수명(매개변수: 타입, 매개변수: 타입): 반환 타입{
	return 반환 값;
}

이 떄 반환 타입을 설정해주지 않으면 기본적으로 Unit이 반환 타입으로 설정됨

Unit 타입은 JAVA, C# 에서의 Void 타입과 똑같은 역할이라고 생각하면 됨 (정확히는 차이점이 존재함)


단일 표현식 함수

fun sum(x: Int, y: Int){
	return x+y
}

위와 같이 두개의 정수를 매개변수로 받아 더해서 반환하는 sum 함수가 있음

이 함수는 수행하는 역할에 비해 쓸모 없는 코드가 너무 많음

그래서 단일 표현식 함수를 통해 길이를 줄일 수 있음

코드를 줄일면 다음과 같음

fun sum(x: Int, y: Int) = x+y

이렇게 생략 하더라도 반환 타입은 명시 해주는게 좋음

fun sum(x: Int, y: Int): Int = x+y