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을 막음