명령형 프로그래밍 vs 선언형 프로그래밍

fe_sw·2022년 12월 17일
0

Programming

목록 보기
3/3

두 프로그래밍 기법은 무엇(What)을 할 것인지, 어떻게(How) 할 건지 중에 어디에 중점을 두냐에 따라 나뉜다.

예시)

명령형(HOW): 집을 나가서 오른쪽으로 50미터 직진후 CU 에서 오른쪽으로 꺾어. 수할인마트에 들어가서 삼겹살 집어서 계산대로 가. 그러고 만원짜리 하나 드리고 100원 거슬러 받아와.

선언형(HOW): 삼겹살 사와

물론 선언적 방식의 접근을 위해서는 명령형 방식으로 '어떻게 접근하는가'가 먼저 추상화가 되어있어야 한다.

삼겹살을 사와라고 심부름을 시키는 것은 마트가 어디인지 알고, 거래를 할줄 안다 등등을 알고 있다고 전제하는 것이다.

참고

명령적 언어: C, C++, Java
선언적 언어: SQL, HTML
Mix: Javascript, C#, Python

명령형 프로그래밍

무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 프로그래밍 방식


// 배열을 파라미터로 받고 각 요소들의 값에 2를 곱하는 함수
function double (arr) {
  let results = []
  for (let i = 0; i < arr.length; i++){
    results.push(arr[i] * 2)
  }
  return results
}

위의 코드는 명령형 프로그래밍 방식으로 작성한 코드이다.
명시적으로 배열을 반복하거나 원하는 기능을 수행하는 방법에 대한 단계를 설명하고 있다.

위 코드는 '상태'의 일부를 변경하고 있다 ('상태' : 기본적으로 메모리에 저장된 것에 대한 정보)

예시

절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++)
객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)

선언형 프로그래밍

=어떻게 할건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 프로그래밍 방식

함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)


function double (arr) {
  return arr.map((item) => item * 2)
}

위의 코드는 명령형 프로그래밍에서 나왔던 코드를 선언형으로 변환한 코드인데, 명령형에서 기능을 수행하는것을 명시적으로 나타냈다면 선언형은 명령형 방식이 추상화된 것을 알 수 있다.

선언형 프로그래밍의 또 다른 이점은 프로그램이 상황에 독립적이다.
종종 명령형 코드는 현재 상태의 컨텍스트에 의존하기 때문에 재사용하기 어려운 경우가 많다.

하지만 선언형 코드는 해당 코드가 달성하고자 하는 것이 무엇인지 만을 나열하기 때문에 동일한 코드를 다른 프로그램에서 재사용하기 쉽다.

예시

함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)

0개의 댓글