[React]선언형(declarative) 프로그래밍에 대하여

Edit

[React]선언형(declarative) 프로그래밍에 대하여

React를 들어가기 전에 선언형(declarative)에 대하여 알아보도록 하자. declarative programming에 대하여 설명하기 위해서는 imperative programming이 빠질 수는 없다.

기본적으로 프로그래밍에 입문을 하였다면 다음 코드가 어떤 것인 지를 금방 파악 할 수 있다.

// Imperative (How)
var numbers = [4,2,3,6]
var total = 0
for (var i = 0; i < numbers.length; i++) {
total += numbers[i]
}

for문을 이용하여 배열 안에 있는 숫자들을 다 더하는 걸 수행하게 되는데 결과값은 당연히 15가 나온다는 것을 금방 알아챌 수 있다. 15라는 값을 예상하기 위해서는 우리 뇌에서는 아마 다음과 같은 과정을 거칠 것이다.

  1. total이라는 변수가 0으로 선언이 되어 있고
  2. for문을 지나면서 numbers의 0번째 원소를 더하고
  3. 다시 for에 의해 numbers의 1번쨰 원소를 더하고
  4. 반복반복 우걱우걱
  5. 다 더하면 15가 될 것이다!

이렇게 생각한 것은 컴퓨터가 위에서부터 아래로 순차적으로 진행될 것이라 염두 해 두고 진행된 것이다. total이라는 값을 구하기 위해서 단순히 알고리즘을 제공했을 뿐이다. 이런 방식이 바로 명령형(imperative) 프로그래밍이다.


그럼 오늘 알아볼 선언형(Declarative)프로그래밍을 그대로 적용해보면 어떻게 될까?

// Declarative (What)
var numbers = [4,2,3,6]
numbers.reduce(function (previous, current) {
return previous + current
})

React.jsdeclarative 스타일이라 할 수 있다. “이건 이렇게 생겨야 해!" 하면서 flow나 state를 조절 하게 할 수 있다.

%23%23%23%5BReact%5D%uC120%uC5B8%uD615%28declarative%29%20%uD504%uB85C%uADF8%uB798%uBC0D%uC5D0%20%uB300%uD558%uC5EC%0A@%28Postach.io%29%5BReact%2C%20ReactJs%2C%20Declarative%2C%20published%5D%0A%0A%20%20React%uB97C%20%uB4E4%uC5B4%uAC00%uAE30%20%uC804%uC5D0%20%60%uC120%uC5B8%uD615%28declarative%29%60%uC5D0%20%uB300%uD558%uC5EC%20%uC54C%uC544%uBCF4%uB3C4%uB85D%20%uD558%uC790.%20%60declarative%20programming%60%uC5D0%20%uB300%uD558%uC5EC%20%uC124%uBA85%uD558%uAE30%20%uC704%uD574%uC11C%uB294%20%60imperative%20programming%60%uC774%20%uBE60%uC9C8%20%uC218%uB294%20%uC5C6%uB2E4.%20%0A%0A%20%20%20%uAE30%uBCF8%uC801%uC73C%uB85C%20%uD504%uB85C%uADF8%uB798%uBC0D%uC5D0%20%uC785%uBB38%uC744%20%uD558%uC600%uB2E4%uBA74%20%uB2E4%uC74C%20%uCF54%uB4DC%uAC00%20%uC5B4%uB5A4%20%uAC83%uC778%20%uC9C0%uB97C%20%uAE08%uBC29%20%uD30C%uC545%20%uD560%20%uC218%20%uC788%uB2E4.%0A%0A%60%60%60javascript%0A//%20Imperative%20%28How%29%0Avar%20numbers%20%3D%20%5B4%2C2%2C3%2C6%5D%0Avar%20total%20%3D%200%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20numbers.length%3B%20i++%29%20%7B%0A%09total%20+%3D%20numbers%5Bi%5D%0A%7D%0A%60%60%60%0A%0A%60for%60%uBB38%uC744%20%uC774%uC6A9%uD558%uC5EC%20%uBC30%uC5F4%20%uC548%uC5D0%20%uC788%uB294%20%uC22B%uC790%uB4E4%uC744%20%uB2E4%20%uB354%uD558%uB294%20%uAC78%20%uC218%uD589%uD558%uAC8C%20%uB418%uB294%uB370%20%uACB0%uACFC%uAC12%uC740%20%uB2F9%uC5F0%uD788%20%6015%60%uAC00%20%uB098%uC628%uB2E4%uB294%20%uAC83%uC744%20%uAE08%uBC29%20%uC54C%uC544%uCC4C%20%uC218%20%uC788%uB2E4.%20%6015%60%uB77C%uB294%20%uAC12%uC744%20%uC608%uC0C1%uD558%uAE30%20%uC704%uD574%uC11C%uB294%20%uC6B0%uB9AC%20%uB1CC%uC5D0%uC11C%uB294%20%uC544%uB9C8%20%uB2E4%uC74C%uACFC%20%uAC19%uC740%20%uACFC%uC815%uC744%20%uAC70%uCE60%20%uAC83%uC774%uB2E4.%0A%0A1.%20%60total%60%uC774%uB77C%uB294%20%uBCC0%uC218%uAC00%20%600%60%uC73C%uB85C%20%uC120%uC5B8%uC774%20%uB418%uC5B4%20%uC788%uACE0%0A2.%20%20%60for%60%uBB38%uC744%20%uC9C0%uB098%uBA74%uC11C%20%60numbers%20%60%uC758%200%uBC88%uC9F8%20%uC6D0%uC18C%uB97C%20%uB354%uD558%uACE0%0A3.%20%20%uB2E4%uC2DC%20%60for%60%uC5D0%20%uC758%uD574%20%60numbers%60%uC758%201%uBC88%uCA30%20%uC6D0%uC18C%uB97C%20%uB354%uD558%uACE0%0A4.%20%20%uBC18%uBCF5%uBC18%uBCF5%20%uC6B0%uAC71%uC6B0%uAC71%0A5.%20%20%uB2E4%20%uB354%uD558%uBA74%20%6015%60%uAC00%20%uB420%20%uAC83%uC774%uB2E4%21%0A%0A%uC774%uB807%uAC8C%20%uC0DD%uAC01%uD55C%20%uAC83%uC740%20%uCEF4%uD4E8%uD130%uAC00%20%uC704%uC5D0%uC11C%uBD80%uD130%20%uC544%uB798%uB85C%20%uC21C%uCC28%uC801%uC73C%uB85C%20%uC9C4%uD589%uB420%20%uAC83%uC774%uB77C%20%20%uC5FC%uB450%20%uD574%20%uB450%uACE0%20%uC9C4%uD589%uB41C%20%uAC83%uC774%uB2E4.%20%60total%60%uC774%uB77C%uB294%20%uAC12%uC744%20%uAD6C%uD558%uAE30%20%uC704%uD574%uC11C%20%uB2E8%uC21C%uD788%20%uC54C%uACE0%uB9AC%uC998%uC744%20%uC81C%uACF5%uD588%uC744%20%uBFD0%uC774%uB2E4.%20%uC774%uB7F0%20%uBC29%uC2DD%uC774%20%uBC14%uB85C%20%09%60%uBA85%uB839%uD615%28imperative%29%60%20%uD504%uB85C%uADF8%uB798%uBC0D%uC774%uB2E4.%0A%0A---%0A%0A%uADF8%uB7FC%20%uC624%uB298%20%uC54C%uC544%uBCFC%20%60%uC120%uC5B8%uD615%28Declarative%29%20%60%uD504%uB85C%uADF8%uB798%uBC0D%uC744%20%uADF8%uB300%uB85C%20%20%uC801%uC6A9%uD574%uBCF4%uBA74%20%uC5B4%uB5BB%uAC8C%20%uB420%uAE4C%3F%0A%0A%60%60%60javascript%0A//%20Declarative%20%28What%29%0Avar%20numbers%20%3D%20%5B4%2C2%2C3%2C6%5D%0Anumbers.reduce%28function%20%28previous%2C%20current%29%20%7B%0A%09return%20previous%20+%20current%0A%7D%29%0A%60%60%60%0A%0A%0A%0A%60React.js%60%uB294%20%60declarative%60%20%uC2A4%uD0C0%uC77C%uC774%uB77C%20%uD560%20%uC218%20%uC788%uB2E4.%20%22%uC774%uAC74%20%uC774%uB807%uAC8C%20%uC0DD%uACA8%uC57C%20%uD574%21%22%20%uD558%uBA74%uC11C%20flow%uB098%20state%uB97C%20%uC870%uC808%20%uD558%uAC8C%20%uD560%20%uC218%20%uC788%uB2E4.%20