본문 바로가기

개발 개념 살펴보기_

명령형(Imperative)언어와 선언형(Declarative)언어

명령형 언어(Imperative)


컴퓨터가 '어떻게 동작하는지'에 초점을 맞춥니다.

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

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

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

 

 

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

Javascript로 작성한 명령형 코드의 예시입니다 :)

 

node로 살펴보면 결과 값을 알 수 있습니다.

 


선언형 언어(Declarative)


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

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

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

 

EX) HTML, CSS, XML, SQL 등

HTML 작성 코드입니다 :

 

CSS 작성 코드 입니다 :

 

 

 

 


 

 

Question :

 뭔가 명령형과 선언형을 프로그래밍으로 나눈다고 생각했는데.. javascript도 선언형으로

 쓸 수 있다는 것을 알게 되었다. 그럼 어떻게 이해를 해야 좀 더 쉬울까 생각을 했는데,

 조사를 하던 중 정말 잘 설명된 글이 있어서 좀 가져와 보려고 한다!!

 

 

ex)

실생활

정자역에서 네이버로 갈 때를 예를 들어보겠습니다. 두가지 방법으로 접근할 수 있습니다.

  • 명령형

    횡단보도까지 약 99m 이동(성남대로331번길) ,

    횡단보도를 이용하여 경기성남분당경찰서 방면으로 횡단,

     

    횡단보도까지 1개의 횡단보도를 지나 약 612m 이동,

    횡단보도를 이용하여 메르세데스벤츠코리아더클래스효성분당전시장 방면으로 횡단,

    네이버까지 약 50m 이동(불정로).

  • 선언형

    출발: 경기도 성남시 분당구 성남대로 333,

    도착: 네이버 주소는 경기도 성남시 분당구 불정로 6.

명령형은 어떻게 할 것인지 설명하고 있고(how), 선언형은 무엇을 할 것인지 정의합니다(what).

선언형에서는 구체적인 문제 해결 방법이 나와있지 않습니다. 위의 예제에서 선언형의 경우 GPS 같은 것을 가지고 있어서,

목적지까지 가는 방법을 알고 있을 것을 가정합니다. 선언을 해두면, 명령형 layer가 접근할 것임을 내포하고 있습니다.

 

** 출처 : https://medium.com/@hongseongho/%EC%84%A0%EC%96%B8%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1d8247342f17

 

선언형 프로그래밍 알아보기

Combine에 대한 첫 번째 영상을 보다가 ‘declarative’ 라는 말에 호기심이 생겼습니다. SwiftUI에 대한 설명에서도 본적있어서, 선언적(declarative)이라는 것이 이번 변화의 큰 흐름일 수도 있겠다는 생각이 들었습니다…

medium.com

여기 필자 분도 말씀하시기를 명령형 언어를 통해서도 선언형이 가능하다고 합니다!

비선언형 부분을 캡슐화해서 선언적인 방식으로 만들 수 도 있다고 하네요.

DSL(Domain-specific language)의 형태로 자주 사용된다고 합니다.

 

 

Solution :

 결국 명령어 언어를 사용하더라도 레이어 분리를 통해 선언형 프로그래밍을 추구할 수 있단다!

 좀 더 발전된 기술이 있다고 게시되어 있는데, 자세하게는 잘 이해하진 못했지만.

 확실한 것은 명령형 언어는 "어떤 방법(HOW)"으로 해결할 것인가에 중점을 둔다는 것이고,

 선언형 언어는 "무엇(WHAT)"을 할 것인가에 중점을 둔다는 것이다. :)

 

 

 

'개발 개념 살펴보기_' 카테고리의 다른 글

LifeCycle API  (0) 2020.03.17
자료구조(Data structure) 파악하기  (0) 2020.03.08
동기와(Synchronous) 비동기(Asynchronous)  (0) 2020.02.28