jhhan의 블로그

Kotlin(4) - 함수 관련 본문

Kotlin

Kotlin(4) - 함수 관련

jhhan000 2020. 7. 8. 13:14

Kotlin에 대해 적는 4번째 포스트입니다.

 

Kotlin은 Java와 100% 호환이 가능한 언어라고 다들 알고 계실겁니다.

그리고 kotlin은 객체지향 프로그래밍과 함수형 프로그래밍을 모두 지원하는 다중 패러다임 언어입니다.

다들 객체지향 프로그래밍은 아실 것이라고 생각하기 때문에 함수형 프로그래밍에 대해 알아보겠습니다.

 

1. 함수형 프로그래밍(FP: Functional Programming)

함수형 프로그래밍은 함수 자체를 다양하게 사용하는 기법입니다.

특징은 다음과 같습니다.

  • 코드 간략 + 테스트나 재사용성 증가
  • 람다식, 고차 함수를 이용해 구성
  • 순수 함수 사용

 

2. 순수 함수(pure function)

  • 순수 함수는 부작용(side effect)이 없는 함수 라고도 말한다.
  • 동일한 입력값에 대해서 항상 같은 결과를 반환한다.
  • 값이 예측할 수 있어서 결정적(deterministic)이라고 한다.
fun calculation(a: Int, b:Int): Int {
	return a + b
}

위와 같은 함수에 대해서는 입력값이 동일하다면 결과도 항상 동일하기 때문에 순수함수라고 할 수 있습니다.

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

이런 식이어도 결과값을 살펴보면 동일한 입력값에 대해 동일한 결과가 나오므로 역시 순수 함수라고 할 수 있습니다.

const val global = 5

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

그 대신 다음과 같은 함수라면 global 값에 따라 결과값이 바뀔 가능성이 있기 때문에 

순수 함수라고 할 수 없습니다.

그렇다면 순수 함수의 조건은 다음과 같습니다.

  1. 같은 입력값에 대해 항상 같은 값 반환
  2. 함수 외부의 상태는 바꾸지 않음

그 다음 순수함수를 사용하면 이점이 있습니다.

  • 입력과 내용을 분리 & 모듈화 -> 재사용성 증가
  • 병행 작업에 안전
  • 테스트, 디버깅 등에 유리

 

3. 람다식

람다식은 함수형 프로그래밍에 대표적인 형태라고 할 수 있습니다.

람다식의 특징은 다음과 같습니다.

  • 익명 함수
  • 이름 없이 사용 & 실행 가능
  • 입력값으로 넣거나 결과값으로 반환 가능

 

4. 일급 객체(First Class Citizen)

일급 객체에 대해서는 아직 제가 잘 알지 못해서 못 쓸 것 같습니다.

어느 정도 안 후에 다시 수정하겠습니다.

 

5. 고차 함수(high-order function)

이 부분도 사실 어렵습니다...

그래서 설명보다는 바로 예시로 가겠습니다.

fun highFunction(sum: (Int, Int) -> Int, a: Int, b: Int): Int{
    return sum(a, b)
}

fun main() {
	val result = highFunction({x, y -> x + y}, 4,8)
    println(result)
}

입력값에 함수가 또 들어갔습니다.

그래서 계산한 결과를 살펴본다면

4+8=12 라는 결과가 잘 나옵니다.

이 함수를 다른 방법으로 살펴보겠습니다.

fun highFunction(sum: (Int, Int) -> Int, a: Int, b: Int): Int{
    return sum(a, b)
}

fun highFunction2(a: Int, b: Int, sum: (Int, Int) -> Int): Int{
    return sum(a, b)
}

fun main() {
  val result = highFunction({x, y -> x + y}, 4,8)
  val result2 = highFunction2(3,8) {x, y -> x + y}
  println(result)
  println(result2)
}

약간 자리 변경이 되었습니다.

그리고 입력값인 함수가 맨 뒤에 설정되는 경우 highFunction2 부분에서

highFunction2(숫자1, 숫자2) { 식 } 이런 식으로 쓸 수 있다는 것을 알 수 있습니다.

그리고 계산한다면

덧셈 결과가 잘 나옵니다.

 

순수함수, 람다식, 고차함수

이들을 이용하여 생산성을 높이는 프로그래밍 방법이라고 이해하시면 될 것 같습니다.

 

이번 포스트는 여기서 마치겠습니다.

'Kotlin' 카테고리의 다른 글

Kotlin(3) - Null  (0) 2020.07.06
Kotlin(2) - 변수  (0) 2020.06.28
Kotlin 시작하기  (0) 2020.06.27