반응형
1. 함수
코틀린에서 함수는 fun 키워드를 통해 정의할 수 있다
java에서는 함수를 정의하기 위해서는 class 내에서 함수를 정의할 수 있지만, 코틀린에서는 클래스 외부에서도 함수를 정의할 수 있다.
- 자바의 경우 함수는 class 내부에 종속된 상태로 구현 가능
- 코틀린은 class에 종속되지 않고 함수를 구현할 수 있음
코틀린에서 함수는 자바와 동일하게 함수 파라미터와 반환형을 가지는데 아래와 같이 정의할 수 있다
(1)
fun add(x: Int = 1, y: Int): Int {
return x+y
}
(2)
fun add(x:Int, y: Int): Int = x+y
(3)
val opr: (Int, Int) -> Int = {a, b -> a + b}
val opr = {a: Int, b: Int -> x+y}
(1) 코틀린의 일반적인 함수 선언
- 파라미터를 지정할 때는 형식을 지정해야한다
- 파라미터의 default value를 지정할 수 있다
- 함수를 사용할 때 파라미터 명을 지정하여 호출할 수 있다. 이때 파라미터에 값을 대입하지 않는 경우 default value가 존재하면 해당 파라미터의 값은 default value가 된다 ex) add(y=10) ⇒ x = 1, y = 10 파라미터들의 값이 대입되는 것과 같다
- 함수의 반환형을 지정해야한다
- 반환이 없다면 반환 타입을 생략해되지만 이럴 경우 반환 타입은 Unit이 된다
(2) (1)의 함수를 단일 식 함수로 선언한 것이다
(3) 람다식을 이용하여 함수를 정의한 것이다
- 1번째 케이스는 파라미터 타입과 반환 타입을 지정하고 람다식으로 함수를 작성한 것이다
- 2번째 케이스에는 반환 타입이 생략되었는데 이는 람다식의 계산 결과를 통해 반환 타입이 추론 된다
위의 예시에서 보면 한가지 특이해보이는 것이 있는데 람다식으로 작성한 함수를 변수에 할당하는것을 볼 수 있다
코틀린에서 함수는 일급 시민(first-class citizen)으로 함수를 변수에 대입할 수 있다
2. 일급시민
일급 시민은 언어에서 개체를 하나의 완전한 값으로 취급하고 다룰 수 있는 것이다
일급시민의 조건
- 변수에 할당 가능
- 함수의 인자로 전달 가능
- 함수의 반환값으로 사용 가능
- 동적으로 생성하거나 조작 가능
자바의 경우 함수는 일급시민이 아니다
물론 자바8 이후에는 람다와 함수 인터페이스가 들어왔지만 이는 함수형 프로그램을 위한 것이다
이를 통해 자바는 함수 인터페이스를 익명 클래스로 구현함으로서 함수형 프로그래밍이 가능해졌다
public class FunctionalP {
public static BiFunction<Integer, Integer, Integer> add() {
return (x, y) -> (x + y);
}
public static void main(String[] args) {
// 람다를 통한 익명 클래스 구현
BiFunction<Integer, Integer, Integer> func1 = (x, y) -> x+y;
BiFunction<Integer, Integer, Integer> func2 = add();
System.out.println(func1.apply(1,2));
System.out.println(func2.apply(3,4));
}
}
자바에서 함수가 일급시민이 아닌 이유
- 독립 객체가 아니다 독립 객체 인 것처럼 보이나 실제로는 인터페이스를 구현한 것
- 자바에서 함수는 값이 아닌 클래스 내 행동(메소드)이다
반응형
'공부' 카테고리의 다른 글
Kotlin 기본 문법 정리 - 상속 (0) | 2025.07.21 |
---|---|
Kotlin 기본 문법 정리 - 클래스(Class) (0) | 2025.07.21 |
Kotlin 기본 문법 정리 - 타입과 변수 (0) | 2025.07.17 |
Gradle 개념과 역할 (0) | 2025.07.15 |
Redis 개념 정리 및 Spring 활용 (0) | 2025.07.15 |