Kotlin (코틀린)

[Kotlin] 코틀린 함수 / 메서드와 함수 / 단일 표현식 함수

Oscar:) 2024. 5. 10. 20:00

 

 

 

코틀린의 함수에 대해 알아보자.

 

 


 

함수? 메서드?

 

 

사실 자바에서는 메서드라고 많이 불렀는데,

코틀린은 다들 함수라고 부르는 분위기다...

 

이런 상황에서는 항상, 왜 그렇게 된 것인가에 대해 궁금하지 않을 수가 없다.

 

 

 

✅ 코틀린 함수의 키워드

 

코틀린에서는 함수를 선언할 때 fun 키워드를 사용한다.

fun 함수명()

 

대부분 알겠지만, 여기서 fun은 function의 약자이다.

그리고 자바를 제외한 대부분의 언어에서 function은 함수라 불려왔다.

 

이러한 배경에서 코틀린이 fun 키워드를 채택하였고,

대부분의 사람들이 메서드가 아닌 함수라 부르게 된 것이다.

 

 


 

 

 

✅ 메서드와 함수의 차이점을 굳이 따지자면?

 

메서드도 사실 함수라는 정의 안에 포함된다.

메서드'객체와 연관된 함수'로 정의되곤 했다.

 

자바에서 메서드는 반드시 클래스 내에서만 정의할 수 있었고,

이러한 메서드를 호출하기 위해서는 대부분 인스턴스를 필요로 했다.

(인스턴스 호출은 정적 메서드는 제외된다.)

 

그렇기에 객체와 연관된 함수로 정의되었다고 볼 수 있다.

 

 

반면 코틀린에서 함수는 클래스 외부에서도 정의될 수 있다.

또한 함수 안에 또 다른 함수를 정의할 수도 있다.

 

 


 

 

 

✅ 정리

 

메서드 : 함수에 포함되기에 메서드 or 함수라고 부를 수 있다.

함수 : 메서드의 조건을 모두 만족하진 않으므로 메서드라고 부르기엔 애매하다.

 

그렇기에 코틀린에서는 메서드가 아닌 함수라고 부르도록 하자..!

 

 

 


 

코틀린의 함수

 

 

이미 위에서도 언급했지만, 코틀린에서는 fun 키워드를 사용한다.

// 반환값 없음
fun sum() {
	// TODO
}

// 반환값 없음 + 매개변수 있음
fun sum(a: Int, b: Int) {
	// TODO
}

// 반환값 있음
fun sum(): Int {
	return ...
}

// 반환값 있음 + 매개변수 있음
fun sum(a: Int, b: Int): Int {
	return ...
}

 

 

자바에서는 반환값이 없을 경우 void를 붙이곤 했지만,

코틀린은 반환 타입을 생략하기만 하면 된다.

 

 

 

 

위 예제 중, 마지막 예제를 깔끔히 완성한다면 다음과 같다.

fun sum(a: Int, b: Int): Int {
	return a + b
}

println(sum(1, 2))

// 출력 결과 : 3

 

 


 

 

✅ 단일 표현식 함수

 

코틀린의 경우, 메서드의 기본 문법을 생략할 수 있다.

// 기존
fun sum(a: Int, b: Int): Int {
	return a + b
}


// 중괄호와 return 생략
fun sum(a: Int, b: Int): Int = a + b


// 코틀린의 타입 추론까지 더해져 반환 타입도 생략 가능
fun sum(a: Int, b: Int) = a + b

 

 

위 3가지 함수 모두 동일한 결과를 출력한다.

 

위처럼 기존의 중괄호 문법 대신,

등호와 식을 이용하여 작성한 함수를 단일 표현식 함수라고 부른다.

 

 

이 단일 표현식 함수를 실무에서 은근 쏠쏠하게 사용하고 있다.

쓸데 없는 코드량도 감소하고, 깔끔하여 보기 좋다.

 

 

 


 

 

 

코틀린 함수의 기초적인 내용에 대해 알아보았다.

 

이외에도 확장 함수, 스코프 함수, 중위 함수 등 함수의 종류가 너무나도 많아서

나중에 하나씩 천천히 포스팅할 예정이다.