명령형(imperative )과 선언형(declarative) 프로그래밍 / 객체 지향형(OOP)과 함수형 프로그래밍

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

🔥명령형프로그래밍

명령형 프로그래밍 > 절차형(Procedure) 은 무엇을 어떻게 할 것인가에 가깝다. (명령형 부분집합 절차형)

즉, 코드로 원하는 결과를 달성해 나가는 과정에 중점을 두는 프로그래밍 방식이다.

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

위 코드처럼 절차형 프로그래밍 방식은 배열 요소의 곱하기 2 한 값을 구하기 위해 반복문으로 배열 요소 하나하나에 접근, 계산하는 방법을 구현하고 있다.

🔥선언형 프로그래밍

선언형 프로그래밍은 무엇을 할 것인가에 가깝다.

선언형 프로그래밍은 필요한 것을 달성하는 과정을 하나하나 기술하는 것보다 필요한 것이 어떤것인지 기술하는 데 중점을 두는 방식이다. 결국, 선언형 방식은 명령형 방식을 추상화 하는 것이다.

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

위 코드는 절차형 프로그래밍 방식이 추상화 된 것이다. 이처럼 선언형 방식은 map()이 어떻게 작동되는지 알 필요없이 무엇을 원하는지에 중점을 두는 방식이다.

객체 지향형 프로그래밍과 함수형 프로그래밍

🔥객체 지향형(Object Oriented Programming)

앞에서의 명령형, 절차 지향형 방식의 단점을 보완하고자 "객체 지향형"방식이 등장했다. 객체지향 프로그래밍에 대해서 검색해보면 이러한 정의를 나타낸다.
객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

객체 지향형 프로그램은 실제세계의 관점으로 프로그래밍 되어있다. 실제 세계에서 우리가 사물을 바라보는 관점은 연계되어있다. 가령 사람을 예로들면 사람은 두발로 걷고, 영장류이며 뛰거나 달릴수 있다는 정보가 연계되고 남자라는 객체 여자라는 객체는 사람이라는 객체에 상속된다. 이렇게 현실 세계를 모델링한 객체 지향적 방식은 "캡슐화", "추상화", "정보은닉", "상속" 이라는 특성를 가진다.

장점

  1. 코드 재사용이 용이하다.

    한 번 작성된 코드를 활용하여 동일한 객체를 만들 수 있다. 즉, 모듈화시켜서 개발할 수 있다.

  2. 유지보수가 쉽고 확장성이 좋다.

    절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 있기 때문에 해당 부분만 수정하면 되고, 만들어진 객체를 발전시키면 되서 확장성도 좋다.

단점

  1. 개발속도가 느리다.

    생성하고자 하는 객체를 정확히 이해하고 넓게 생각해야하기에 설계단계부터 많은 시간이 소모 된다.

  2. 실행속도가 느리다.

    객체 지향은 절차 지향보다 실행 속도가 느리다. 이유는 모든 것을 객체로 생각하기 때문에 추가적인 메모리와 연산에 대한 비용이 들어가게 된다고 한다.

🔥함수형 프로그래밍

함수형 프로그래밍에 대해서 검색해보면 이러한 정의를 나타낸다.

함수형 프로그래밍은 순수 함수(pure function)를 조합하고 공유 상태(shared state), 변경 가능한 데이터(mutable data) 및 부작용(side-effects)을 피하여 프로그래밍하는 패러다임이다.

연계성을 생각하기보다는 함수를 이용해서 사이드 이펙트 없도록 선언형 프로그래밍을 하는 것이 함수형 프로그래밍인 것이다.

순수함수는 input으로 들어 온 값은 항상 같은 output을 생성해 내는 함수를 뜻한다. 이러한 특성 때문에 함수형 프로그래밍에서 함수는 불변하는 "값"으로 볼 수 있다.

사이트 이펙트란 함수가 함수 외부의 어떤 데이터를 변경하게 되는 것과 같이 함수의 실행이 우리가 의도치 않은 동작을 하는 것을 의미한다.

장점

  1. 사이드 이펙트가 없기때문에 함수가 예측 가능하다. 함수가 예측가능하기 때문에 디버깅에도 유리하다.
  2. 간결하다.

단점

  1. 상태(State)가 없다.

    함수형 프로그래밍은 상태(State)를 배제하여 Side Effect가 없게 동작한다(연계성이 없다는 소리). 그러나 프론트에서 상호작용(Interaction)은 대부분 상태 변화로 모델링된다.

    단, 현재 React에서는 hooks의 state를 통해 함수형 프로그래밍 방식으로도 상태를 가질수 있다.

좋은 웹페이지 즐겨찾기