✅ 함수형 프로그래밍

  • 코틀린은 다중 패러다임 언어로 함수형 프로그래밍과 객체 지향 프로그래밍을 모두 지원하고 있음.
  • 함수 자체로 여러 기법을 구현
  • 함수를 쓰게 되면, 코드를 간략히 할 수 있으며 테스트나 재사용성이 증가함
  • 람다식, 고차 함수를 사용해 구성
    : 함수에 기본 데이터 형이 아니라, 함수를 input, output으로 있음
  • 순수 함수
    : 함수를 인수로 사용하려면, 순수 함수 개념을 만족해야 함.

✅ 순수 함수 이해

  • ✋🏻 부작용(Side-Effect)가 없는 함수
    : 동일한 입력 인자에 대해서는 항상 같은 값을 출력/반환하는 함수
    : 값이 예측이 가능해 결정적(deterministic)임

  • ✋🏻 순수 함수의 조건
    : 같은 인자에 대하여 항상 같은 값을 반환.
    : 함수 외부의 어떤 상태도 바꾸지 않음. (함수 외부의 변수를 바꾸는 것도 포함)
    : 람다식에 순수함수가 필요

    🤔 순수함수, 왜 사용하나요?
    입력과 내용을 분리하고 모듈화하므로 재사용성이 증가하기 때문
    : 여러 함수와 조합해도 부작용이 없다.
    특정 상태에 영향을 주지 않으므로 병행 작업시 안전!
    함수의 값을 추적하고, 예측할 수 있으므로 테스트나 디버깅에서 유리

순수함수를 함수형 프로그래밍에 적용하면, 아래와 같은 장점과 활용 구조를 갖는다.

  • 함수를 매개변수, 인자에 혹은 반환값에 적용(고차 함수)
  • 함수를 변수나 데이터 구조에 저장
  • 유연성 증가

✅ 람다식

  • 이름이 없는 함수(람다 대수로부터 유래)
  • 익명 함수의 형태 중 하나로, 이름 없이 사용 및 실행이 가능
  • 람다식은 고차 함수에서 인자로 넘기거나, 결과 값으로 반환 등을 할 수 있음

✅ 일급객체(First Class Citizen)

  • 권한이 좀 더 많은 객체
  • 함수의 인자로 전달 가능
  • 함수의 반환값에 사용 가능
  • 변수에 담을 수 있음
  • 일급객체가 함수일 수도 있으며, 코틀린에서 함수는 1급 객체로 다룬다. 이를 1급 함수라고도 한다.

✅ 고차함수(high-order function)

  • 함수에 또 다른 함수를 넣을 수 있음
  • 매개변수에 람다식이 포함된 형태
    아래는 고차함수의 간단한 예시이다.
fun main() {
 println(highFunc({x,y -> x+y}, 10, 20) //람다식, 정수형 변수 2개 선언
}
fun highFunc(sum: (Int, Int) -> Int, a:Int, b: Int){return sum(a,b)}

→ highFunc 함수를 선언할 때 Sum이라는 함수 추상화 후, 실제 사용할 때 람다식을 이용하여 구체화한다고 보면 됨.

  • 람다식이 함수의 마지막 매개변수에 위치할 경우, 아래와 같이 표현할 수도 있음.
fun main(){
	println(highFunc(10,20){
    x,y -> x+y
    }
}
fun highFunc(a:Int, b: Int, sum: (Int, Int) -> Int):Int
{return sum(a,b)}
profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글