'선언형 프로그래밍'에 해당되는 글 1건

  1. 2021.02.03 명령형(imperative ), 선언형(declarative), 절차형, 객체 지향형(OOP), 함수형 프로그래밍

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

웹 개발/Study 2021. 2. 3. 15:11

명령형 프로그래밍은 무엇을 어떻게 할 것인가에 가깝다.

프로그램의 상태를 변화시키는 구문들에 초점을 둡니다.

상태제어흐름이 존재하며 상태를 필요에 따라 생성하고 정의하고 변경합니다.

그리고 특정 동작을 실행시키며 복잡한 문제를 유연하게 해결합니다.

EX) C, C++, JAVA, Javascript, Pyhon, PHP 등

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

프로그램이 실제로 어떻게 흘러가는 지와 상관 없이 프로그램의 논리에 초점을 맞춥니다.

상태제어 흐름이 존재하지 않습니다.

즉, 약속된 정의만 사용해서 작성하는 언어를 의미합니다.

EX) HTML, CSS, XML, SQL 등

 

레고공장을 명령형과 선언형에 빗대어 표현을 하자면,

명령형 공장: 원료가 들어오면 먼저 빨간색 색소를 넣는다. 그 뒤, 4*4 레고 틀로 레고 원료를 찍습니다. 찍어낸 원료는 2시간동안 굳힌 뒤에 질감을 위해 특수 배합된 도료로 코딩을 해줍니다.

함수형 공장: 빨간 4*4 레고블록

함수형 프로그래밍은 내부에서 절차적인 방식으로 동작을 하고 있다. 

결국, 선언형 방식은 명령형 방식을 추상화 하는 것이다.

절차형(Procedure)은입력한 로직에 따라서 순서대로 코드가 실행되는 방식을 의미한다.

실행 순서(절차)를 지정하게 되어 명령형 언어라고도 불리는데, 이는 절차가 실행에 대한 명령을 나타내는 것이기 때문이다.

EX)  C, Pascal, BASIC

절차지향형의 특징은 다음과 같다.

장점:

  1. 컴퓨터의 처리 구조와 유사한 코딩방식
  2. 실행 속도가 빠름

단점:

  1. 유지보수가 어려움
  2. 코드의 순서가 바뀌면 동일한 동작 결과를 보장하지 못함.

객체 지향형(Object Oriented Programming)

앞에서의 절차 지향형 방식의 단점을 보완하고자 "객체 지향형"방식이 등장했다. 객체 지향형은 컴퓨터의 관점에서가 아니라 실제 세계의 관점에서 프로그래밍 하는 것을 의미한다. 실제 세계에서 사물은 컴퓨터가 생각하는 것 처럼 절차와 데이터가 따로 있는 것이 아닌, 객체 다ㅏㄴ위로 존재한다. 가령 사람을 예로 들면 사람이 먹거나 마시거나 뛰거나 달리거나 할 수 있고, 그에 따라서 체지방 량이 변합니다. 현실세계와 객체 지향적 세계에서는 관련이 있어 보이는 데이터와 행동이 절차지향에서는 이것들이 모두 흩어져 있다. 이렇게 현실 세계에를 모델링한 객체 지향적 방식은 "캡슐화", "추상화", "다형성", "상속" 이라는 특성를 가진다.

장점:

  1. 코드의 유지보수가 편하다.
  2. 불필요한 코드가 줄어든다.
  3. 코드의 순서가 다르더라도 논리적인 과정상의 차이만 없으면 어느정도 동일한 동작 결과를 보장 할 수 있다.

단점:

  1. 속도가 느리다.
  2. 설계에 많은 시간이 들어가게 된다.

함수형

  1. 변경 가능한 상태를 불변으로 만들어 side-effect를 최소화 시킨다. (순수함수)
  2. 모든것은 객체이다.
  3. 코드를 간결하게 하고 구현할 로직에 집중한다.
  4. 동시성을 안전하게 보장한다.

함수형 언어의 가장 큰 특징은 함수를 "순수함수"로 구성을 한다는 것에 있다. 함수를 순수함수로 구성하게 되면 1번 특징만으록도 2~4번 까지의 특징이 당연하게 다가온다.

순수함수는 input으로 들어 온 값에 함수가 영향을 주지 않으며, 외부 변수에 영향을 받지 않고 항상 같은 output을 생성해 내는 함수이다. 이러한 특성 때문에 함수형 프로그래밍에서 함수는 불변하는 "값"으로 볼 수 있다. 그리고 이 함수라는 값들을 조합해서 새로운 함수 즉 값을 만들어 낼 수 있다. 때문에 함수도 객체와 동일한 취급이 가능하다. 이러한 특징을 "1급 객체"라고도 한다.

이렇게 함수를 객체와 같은 값으로 취급하게되면, 프로그래머는 구현할 로직에 더 집중을 할 수 있게된다. 과정을 기술하며 생긴 부산물에 집중하지 않아도 되며 변수에 대한 고려를 하지 않아도 되기 때문이다. 

명령형 프로그래밍과 함수형 프로그래밍으로 알파벳 5글자 이상으로만 이루어진 단어들을 리스트로 추출한다고 하면,

명령형 프로그래밍:

var fruits = ["apple","banana","watermellon","pear","peach"]
fruitesOverFive = [];
for(var i = 0; i< fruits.length; i++){
	if(fruits[i].length > 5){
    	fruitsOverFive.push(fruits[i]);
    }
}
return fruitsOverFive;

함수형 프로그래밍:

var fruitsOverFive = fruits.filter((fruit) => fruit.length>5)

[출처] 명령형(Imperative)언어와 선언형(Declarative)언어|작성자 윤윤ss

blog.naver.com/whdgml1996/221987818879

 

 

'웹 개발 > Study' 카테고리의 다른 글

Prototype in Javascript  (0) 2021.02.26
자바 스크립트에서의 OOP  (0) 2021.02.26
MapReduce  (0) 2021.02.03
Closure 과 Currying  (0) 2021.02.03
block, inline-block, inline  (0) 2021.01.21
: