Kotlin

[Kotlin] 함수(Function), 람다(lambda)

KyungMin08 2024. 12. 2. 13:48
728x90

개요

필자는 람다를 알아보기 위해서 공부를 시작했는데 하다 보니까 함수도 알아야 할 것 같아서 포스팅해 본다.

 

함수(Function)

프로그래밍에서 함수를 수학적으로 생각하면 안 된다.

함수는 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드들의 집합을 말하는데 한마디로 여러 코드들을 한 번에 묶은 것이라고 정리해도 된다.

이로 인해 귀찮은 작업들과 중복 코드가 줄어든다. 직접 개발하다 보면 알게 될 거다.😁

함수에는 언어에 기본적으로 포함되는 함수가 있고, 사용자 함수가 있다. 그중 사용자 함수에 대해 알아볼 거다.


사용자 함수 정의

함수를 정의할 때는 fun 키워드를 사용한다.

fun 함수명(파라미터: 타입) : 반환타입 {
    return 반환값
}

파라미터는 어떤 데이터를 받는 것이며 필수는 아니다.

return는 '돌려준다'는 의미로 함수를 호출하면 함수 안에 있는 로직들을 실행하고 실행한 결과를 줄 때 사용한다.

리턴 타입이 없으면 return 키워드를 작성하지 않아도 된다.


고차 함수

고차 함수는 다른 함수를 파라미터로 받거나 함수를 반환하는 것이다. 고차 함수를 이해하기 위해선 람다라는 개념이 꼭 필요하니까 본 글 아래에 람다부터 읽고 오길 바란다.

higher1은 고차 함수라고 말할 수 있다. 함수의 함수니까. 인자를 넣을 때 중괄호를 사용해서 값이 어떻게 활용될 것인지 정의해 준다.

인자가 하나일 때는 it이라는 키워드를 사용한다. it은 해당 변수이다.

람다(Lambda) 말고 일반 함수를 받을 때는 ::을 사용해서 받는다.


확장 함수 (Extension Function)

새로운 디자인 패턴을 사용하지 않고 기존 클래스에서 새로운 기능을 확장할 수 있는 기능을 제공하는데 이것을 확장(extension)이라는 선언으로 이루어진다. 함수에 확장을 선언하면 확장 함수가 되고 추가적인 프로퍼티를 구현하면 확장 프로퍼티가 된다.

이런 확장 함수는 언제 사용하냐면 기존 클래스에 내 맘대로 함수를 만들고 싶은 경우 또는 외부 라이브러리를 사용할 때 함수를 추가하기 어려우거나 변경하기 어려울 때 사용한다. 한마디로 기존 클래스에 내 맘대로 새로운 함수를 추가할 수 있다.

 

확장 함수를 선언할 때는 아래의 2개의 개념만 알면 된다.

  • receiver type : 확장할 클래스 (확장 대상인 클래스)
  • receiver object : 확장 함수의 내부 구현 시 this 키워드를 사용하여 해당 클래스가 가지고 있는 public 인스턴스에 접근하는 객체

확장 함수를 구현하기 위해서는 receiver type에.(온점)을 붙여 만든다.

첫 번째를 설명하자면 2개의 인자를 받고 더해서 3으로 곱하는 확장 함수이다. this 키워드를 사용하여 확장 함수를 호출한 인스턴스에 plus() 함수를 사용해 출력하고 있다. this는 number이다. 즉, number의 값을 사용할 수 있다는 의미이다.

Kotlin은 함수 내부에 식이 하나만 존재한다면 등호(=)로 리턴 키워드를 생략할 수 있다.

(확장 함수를 선언할 때 함수 이름이나 프로퍼티 이름이 동일하거나 매개변수 타입과 개수가 동일해서는 안된다)


람다(Lambda)

람다는 함수를 좀 더 간단히 표현한 것으로 중괄호로 묶어 사용할 수 있다.

{ 변수1 : 타입, 변수2 : 타입 -> 변수1 + 변수2 }

Unit은 자바의 void이다. "반환 타입이 없다"라는 걸 명시한다. (Unit = void)


이번 포스팅에서는 간단하게만 설명 했지만 좀 더 공부할 필요성을 느꼈다. ㅎㅎ

잘못된 부분이나 부족한 부분이 있을 수 있습니다. 댓글로 남겨주시면 감사하겠습니다. 😊

728x90