728x90
선언형 (Declarative) 프로그래밍
- 필요한 것을 달성하는 과정 하나하나 기술하는 것보다 필요한 것이 어떤 것인지 기술하는 데 방점을 두고 애플리케이션의 구조를 세워 나가는 프로그래밍 구조
- 무엇(what)을 해야할지 프로그래밍 하는 것
- 목표를 명시하고 알고리즘을 명시하지 않음
- 프로그램이 함수형 프로그래밍 언어, 논리형 프로그래밍 언어 등의 언어로 작성된 경우
- 선언형 프로그래밍 언어 : HTML, Lisp, Haskell, Prolog, SQL, XML ...
- 장점: 가독성이나 재사용성이 좋고, 오류가 적음. 프로그램 동작을 변경하지 않고도 관련 값을 대체 할 수 있음.
명령형 (Imperative) 프로그래밍
- 코드로 원하는 결과를 달성해 나가는 과정에만 관점을 두는 프로그래밍 스타일
- 어떻게(how) 행동해지 하지는지를 프로그래밍 하는 것
- 알고리즘을 명시하고 목표는 명시하지 않음
- 명령형 프로그래밍 언어: C, C++, Java, Pascal, Ruby ...
** 그 외의 혼합형 프로그래밍 언어: JS, C#, Python ...
선언형 프로그래밍 VS 명령형 프로그래밍
예시01) 모든 공백 ()을 하이픈 (-)으로 바꾸는 함수
// 명령형 방식
const str = 'THIS IS SEUNG YEON'S TISTORY';
const res = '';
for (let i=0; i<str.length; i++) {
if (str[i] === ' ') {
res += '-';
} else {
res += str[i]
}
}
console.log(res);
for 루프를 돌면서 문자열이 공백을 만날 때마다 공백을 하이픈으로 바꿔준다.
이런 구조의 프로그래밍은 우리가 원하는 것을 달성하는 방법에만 신경을 쓴다.
코드 자체를 간단히 살펴보는것만으로는 우리가 즉시 알 수 있는것이 많지 않다.
명령형 프로그래밍은 코드 안에서 벌어지는 일을 읽는 사람이 더 잘 이해할 수 있도록 돕는 주석을 많이 달아주어야 한다.
// 선언형 방식
const str = 'THIS IS SEUNG YEON'S TISTORY';
const res = str.replace(/ /g, '-');
console.log(res);
str.replace와 정규식을 사용해서 모든 공백을 하이픈으로 변경한다.
모든 공백을 하이픈으로 변경하는 자세한 방법은 replace 함수 안에 들어가고, 구체적인 절차 대신 replace(치환)라는 함수를 사용해 추상적인 개념을 표현한다.
선언적 프로그래밍의 코드 구문은 어떤 일이 발생해야 하는지 기술하고, 실제로 그 작업을 처리하는 방법은 추상화로 아랫단에 감추어진다.
예시02) 명동역에서 남산서울타워 가는법
명령형
명동역 4호선 출발
4호선 명동역 승차 후 1개역 이동 뒤 충무로역 하차
충무로역 2번 출구에서 도보 191m
충무로역 2번출구 대한극장앞 02번 버스 승차 후 6개 정류장 이동
남산서울타워 하차 후 도보 284m
남산서울타워 도착
선언형
출발: 명동역 4호선
도착: 남산서울타워
** 선언형의 경우 GPS 같은 것을 가지고 있어서, 목적지까지 가는 방법을 알고 있을 것을 가정한다.
결론: 선언형 방식은 명령형 방식을 추상화 하는것이다.
728x90
'ETC > ✏️ Study' 카테고리의 다른 글
보일러 플레이트(Boiler Plate) 이해하기 (0) | 2023.03.22 |
---|---|
npm install 할 때 --save 쓰는 이유 (0) | 2023.03.21 |
GNB, LNB? 웹사이트 용어 알아보기 (0) | 2023.03.16 |
QueryDSL vs JOOQ (0) | 2021.05.16 |
ORM (Objected Relational Mapping) (0) | 2021.05.16 |