목차
1. 명령형 프로그래밍과 선언형 프로그래밍
1-1. 명령형 프로그래밍이란
컴퓨터가수행할 명령들을 순서
대로 써 놓은 것
- 명령형 프로그래밍은 “어떻게 구현하는가" 에 포커스
- 우리집은 어떻게 가? 주차장 북쪽 출구를 나와 왼쪽으로 가세요. 12번가 출구에 도착할 때까지 15번 북쪽 도로를 타세요. 이케아를 끼고 우회전하세요. 직진하여 첫 번째 신호등에서 우회전 하세요. 다음 신호등을 지나 좌회전을 하세요. 우리 집은 #298입니다.
1-2. 선언형 프로그래밍이란
컴퓨터가 무엇을 해야하는 지 결과를 나타내는 것
- 실제 코드가 어떻게 동작되는지는 알 수 없다. 단 우리가 원하는 모습으로 동작이 이루어짐
- 선언형 방식 (WHAT) : 내 주소는 98 West Immutable Alley, Eden, Utah 84310입니다.
- 선언형 방식이 동작하기 위해서는 명령형으로 “어떻게"가 구현된 것들이 추상화 되어 있어야만한다.
- 고차함수
map, filter, reduce
등이 대표적인 추상화 구현 함수
대표적인 사례
- HTML, SQL 쿼리문, CSS
선언형프로그래밍의 장점
새로운 요구사항
및유지보수
에 큰 장점.- map, filter, reduce등 기본함수가 동일하여 “무엇”에 해당하는 부분만을 바꾸어 재사용가능하다!
- 명령형프로그래밍에서는 모든 코드가 제각기이기 때문에 확장성을 가지기 어렵다.
1-3 예시를 통한 선언형 프로그래밍의 장점
예시1. Double 함수
- 명령형 프로그래밍
for문, result.push
: 어떻게 처리해야하는지를 묘사 function double(arr){ let result = []; for(let i = 0; i < arr.length; i++){ result.push(arr[i] * 2) } return result } double([1,2,3]) // [2,4,6]
- 선언형 프로그래밍
number ⇒ number * 2
: 무엇을 해야하는지, 원하는 결과만을 선언 function double(arr){ return arr.map(number => number * 2) }
예시2. type검사 추가 상황 시
- 함수형 프로그래밍
- 타입을 검사하는 과정을 추가함
- 선언형 프로그래밍
filter(param => typeof param === "number")
: 원하는 타입만을 찾는 것을 선언function double(arr){ return arr.filter(param => typeof param === "number") .map(number => number * 2) } double([1,2,'str',udnefined,3) => ([2,4,6])
예시3. 토글버튼 만들기
- 함수형 프로그래밍
- 선언형 프로그래밍
출처: