Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ 2주차 생각 과제 ] 명령형 프로그래밍과 선언형 프로그래밍 #9

Merged
merged 1 commit into from
Mar 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions article/명령형과선언형프로그래밍.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# 명령형 프로그래밍과 선언형 프로그래밍

🖤 명령형 프로그래밍과 선언형 프로그래밍에 대하여 여러분의 생각을 마음껏 작성해주세요

## 1️⃣ 명령형 프로그래밍과 선언형 프로그래밍은 무엇일까?

### (1) 명령형 프로그래밍 (Imparative Programming) ⇒

> **✨How✨**

- 프로그램의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종
- 즉, 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것
- 예시 ) 배열을 파라미터로 받고, 각 요소들의 값에 2를 곱하는 함수를 명령형으로 작성
```jsx
// 명령형 방식
function double(arr) {
let results = [];
for (let i = 0; i < arr.length; i++) {
results.push(arr[i] * 2);
}
return results;
}
```

### (2) 선언형 프로그래밍 (Declarative Programming)

> **✨What✨**

- 원하는 결과를 묘사하는 방식으로 코드를 작성하는 프로그래밍 패러다임의 일종
- 장점 :
- 한 눈에 읽을 수 있어 가독성이 높다
- 상황에 독립적이어서 재사용하기 쉽다.
- 참조 투명성 : 해당 언어에서 문제가 발생해도 다른 것에 영향을 주지 않는다.
- 예시 ) 배열을 파라미터로 받고, 각 요소들의 값에 2를 곱하는 함수를 선언형으로 작성

```jsx
// 선언형 방식
function double(arr) {
return arr.map((item) => item * 2);
}
```

⇒ javascript 내장 함수 map을 통해 같은 기능을 수행한 예시이다. map의 내부가 어떻게 되어 있는지 모르지만, map 내부에 집중함으로써 상태 변경에 대한 직접적인 간섭 없이 ‘무엇’이 일어날지에 집중하는, 선언형 방식의 코드이다.

⇒ 위 예시에서 볼 수 있듯이 **선언형 프로그래밍은 명령형 프로그래밍의 추상화(Abstraction)이다.**

<br/>

## 2️⃣ 각각의 방식을 따르는 언어는 무엇이 있을까?

### (1) 명령형 프로그래밍

- 포트란
- ALGOL
- C언어
- Pascal

### (2) 선언형 프로그래밍

- SQL
- HTML & XML
- Prolog
- Haskell

<br/>

## 3️⃣ 각각의 방식은 어떤 상황/유형에 쓰는 것이 적합할까?

명령형 혹은 선언형 프로그래밍 중 어느 하나만이 정답이 아니라, 해결하고자 하는 문제의 성격, 요구사항 등을 고려해 각 상황에 맞는 방식을 선택해야 한다.

명령형 프로그래밍은 프로그램의 세부적인 제어 흐름을 결정할 수 있어 정확한 결과를 얻을수 있다. 따라서 정확도가 중시되는 상황에서는 제어 흐름을 명시하는 명령형 프로그래밍 방식이 더 적절하다 생각한다.

반면 선언형 프로그래밍은 추상화를 통해 상황에 독립적이며 내부 상태 변경에 대해 직접적인 영향을 주지 않기 때문에, 유지보수가 잦고 재사용이 필요한 상황 및 프로젝트에 쓰기 적절한 방식이라 생각한다.

<br/>

## 4️⃣ JavaScript 에서는 어떤 방식을 선택하는 것이 좋을까?

상황에 따라 다르겠지만, javascript를 사용할 때 명령형 보다 선언형 방식으로 더 자주 쓰는것 같다.

특히 프로젝트 구현에는 유지보수 및 재사용이 중요하기 때문에 추상화를 사용하는 선언형 방식을 더 선호하는 편이다.

또한 코드의 가독성도 중요하다 생각하여, 캡슐화 및 추상화를 사용하여 보다 읽기 쉬운 코드를 짜도록 노력하는 편이다.