diff --git "a/article/\353\252\205\353\240\271\355\230\225\352\263\274\354\204\240\354\226\270\355\230\225\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" "b/article/\353\252\205\353\240\271\355\230\225\352\263\274\354\204\240\354\226\270\355\230\225\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" new file mode 100644 index 0000000..0936c2d --- /dev/null +++ "b/article/\353\252\205\353\240\271\355\230\225\352\263\274\354\204\240\354\226\270\355\230\225\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215.md" @@ -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)이다.** + +
+ +## 2️⃣ 각각의 방식을 따르는 언어는 무엇이 있을까? + +### (1) 명령형 프로그래밍 + +- 포트란 +- ALGOL +- C언어 +- Pascal + +### (2) 선언형 프로그래밍 + +- SQL +- HTML & XML +- Prolog +- Haskell + +
+ +## 3️⃣ 각각의 방식은 어떤 상황/유형에 쓰는 것이 적합할까? + +명령형 혹은 선언형 프로그래밍 중 어느 하나만이 정답이 아니라, 해결하고자 하는 문제의 성격, 요구사항 등을 고려해 각 상황에 맞는 방식을 선택해야 한다. + +명령형 프로그래밍은 프로그램의 세부적인 제어 흐름을 결정할 수 있어 정확한 결과를 얻을수 있다. 따라서 정확도가 중시되는 상황에서는 제어 흐름을 명시하는 명령형 프로그래밍 방식이 더 적절하다 생각한다. + +반면 선언형 프로그래밍은 추상화를 통해 상황에 독립적이며 내부 상태 변경에 대해 직접적인 영향을 주지 않기 때문에, 유지보수가 잦고 재사용이 필요한 상황 및 프로젝트에 쓰기 적절한 방식이라 생각한다. + +
+ +## 4️⃣ JavaScript 에서는 어떤 방식을 선택하는 것이 좋을까? + +상황에 따라 다르겠지만, javascript를 사용할 때 명령형 보다 선언형 방식으로 더 자주 쓰는것 같다. + +특히 프로젝트 구현에는 유지보수 및 재사용이 중요하기 때문에 추상화를 사용하는 선언형 방식을 더 선호하는 편이다. + +또한 코드의 가독성도 중요하다 생각하여, 캡슐화 및 추상화를 사용하여 보다 읽기 쉬운 코드를 짜도록 노력하는 편이다.