개요
필자는 람다를 알아보기 위해서 공부를 시작했는데 하다 보니까 함수도 알아야 할 것 같아서 포스팅해 본다.
함수(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)
이번 포스팅에서는 간단하게만 설명 했지만 좀 더 공부할 필요성을 느꼈다. ㅎㅎ
잘못된 부분이나 부족한 부분이 있을 수 있습니다. 댓글로 남겨주시면 감사하겠습니다. 😊
'Kotlin' 카테고리의 다른 글
[Kotlin] 객체 지향 프로그래밍(OOP) (0) | 2024.12.03 |
---|---|
[Kotlin] 예외(Exception) 처리하기 (0) | 2024.12.03 |
[Kotlin] JVM, Kotlin 컴파일 과정 (2) | 2024.12.02 |
[Kotlin] 컬렉션(List, Set, Map), 관련 함수들 (1) | 2024.11.18 |
[Kotlin] 제어문(2) - 반복문(while, for) (1) | 2024.11.15 |