Back to the Basics

[Computer Science] 선언형 프로그래밍 VS 절차형 프로그래밍 본문

Computer Science

[Computer Science] 선언형 프로그래밍 VS 절차형 프로그래밍

9Jaeng 2021. 8. 5. 23:07
728x90

프로그래밍 패러다임으로는 이곳, 저곳에서 많이 들어봤듯이 명형형 프로그래밍, 선언형 프로그래밍, 절차형 프로그래밍 , 객체지향형 프로그래밍, 함수형 프로그래밍 등이 있다. 어떤 언어는 하나의 패러다임을 갖기도 하지만, 최근엔 여러 가지 패러다임을 갖는 멀티 패러다임 언어가 대부분이라고 한다.

절차형 프로그래밍 (procedure) - 대표적 언어 : c언어

  • 절차형 프로그래밍은 어떻게 할 것인가에 가깝다.
  • 절차형은 위에서 아래로 로직에 따라 코드의 순차적인 처리가 중요시되고 프로그램 전체가 유기적으로 연결 되도록 하는 프로그래밍 패러다임이다.
  • 컴퓨터와 유사한 처리구조의 코딩방식이므로 실행 속도가 빠르다는 장점이 있다.
  • 하지만 유지보수가 어렵고, 코드의 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하지 못한다.

선언형 프로그래밍 (Declarative)

  • 선언형 프로그래밍은 무엇을 할 것인가에 가깝다.
  • 어떻게? 에 대한 부분은 추상화를 하고 무엇을? 에 집중한다.
  • 필요한 것을 당성하는 과정을 하나한 기술하는 것보다 , 필요한 것이 어떤 것인지에 중점을 두고 구조를 세워나가는 프로그래밍이다.

코드로 비교를 하면 좀 더 이해하기 쉽다


// 절차형 프로그래밍 

// 각 배열의 요소에 3을 곱하는 함수를 만든다

// 결과를 넣을 빈 배열 result를 선언한다.

// for 문을 사용하여 각 요에 접근한다

// arr[i]에 3을 곱한 값을 push를 사용하여 빈 배열 result에 넣는다

// result를 return한다


function proCedure(arr){
    let result=[]
    for(let i=0;i<arr.length;i++){
        result.push(arr[i]*3)
    }
  return result
}


// 선언형 프로그래밍

// 각 배열의 요소에 3을 곱하는 함수를 만든다

// map method를 사용하여 출력한다.

function deCelareative(arr){
    return arr.map(el=>el*3)
}

 

위의 코드에서 절차형 프로그래밍은 목표하는 기능을 for 문을 사용하여 좀 더 구체적이게 코드를 구현하였고 (어떻게 에 초점) , 선언형 프로그래밍은 map을 사용하여 어떻게? 를 "감추고" 구현하려는 목적 (무엇을)에 초점을 두었다.

즉, 절차형은 for 문을 외부에 노출시켰고 선언형은 for 문을 외부로부터 노출되지 않도록 map이란 매소드로 캡슐화시킨 것이라고 생각한다. 이렇듯 캡슐화를 통해 추상화를 하고 목적 에만 집중하는 것을 선언현 프로그래밍 패러다임이라고 한다.

728x90
Comments