* 함수형 프로그래밍
- 순수 함수를 작성하여 프로그램의 부작용을 줄이는 프로그래밍 기법
- 함수형 프로그래밍에서는 람다식과 고차 함수를 사용
- 순수 함수를 사용
- 람다식, 고차 함수를 사용 가능
* 순수 함수
- 부작용이 없는 함수 : 함수가 같은 인자에 대하여 항상 같은 결과를 반환
- 순수 함수 : 부작용이 없는 함수가 함수 외부의 어떤 상태도 바꾸지 않음
예)
fun sum(a: Int, b: Int): Int {
return a + b // 동일한 인자인 a, b를 입력받아 항상 a + b를 출력 (부작용이 없음)
}
함수 안에서 함수 외부의 어떤 변수 상태도 바꾸지 않음
* 순수 함수의 조건
- 같은 인자에 대하여 항상 같은 값을 반환
- 함수 외부의 어떤 상태도 바꾸지 않음
사실 프로그램이 커지다 보면 부작용을 완벽하게 통제할 수 있는
순수 함수를 만들기 어려움
평소에 가능한 한 순수 함수에 가깝게 안전한 함수를 구현하려고 노력
예) 순수 함수가 아닌 함수의 예
fun check( ) {
val test = User.grade() // check( ) 함수에 없는 외부의 User 객체를 사용
// 변수 test는 User.grade( )의 실행 결과에 따라 달라짐
if (test != null) process(test)
}
check( ) 함수는 함수 안에서 함수 외부에 있는 User 객체의 함수인 grade( ) 실행
또 grade( )의 함수의 결과값을 test에 저장하여 조건문에 사용
심지어 process( ) 함수는 조건을 만족하지 못하면 실행되지 않음
쉽게 말해 check( ) 함수의 실행 결과를 예측하기 어려움
이런 함수가 순수 함수의 조건을 만족하지 못함