Kotlin

Kotlin이란(11)

yswn1531 2023. 9. 4. 21:20
  • FP에서 재귀
    • 함수의 구현 내부에서 자신을 호출하는 함수를 정의
    • loop 대신 재귀를 사용
    • 장점
      • 반복문에 비해 복잡한 알고리즘을 간결하게 표현
    • 단점
      • 성능이느림, StackOverflowError
  • 일반적인 재귀구현
    • 보통의 재귀는 고정 메모리 할당이나 값의 변경없이 Stack Frame을 활용
    • 연산은 stack의 맨위에서 계산
    • 구현시 반드시 종료조건 1개이상
  • Tail Recusive Function(tailrec) 꼬리재귀
    • 자신의 함수를 호출하면서도 그 호출이 마지막인 것을 의미 -> 딱 1번만 실행
    • 종료 조건 1개 이상
    • 컴파일 될 때 반복문으로 바꿔서 실행됨
    • 맨 마지막 코드에서 자신을 호출 해야 함
  • Inline Function()
    • 고차(람다) 함수를 사용 할 때 발생하는 런타임 오버헤드를 없애는 효과를 낼 때 주로 사용
    • 파라미터에 람다함수를 런타임에 복사해서 끼어 넣어줌
    • 역할
      • 람다를 실행시키는 함수가 자주 호출되는 경우
      • 메모리를 효율적으로 사용해야 하는 경우
      • 함수가 고차 함수에 사용해야 하는 경우(파라미터를 인자로 받을 때)
    • Inline 함수를 남발할 경우 코드의 크기가 커질 수 있음
    • noinline
      • Inline 함수 선언에서 파라미터로 고차함수 2개 이상인 경우 inline을 적용하고 싶지 않을 때 사용
    • crossinline
      • inline 함수가 비로컬 제어(로컬에서 제어하려는 경우 / return)을 하려고 할 때 막는 용도
      • inline 함수의 람다 파라미터는 return 가능
      • 비로컬 제어가 되는 이유
        • 컴파일 시 코드가 변환되어 return 삽입 -> 리턴이 존재하는 람다함수만 종료되는 것이 아니라 상위 함수 자체가 종료
    • reified
      • inline 함수 Generic 에서 Type Erase가 진행되지 않음
      • compile 타임에 warning을 막음