[JS] 순수함수(Pure Function)

2024. 4. 29. 09:36·프로그래밍 언어/JavaScript

순수함수

함수형 프로그래밍 패러다임의 한 부분이며, 두 가지 규칙을 가진다.

 

 

 

1. 같은 입력값이 주어졌을 때, 언제나 같은 결괏값을 리턴한다.

const add = (x,y) => x + y;
console.log(add(10,20)); // 30

 

 

 

2. 사이드 이펙트를 만들지 않는다.

const z = 1;
const sum = (x,y) => x + y + z;
console.log(sum(10,20));

사이드 이펙트는 없지만, 이렇게 함수 밖의 스코프에 접근하는 것도 이 함수를 inpure함수로 만든다.

 

 

 

 

 

inpure 함수의 예

예시 1

let x = 0;
const numberUp = () => x += 1;
console.log(numberUp()); // 1
console.log(x); // 1

외부에서 선언된 변수가 변경되었다. 즉 사이드 이펙트가 발생했다.

 

let x = 0;
const pureNumberUp = (num) => num += 1;
console.log(pureNumberUp(x)); // 1
console.log(x); // 0

순수함수로 변경했다. x의 값은 그대로이다.

 

 

 

 

예시 2

const alphabetArray = ['A', 'B'];
const addItemToArray = (originalArray, newItem) => {
	originalArray.push(newItem);
	return originalArray;
}

console.log(addItemToArray(alphabetArray, 'C')); // [‘A’, ‘B’, ‘C’]
console.log(alphabetArray); // [‘A’, ‘B’, ‘C’]

원본 배열까지 같이 변경되었다. 사이드 이펙트의 발생!

 

const alphabetArray = ['A','B'];
const pureAddItemToArray = (originalArray, newItem) => {
	return [...originalArray, newItem]
}

console.log(pureAddItemToArray(alphabetArray, 'C')); //  [‘A’, ‘B’, ‘C’]
console.log(alphabetArray); // [‘A’, ‘B’]

얕은 복사를 통해 배열을 복사 후 return 한다. 이렇게 하면 원본 배열의 변경이 발생하지 않는다.

 

 

 

 

 

순수함수를 사용하는 이유

1. 클린 코드를 위해서

2. 테스트를 쉽게 하기 위해서

3. 디버그를 쉽게 하기 위해서

4. 독립적인 코드를 위해서

 

 

 

 

 

순수함수를 사용하면

특정 함수가 다른 함수에 미치는 예기치 못한 영향을 최소화하고, 함수를 만들고 실행할 때 어떤 결괏값을 리턴할지 예측할 수 있다.

 

프로젝트를 생성하기 위해 inpure 함수도 당연히 필요하나, pure 함수로 처리할 수 있는 부분은 최대한 pure 함수로 만들어서 사용하는 것이 좋다. 

'프로그래밍 언어 > JavaScript' 카테고리의 다른 글

[JS] Prototype  (0) 2024.04.29
[JS] Callback, Promise, Async/Await  (0) 2024.04.29
[JS] Intersection observer  (0) 2024.04.27
[JS] 함수 선언식과 표현식, 즉시 실행 함수(IIFE)  (0) 2024.04.26
[JS] 얕은 비교, 깊은 비교 / 얕은 복사, 깊은 복사  (0) 2024.04.26
'프로그래밍 언어/JavaScript' 카테고리의 다른 글
  • [JS] Prototype
  • [JS] Callback, Promise, Async/Await
  • [JS] Intersection observer
  • [JS] 함수 선언식과 표현식, 즉시 실행 함수(IIFE)
tteokbokki-master
tteokbokki-master
공부하며 알아가는 걸 조금씩 정리하고 있어요
  • tteokbokki-master
    용로그
    tteokbokki-master
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 프로그래밍 언어
        • HTML & CSS
        • JavaScript
        • React 기초
        • 파이썬 기초
        • TanStack-Query
        • C언어 기초
        • git
        • 리눅스
        • 코딩테스트 공부
      • 개발 지식
      • 언어학 N
        • 의미론 N
      • 회고 및 기록
      • 프로젝트
        • TodoList 만들기
        • 학수고대 프로젝트
      • 기타
        • [JS-0기] 한입 FE 챌린지
  • 인기 글

  • 글쓰기 / 관리
  • hELLO· Designed By정상우.v4.10.3
tteokbokki-master
[JS] 순수함수(Pure Function)
상단으로

티스토리툴바