명령형 언어 vs 함수형 언어
명령형 언어
- 어떤 프로그램이 상태를 갖고 실행되는 순서에 따라서 이전 상태를 바꿔가면서 계산하는 패러다임을 명령형 프로그램
함수형 언어
- 어떤 값을 주고 함수를 실행해서 변환된 결과 값이 나오는 걸 연쇄적으로 호출해서 최종 결과 값을 유도하는 방식의 프로그램
차이점
- 명령형 언어는 어떤 변수의 상태가 있고 계산한 걸 다시 그 자리에 엎어 쓰는데 이 과정을 반복해서 원하는 결과 값을 도출하는 반면
- 함수형 언어는 함수로 input을 주고 output을 준 것 그리고 그 다음에 또 다른 함수를 호출해서 연쇄적으로 결과를 도출
함수형 언어에서 모든 데이터는 변경이 불가능 해야한다는게 무슨 뜻인가?
수학에서 변수라는 것은 x라는 걸 선언했을 때 그 값이 중간에 변하지는 않음
x에 그 추상화된 값을 공통적으로 이름을 지었을 뿐이지 그게 중간에 변경되지는 않음
수학시간에 x = x + 1 이런 일이 존재하지 않음 x 랑 x + 1이 같다라는 것이 논리적으로 이해가 안됨
명령형 프로그램을 하면서 자연적으로 배우면서 x 에 어떤 값이 있고 x 에 +1 을 하여 다시 할당한다고 자연스럽게 습득
원래 variable이란 개념은 값이 변할 수 있다라기보단 어떤 값에 대해서 이름을 정하고 원하는 알고리즘을 수행해서 결과를 도출해낼 수 있는게 실제로 변수의 개념
일반적인 명령형 언어에서도 객체 상태에 대해서 불변한 상태로 만들고 개발을 할 수 있음
그렇다면 함수형 언어에서 모든 변수가 불변해야하는가?
- 함수형 언어의 극단 하스켈의 경우 변수의 값을 전혀 변경할 수 없음
- 스칼라 같이 타협한 언어의 경우 명령형 언어와 함수형 언어를 혼용해서 사용할 수 있음 (var, val)