일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- https://product.kyobobook.co.kr/detail/S000001952246
- 출처는 코딩앙마
- 나는 flux좋아...
- 출처는 코딩애플
- 김영한쌤
- 출처 : 한입크기로 잘라먹는 타입스크립트
- 자바스크립트 딥다이브
- 출처 : https://www.boostcourse.org/
- 큰돌의 CS책
- 함수형 코딩
- 리엑트를 다루는 기술
- 쏙속 들어오는 함수형코딩
- 유틸리티타입은 공식문서 자주 보자
- 쏙쏙 들어오는 함수형코딩
- 흥달쌤
- 에릭 노먼드
- 쏙쏙들어오는함수형코딩
- 출처 : 코딩애플
- 출처 : 자바스크립트 딥다이브
- 오종택개발자님
- 에릭노이먼
- 고등애플
- 갈길이 멀구나
- 로버트 C마틴
- 에릭 노이먼
- 이웅모
- 출처 : 코딩앙마
- 쏙쏙 들어오는 함수형 코딩
- 클린코드다시읽기
- 생코님Redux
- Today
- Total
틈틈히 메모중
[함수형 코딩#10~#11] 일급함수 본문
일급함수(first-class function) ? 함수를 "일급객체"로 여긴다는 의미
일급 객체 ? 아래 조건 만족하는 객체
1. 무명의 리터럴로 생성할 수 있음. (런타임에 생성가능하다)
2. 변수나 자료구조(객체, 배열등)에 저장 가능.
3. 함수의 매개변수에 전달 할 수 있음
4. 함수의 반환값으로 사용가능
자바스크립트의 함수는 위 조건을 모두 만족하기 때문에 일급객체 임
ㄴ 함수를 객체와 동일하게 쓸 수 있다는 뜻
ㄴ 객체는 값이기 때문에 함수도 값과 동일하게 취급
ㄴ 함수는 값을 사용할 수 있는 곳은 어디든 리터럴로 정의가능하고, 런타임에 함수 객체로 평가됨
ㄴ 일급객체 함수의 특징 : 일반 객체처럼 함수의 매개변수로 전달 가능 / 함수의 반환값으로 사용가능 (고차-콜백함수생김)
=> 함수형 프로그래밍이 가능해짐
일급인 것과 일급이 아닌 것 구별하기
- 자바스크립트에서 일급이 아닌 것 => 일급이 아닌 기능은 함수로 감싸면 일급으로 만들수 있음
1. 수식연산자
2. 반복문
3. 조건문
4. try/ catch문
- 일급으로 할 수 있는 것
1. 변수에 할당
2. 함수의 인자로 넘기기
3. 함수의 리턴값으로 받기
4. 배열이나 객체에 담기
- 데이터 지향(data orientation)
ㄴ> 자바스크립트에서는 객체가 해시맵과 같은 역할을 해 줌
ㄴ> 데이터 그대로 사용하는 것
ㄴ> 이벤트와 엔티티에대한 사실을 표현하기위해 일반 데이터 구조를 사용하는 프로그래밍 형식
동적타입 언어 vs 정적타입 언어
- 정적타입 : 컴파일 할때 타입을 검사함 (ex. JAVA)
- 동적타입 : 컴파일할 때 타입검사 안하고, 런타임에 타입을 확인함 (ex. Javascript)
ㄴ> 다만, 타입시스템 자체가 언어마다 다른점을 생각해 볼 필요 있음
고차함수(higher-order function)
매개변수를 통해 함수 외부에서 콜백함수를 전달 받은 함수 , 함수를 리턴하는 함수
콜백함수는 고차함수에 의해 호출되고, 고차함수는 필요에 따라 콜백함수에 인수 전달하기도 함
//리팩토링 전
fucntion arraySet (arr, idx, value){ //카피온라이트 적용된 상태
let copy = arr.slice(); //앞부분
copy[idx] = value;
return copy; //뒷부분
}
//앞부분과 뒷부분이 다른 함수에서도 똑같이 쓰이는 경우(중복) 발견 해서 리팩토링 시도!
//리팩토링 후
//공통의 로직은 미리 정의해 두고,
//경우에 따라 변경되는 로직은 추상화 해서 외부에서 내부로 전달하기
function arraySet(arr, idx, value){
return withArrayCopy(arr, function(copy){
copy[idx] = value; //콜백함수
})
}
function withArrayCopy (arr, modify){ //고차함수
let copy = arr.slice();
modify(copy);
return copy;
}
콜백함수
함수의 매개변수를 통해 다른 함수 내부로 전달되는 함수
비동기처리 뿐 아니라 배열 고차함수에서도 사용
setTimeout(()=>{ //콜백함수를 사용한 비동기처리(이벤트 처리, ajax통신,타이머함수...)
console.log('1초지남');
},1000);
let arr = [1,2,3,4,5];
let res = arr.map(function(item){ //콜백함수를 사용하는 고차함수 map(reduce, filter...etc)
return item + 1;
})
console.log(res); //[2,3,4,5,6]
'함수형 프로그래밍 > 쏙쏙 들어오는 함수형 코딩' 카테고리의 다른 글
[함수형 코딩#14] 중첩데이터에 함수형도구 사용 (0) | 2023.07.12 |
---|---|
[함수형 코딩#12~#13] 함수형 반복 / 체이닝 (0) | 2023.07.09 |
[함수형 코딩#8 ~ #9] 계층형 설계 (0) | 2023.07.05 |
[함수형 코딩#1~#6] 느낀점 (0) | 2023.07.02 |
[함수형 코딩#6] 변경가능한 데이터 구조를 가진 언어에서 불변성 유지하기 (0) | 2023.07.01 |