2020. 10. 6. 21:51

* 함수형 프로그래밍


 - 순수 함수를 작성하여 프로그램의 부작용을 줄이는 프로그래밍 기법


 - 함수형 프로그래밍에서는 람다식과 고차 함수를 사용



 - 순수 함수를 사용


 - 람다식, 고차 함수를 사용 가능



* 순수 함수

 

 - 부작용이 없는 함수 : 함수가 같은 인자에 대하여 항상 같은 결과를 반환

 

 - 순수 함수 : 부작용이 없는 함수가 함수 외부의 어떤 상태도 바꾸지 않음



예) 


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( ) 함수의 실행 결과를 예측하기 어려움


이런 함수가 순수 함수의 조건을 만족하지 못함