티스토리 뷰

- js는 기본적으로 함수형 프로그래밍 패러다임을 추구,

- 추가로 객체지량 프로그래밍 패러다임도 지원(여러 패턴들의 적용은 상속과 객체를 활용하고 ts를 통해 다형성 지원)

즉, js의 핵심은 함수와 객체

 

1. 함수형 프로그래밍 패러다임의 성질/조건 

== 일급 함수 + 순수 함수

1.1 일급 함수

: "함수 변수 + 함수 파라미터 + 함수 반환" 으로 구성

- Ex) 함수 변수 할당 == 함수 표현식(Expression)

var expression = function() { console.log("hello"); }
expression(); // hello

 

- Ex) 함수 파라미터

var array = [1, 2, 3, 4];
var parameter = (element) => {
	return element * 10;
}
var calcarray = array.map(parameter);
console.log(calcarray); // [10, 20, 30, 40]

 

- Ex) 함수 반환

function returnvalue(unit){
	return (parameter) => { // return fn()
    	console.log(parameter * unit) // 12300
    }
}
var returned = returnvalue(10); // utit = 10
returned(1230); // parameter = 1230

1.2 순수 함수

: 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수

     =>  함수 외부의 상태나 데이터를 변경하지 않으며, 함수 내부에서만 계산함을 의미

1.2.1순수 함수의 특징

  1. 참조 투명성(Referenially Transoarent)
    : 함수가 외부 상태에 의존 X(의존 시, 같은 파라미터, 같은 반환 값)

  2. 부수 효과 없음(No Side-Effects)
    : 함수가 외부 상태를 변경 X (멀티 스레드에서 외부 상태를 서로 바꾸는 상황)
    • Thread-Safe
      : 멀티 스레드를 활용한 개발 시, 순수 함수 특성은 매우 중요함 
      1) 병렬적으로 수행되는 모든 함수들은 서로에게 영향을 주어선 안되고, 외부의 값을 변경해서도 안됨
      2) 하나의 작업을 여러개로 나누어 수행한 뒤 합쳤을 때와 하나의 작업을 한번에 수행할 때 같은 결과여야 함
    • 함수형 프로그래밍에서, 우리가 사용하는 모든 함수 단위들은 순수함수여야 함.

  >> 장점과 단점

순수함수의 장점 Testability - 테스트 가능
- 힌 파라미터에 일정한 반환값이 나온다면, 유닛테스트 용이
Debugging - 디버깅 가능
- 문제 발생 시, 해당 함수만 체크
Memoization - 메모이제이션 가능
- 캐싱 기능
비 순수함수의 단점 Side Effect - 부수 효과 발생
Unpredictable Output - 예상치 못한 결과
- 한 파라미터에 일정치 못한 반환 값
Difficult to Reason - 디버깅 및 프로그램 흐름 분석의 어려움

 

1.2.2순수 함수를 유지하기 위한 방법 - 불변성 이용

  • 불변성(Immutability)
    : 한 번 생성된 객체나 데이터 구조가 변경되지 않도록 하는 개념
    : 객체나 배열을 직접 수정하는 대신, 새로운 객체나 배열을 생성하여 그 값을 반환하는 방식
      ⇒ 불변 객체를 이용해 사이드 이펙트 방지
    1. Object.freeze()
    2. const + Object.freeze()

참조

ASAC 수업자료

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함