일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 휘낭시에
- clear
- Delete
- TypeScript
- sqld
- undefined
- 화살표 함수
- 홈베이킹
- 자바스크립트
- set
- forEach
- 오븐
- slice
- Javascript
- let
- 배열
- Has
- 객체
- SQL 전문가
- size
- SQL
- TS
- Map
- 함수
- 울산 남구 맛집
- Vue
- 울산 맛집
- 울산맛집
- vuejs
- 정보처리기사
- Today
- Total
Bae
[TypeScript] 선언형 프로그래밍과 배열(1) 본문
ㅁ 선언형 프로그래밍과 배열
- 함수형, 선언형, 명령형 프로그래밍 관계도
- 명령형 프로그래밍과 선언형 프로그래밍
입력 데이터를 얻고 가공한 다음, 결과를 출력하는 형태로 구성
1) 입력 데이터 얻기
2) 입력 데이터 가공해 출력 데이터 생성
3) 출력 데이터 출력
명령형 프로그래밍에서는 여러 개의 데이터를 대상으로 할 때 for문을 사용해서 구현
for( ; ; ) {
입력 데이터 얻기
입력 데이터 가공해 출력 데이터 생성
출력 데이터 출력
}
반면 선언형 프로그래밍은 시스템 자원의 효율적인 운용보다는 일괄된 문제 해결 구조에 더 집중함
for문을 사용하지 않고 모든 데이터를 배열에 담고, 문제가 해결될 때까지 끊임없이 또 다른 형태의 배열로
가공하는 방식으로 구현
1) 문제를 푸는 데 필요한 모든 데이터 배열에 저장
2) 입력 데이터 배열을 가공해 출력 데이터 배열 생성
3) 출력 데이터 배열에 담김 아이템 출력
- 1부터 100까지 더하기 문제 풀이
// imperative-sum.ts
// 명령형 프로그래밍 방식
let sum = 0
for(let val = 1; val <= 100;)
sum += val++
console.log(sum) //5050
// 선언형 프로그래밍
import {range} from './range' //range함수는 배열 이해하기(2) 참고
let numbers : number[] = range(1, 100 + 1)
console.log(numbers) // [1, 2, ... , 100]
- fold: 배열 데이터 접기
함수형 프로그래밍에서 폴드(fold)는 특별한 의미가 있는 용어
폴드는 [1, 2, 3, ...] 형태의 배열 데이터를 가공해 5050과 같은 하나의 값을 생성하려고 할 때 사용
배열의 아이템 타입이 T라고 할 때 배열은 T[]로 표현
폴드 함수는 T[] 타입 배열을 가공해 T타입 결과를 만들어 줌
폴드 함수의 이런 동작 방식은 마치 부채처럼 배열을 펼쳐 놓은 다음, 부채를 접어서(fold) 결과를 만들어 내는 것
다음 코드에서 fold 함수는 T타입의 배열 T[]를 가공해 타입 T의 결과값을 만듦
// fold.ts
export const flod = <T>(array: T[], callback: (result: T, val: T) => T, initValue: T) => {
let result: T = initValue
for(let i = 0; i < array.length; ++i) {
const value = array[i]
result = callback(result, value)
}
return result
}
// declarative-sum.ts
import {range} from './range'
import {fold} from './fold'
// 입력 데이터 생성
let numbers: number[] = range(1, 100 + 1)
// 입력 데이터 가공
let result = fold(numbers, (result, value) => result + value, 0)
console.log(result) // 5050
imperative-sum.ts와 declarative-sum.ts의 코드를 비교해 보면, 결과는 같지만 문제 해결 방식의 차이가 있음
명령형 방식은 시스템 자원의 효율을 최우선으로 생각, 선언형 방식은 폴드처럼 범용으로 구현된 함수를 재사용
[출처: Do it 타입스크립트 프로그래밍]
'TypeScript' 카테고리의 다른 글
[TypeScript] 배열 이해하기(2) (0) | 2022.04.14 |
---|---|
[TypeScript] 배열 이해하기(1) (0) | 2022.04.13 |
[TypeScript] 클래스 메소드 (0) | 2022.03.29 |
[TypeScript] 함수 구현 기법 (0) | 2022.03.28 |
[TypeScript] 일등 함수 살펴보기 (0) | 2022.03.21 |