본문 바로가기
  • 🦄 창민이 개발일지
Computer Science

순수함수(Pure Function)

by 창민이 개발일지 2024. 4. 10.

순수함수란?

순수함수는 부수효과(side Effects)가 발생하지 않는 함수

 

부수함수(Side Effects)란?

  • 함수가 만들어진 목적과는 다른 효과 또는 부작용으로 함수에 예상할 수 없는 일이 생길 가능성이 존재한다면 이 함수는 부수 효과를 가질 수 있는 함수
  • 함수 안팎에서 뭔가 예기치 않은 일이 생길 가능성이 있는 함수는 순수 함수가 될 수 없습니다.
  • 불순 함수 예)
    • 비동기 요청을 보내는 함수: 요청이 실패할 수 있기 때문에 순수함수가 안됨
    • 입력을 포함하는 함수: 입력에 따라 출력이 달라질 가능성이 있기 때문에 안됨
    • 매개변수로 들어온 값을 직접 변경하는 함수: 반환값이 달라지기 때문에 안됨

 

불순 함수(impure funct) 코드

// http 요청을 보내는 함수 : 순수함수 될 수 없음
const getData = () => {
  axios.get('http://data.url')
  .then(...)
  .catch(...)
}

// 입력 내포한 함수 : 순수함수 될 수 없음
const typeInput = () => {
const input = prompt("Message");
  return input;
}

// 파라미터를 직접 변경하는 함수 : 순수함수 될 수 없음
const changeParams = (arr, elem) => {
  arr.push(elem);
  return arr;
}

 

순수 함수(impure funct) 코드

const num_arr = [1, 2, 3, 4, 5];

// 매개변수의 값을 직접 변경하는 불순함수
const addSixImpure = (arr) => {
  // 매개변수에 직접 6 추가
  arr.push(6);
  return arr;
};

// 매개변수를 복사한 값을 변경하는 순수함수
const addSixPure = (arr) => {
  // 펼침 연산자로 새로운 배열에 6 추가
  newArr = [...arr, 6];
  return newArr;
};

// 매개변수 arr에 6이 있는지 확인하는 함수
const hasSix = (arr) => {
  if (arr.includes(6)) {
    return true;
  } else {
    return false;
  }
};

const new_arr = addSixImpure(num_arr);
console.log(hasSix(num_arr)); // true : 불순 함수

const new_arr = addSixPure(num_arr);
console.log(hasSix(num_arr)); // false : 순수 함수

 

사용 사례

  • 프론트엔드 프레임워크 계열 상태 관리 (Hooks, Redux 등)
  • 함수형 프로그래밍 패러다임에서 핵심 개념으로 사용

 

'Computer Science' 카테고리의 다른 글

Mysql 풀텍스트인덱스(Full-Text Index)  (0) 2024.05.08
클로저(Closure)  (0) 2024.04.24
코루틴(Coroutine)  (0) 2024.04.24
코틀린(Kotlin)  (0) 2024.04.07
병렬처리(Parallel Processing)  (0) 2023.04.06