함수형 프로그래밍 글들 보면 순수 함수(pure function)로 짜라, 부수 효과(side effect)를 줄여라 이런 말이 계속 나오는데 정의가 좀 모호하게 느껴져서요.
제가 이해한 건 이 정도예요. 같은 입력 넣으면 항상 같은 출력 나오고, 함수 밖의 뭔가를 안 건드리면 순수 함수다. 이렇게요.
function add(a, b) {
return a + b;
}
이건 순수한 거 맞죠? 근데 헷갈리는 게, 함수 안에서 console.log 찍는 것도 부수 효과인가요? 화면에 출력하는 거니까 바깥에 영향 준 거긴 한데, 리턴값은 그대로거든요. 그리고 이런 것도요.
let count = 0;
function increment() {
count += 1;
return count;
}
이건 바깥 변수를 바꾸니까 부수 효과 있는 거고 순수 함수 아닌 거 같은데 맞나요? 그럼 결국 API 호출이나 DB 저장 같은 것도 다 부수 효과일 텐데, 그런 거 없이 프로그램이 돌아갈 수가 없잖아요. 부수 효과를 아예 없애라는 게 아니라 어디로 몰아넣으라는 뜻인 건지 그 부분이 잘 이해가 안 돼요. 쉽게 설명 좀 부탁드려요.