티스토리 뷰
- 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순수 함수의 특징
- 참조 투명성(Referenially Transoarent)
: 함수가 외부 상태에 의존 X(의존 시, 같은 파라미터, 같은 반환 값) - 부수 효과 없음(No Side-Effects)
: 함수가 외부 상태를 변경 X (멀티 스레드에서 외부 상태를 서로 바꾸는 상황)- Thread-Safe
: 멀티 스레드를 활용한 개발 시, 순수 함수 특성은 매우 중요함
1) 병렬적으로 수행되는 모든 함수들은 서로에게 영향을 주어선 안되고, 외부의 값을 변경해서도 안됨
2) 하나의 작업을 여러개로 나누어 수행한 뒤 합쳤을 때와 하나의 작업을 한번에 수행할 때 같은 결과여야 함 - 함수형 프로그래밍에서, 우리가 사용하는 모든 함수 단위들은 순수함수여야 함.
- Thread-Safe
>> 장점과 단점
순수함수의 장점 | Testability | - 테스트 가능 - 힌 파라미터에 일정한 반환값이 나온다면, 유닛테스트 용이 |
Debugging | - 디버깅 가능 - 문제 발생 시, 해당 함수만 체크 |
|
Memoization | - 메모이제이션 가능 - 캐싱 기능 |
비 순수함수의 단점 | Side Effect | - 부수 효과 발생 |
Unpredictable Output | - 예상치 못한 결과 - 한 파라미터에 일정치 못한 반환 값 |
|
Difficult to Reason | - 디버깅 및 프로그램 흐름 분석의 어려움 |
1.2.2순수 함수를 유지하기 위한 방법 - 불변성 이용
- 불변성(Immutability)
: 한 번 생성된 객체나 데이터 구조가 변경되지 않도록 하는 개념
: 객체나 배열을 직접 수정하는 대신, 새로운 객체나 배열을 생성하여 그 값을 반환하는 방식
⇒ 불변 객체를 이용해 사이드 이펙트 방지
- Object.freeze()
- const + Object.freeze()
참조
ASAC 수업자료
'ASAC > 정리용' 카테고리의 다른 글
[06-01] JavaScript 기본 - 3 엔진 구동 방식 (1) | 2024.12.31 |
---|---|
[06-01] JavaScript 기본 - 2 변수 선언과 스코프 (0) | 2024.12.30 |
[04-02] HTTPS (0) | 2024.12.20 |
[04-02] JS 기반 WB의 취약성 - CSRF와 CORS (0) | 2024.12.20 |
[04-01] Storage, Session (1) | 2024.12.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- useCallback
- useState
- acas#acas7기
- ssh
- git
- react
- ASAC
- Nginx
- asac7
- asac7#asac
- useContext
- useRef
- useEffect
- asac7기
- asac#asac7기
- useLayoutEffect
- memo
- useReducer
- useMemo
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함