본문으로 바로가기

포스팅을 보고 공부한 내용입니다

 

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

명령형 프로그래밍과 선언형 프로그래밍에 대한 비교를 어디선가 한 번쯤은 접해봤을 거라 생각합니다. 그리고 그 둘이 실제로 무엇을 의미하는지 검색을 해보셨다면 아마 아래와 같은 정의를

boxfoxs.tistory.com

선언형 프로그래밍

프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 선언형이라고 한다

이러한 프로그래밍 기법은 목표만 설정해주고 구체적인 방법은 알려주지 않는다

명령형 프로그래밍

프로그램이 어떤 목적을 수행해야하기 위해 구체적인 방법을 명시하는 경우에 명령형이라고 한다

이러한 프로그래밍 기법은 목표는 설정하지 않고 구체적인 방법으로만 목적을 달성한다


둘의 차이를 알아보기 위해 배열에 있는 모든 원소를 구하는 프로그램을 만들어보자

명령형

    function imperative(arr) {
        const arr = [1,2,3,4,5,6,7,8,9,10];
        let sum = 0;
        for(let i=0; i<10;i++){
            sum += arr[i];
        }
        return sum;
    }

명령형은 배열의 모든 원소를 합하기 위해 배열의 모든 원소를 더하는 로직을 구현하여서 명시하고 있다

선언형

    function declarative(arr) {
        return arr.reduce((acc,v)=>v+acc,0);
    }

보는 바와 같이 선언형은 명령형에서 사용했던 구체적인 로직은 추상화 되어있거나 추상화해서 사용하고 있다


그렇다면 선언형 프로그래밍에는 무슨 이점이 있을까?

  • 가독성을 높일 수 있다

얼핏 보면 무슨 일을 하는 것인지 잘 모르겠지만 추상화 되어있는 로직이 무슨 행위를 하는지 알고 있다면 함수나 메서드만 보고도 무슨 일을 하는지 단 번에 파악할 수 있다

  • 코드의 재사용이 쉽다

imperative함수는 arr배열을 포함해서 길이가 10인 배열에서만 돌아갈 수 있게 작성되어 있어10이 아닌 다른 배열에는 재사용이 불가능하다

하지만 선언형으로 작성된 declarative함수의 경우에는 길이에 구애받지 않고 파라미터로 넘어오는 것이 배열이라면 얼마든지 재사용이 가능하다

선언형 프로그래밍은 명령형 프로그래밍의 명령 부분(구체적으로 명시되어있는 로직)을 추상화해서 사용하는 것과 같다

'Computer Science' 카테고리의 다른 글

OSI 7 계층  (0) 2021.06.27
프로세스, 스레드  (0) 2021.06.21
함수형 프로그래밍  (0) 2021.06.17
컴퓨터의 구성  (0) 2021.06.12
절차적 프로그래밍 vs 객체지향 프로그래밍  (0) 2021.06.10