일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- aws
- APM
- Elasticsearch
- kotlin
- 정보처리기사 실기 기출문제
- 정보처리기사 실기
- IntelliJ
- Pinpoint
- Kubernetes 자격증
- 코틀린 코루틴의 정석
- 기록으로 실력을 쌓자
- kotlin querydsl
- minikube
- CloudWatch
- MySQL
- mysql 튜닝
- tampermonkey
- 공부
- Java
- PETERICA
- Kubernetes
- Spring
- 정보처리기사실기 기출문제
- kotlin spring
- CKA
- AWS EKS
- kotlin coroutine
- CKA 기출문제
- AI
- Linux
- Today
- Total
피터의 개발이야기
명령형 vs 선언형 프로그래밍 차이 본문
프로그래밍 설명 중에 명령형 프로그래밍과 선언형 프로그래밍에 대해 자주 접하게 된다.
선언형은 '무엇'을 할 것인지를 말하고,
명령형은 무언가를 작업하기 위한 '방법'을 뜻한다.
Declarative(선언)
선언형의 대표적인 언어는 HTML,SQL 이 있다.
HTML
<p>
<span style="color: #666666;">
웹페이지는 제목, 본문, 폰트, 그림과 같이 "무엇"을 보여줄 것인지를 묘사하고 있다.
</span>
</p>
HTML은 브라우저에 어떻게 글을 표시를 위 코드를 이해 정의내리고 있다.
이 코드 구문이 어떻게 동작하는지에 대해 신경쓰지 않고 이를 사용한다.
SQL
SELECT * FROM Users WHERE Country='KOREA’;
데이터 처리를 "어떻게" 처리하는 것보다 "무엇을" 수행하는 지에 더 집중되어 있다.
다르게 설명하면, DB는 선언적 SQL을 통해 해석하여 어떻게 데이터를 만들지 PLAN을 추상화 하여 데이터를 가공한다.
Imperative(명령)
명령형 언어는 C, C++,C#, PHP, JAVA와 Assembly, Javascript가 있다.
컴퓨터가 어떻게 동작하는지를 말해주어 데이터의 상태를 변화시크는 구문들에 초점을 둔다.
일반적으로, 조건문, 반목문 그리고 클래스 상속의 사용이 그것이다.
Javascript
// 배열을 파라미터로 받고 각 요소들의 값에 2를 곱하는 함수
function double (arr) {
let results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
어떻게 데이터를 받아서 가공할 지에 대해서 설명하고 있다. 명시적으로 배열을 반복하고 원하는 데이터 가공 방법에 대한 단계를 설명하고 있다.
때로는 두 패러다임이 공존하는 것처럼 보이기도 한다.
위의 javascript코드를 선언적인 형태로 바꾸어보면 다음과 같다.
function double (arr) {
return arr.map((item) => item * 2)
}
프로그램이 함수형 프로그래밍, 논리형 프로그래밍, 혹은 제한형 프로그래밍 언어로 쓰이는 경우에 선언형이라고 한다.
Spring프레임워크, JavaScript라이브러리처럼 명령어로 된 언어를 선언적인 함수로 만들어 사용할 때가 있다.
즉, 비선언형인 부분을 캡슐화하여 간편하고 선언적인 형태로 사용할 수 있다.
이러한 선언적인 형태로 짜여진 코드는 가독성과 재사용성을 높일 수 있다는 매력이 있다.
요즘 개발언어들은
- "어떻게"가 아닌 "무엇"을 달성할지를 정의하고
- 그 "무엇을" "어떻게" 달성할지는 추상화되어 있는 것을 사용하거나, 추상화시킨다
- 선언형 방식으로 코드를 작성하면 재사용성이 높아지고, 코드의 간결성을 그대화 할 수 있다.
ㅁ 함께 보면 좋은 사이트
'개발이야기' 카테고리의 다른 글
기록으로 실력을 쌓자 (0) | 2020.12.12 |
---|---|
Java 개발자라면 꼭 보아야할 동영상 (0) | 2020.12.12 |
근로기준법 영문 용어 정리 (0) | 2020.12.11 |
SOAP과 REST 비교 (0) | 2020.12.10 |
할건 하고 놀자! (0) | 2020.11.19 |