1. ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

- ν”„λ‘œκ·Έλž˜λ° μŠ€νƒ€μΌμ„ μ˜λ―Έν•˜λ©°, 전체적인 ν”„λ‘œκ·Έλž˜λ° 방식을 말함

- λŒ€ν‘œμ μœΌλ‘œ 절차적, 객체지ν–₯, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ μ‘΄μž¬ν•œλ‹€.

- 크게 λΆ„λ₯˜ν•˜λ©΄ λͺ…λ Ήν˜• / μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

 

1-1. λͺ…λ Ήν˜•(Imperative)ν”„λ‘œκ·Έλž˜λ°

: ν”„λ‘œκ·Έλž˜λ° μƒνƒœμ™€ μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚€λŠ” ꡬ문의 κ΄€μ μ—μ„œμ˜ 연산을 μ„€λͺ…

(컴퓨터가 μˆ˜ν–‰ν•  λͺ…령듀을 μˆœμ„œλŒ€λ‘œ 써놓은것)

- 절차적 ν”„λ‘œκ·Έλž˜λ°, κ°μ²΄μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°

- λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄: C, C++, Java, Pascal, Ruby 

 

1-2. μ„ μ–Έν˜•(Declarative)ν”„λ‘œκ·Έλž˜λ°

: ν•„μš”ν•œ 것을 λ‹¬μ„±ν•˜λŠ” 과정을 κΈ°μˆ ν•˜κΈ°λ³΄λ‹€ ν•„μš”ν•œ 것이 μ–΄λ–€ 것인지λ₯Ό κΈ°μˆ ν•˜λŠ” 것에 μ΄ˆμ μ„ λ§žμΆ”λŠ” ν”„λ‘œκ·Έλž˜λ° ꡬ쑰

: λͺ©ν‘œλ₯Ό λͺ…μ‹œν•˜κ³ , μ•Œκ³ λ¦¬μ¦˜μ„ λͺ…μ‹œν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ '무엇'에 μ§‘μ€‘ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°('μ–΄λ–»κ²Œ'에 λŒ€ν•œ 뢀뢄은 좔상화)

- ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° : 

- μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ : HTML, Lisp, Haskell, Prolog, SQL, XML 


2. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

- 자료처리λ₯Ό μˆ˜ν•™μ  ν•¨μˆ˜μ˜ κ³„μ‚°μœΌλ‘œ μ·¨κΈ‰ν•˜κ³ , μƒνƒœμ™€ 가변데이터λ₯Ό λ©€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„.

- μˆœμˆ˜ν•¨μˆ˜λ₯Ό μ‘°ν•©ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 방법이닀.

- ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 3λŒ€μž₯ : Clojure, Scala(싀무에 λ„μž…ν•˜κΈ° μ’‹μŒ), Haskell(학계 μ •ν†΅νŒŒ 순수 ν•¨μˆ˜ν˜• μ–Έμ–΄) 

- μžλ°”μŠ€ν¬λ¦½νŠΈ, μ½”ν‹€λ¦°, 파이썬 등에도 졜근 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 문법이 μΆ”κ°€λ˜μ—ˆλ‹€.

- μ™ΈλΆ€ν™˜κ²½μœΌλ‘œλΆ€ν„° 독립적. μ£Όμ–΄μ§„ μž‘μ—…λ§Œ ν•œλ‹€.

 

μˆ˜ν•™μ˜ 원리와 λ°€μ ‘ν•˜κ²Œ μ—°κ΄€. λ§€μš°λŠ”λ° μ‹œκ°„μ΄ 였래걸리고 λ‚œν•΄..

κ·Έλž˜μ„œ μ‚¬λžŒμ˜ 사고방식과 κ°€κΉŒμš΄ μ ˆμ°¨μ§€ν–₯, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ 더 보편적으둜 많이 μ“°μ—¬μ§€κ³  있음.

 

λ°©λŒ€ν•œ 데이터λ₯Ό λΉ λ₯΄κ²Œ κ³„μ‚°ν•΄μ„œ λ³‘λ ¬μ μœΌλ‘œ μ•ˆμ •μ μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” κ²ƒμ˜ μ€‘μš”μ„±μ΄ λΆ€κ°λ˜λ©΄μ„œ

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ λ‹€μ‹œ μ£Όλͺ©μ„ λ°›κΈ° μ‹œμž‘ν•œκ²ƒ.


3. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

3-1. μˆœμˆ˜ν•¨μˆ˜ Pure function

- ν•¨μˆ˜μ˜ 싀행이 ν”„λ‘œκ·Έλž¨ 싀행에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•„μ•Ό ν•˜λŠ” ν•¨μˆ˜

- ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 인자의 값을 λ³€κ²½ν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” side effect κ°€ μ—†λŠ” 것.

- ν•¨μˆ˜μ—μ„œ μ™ΈλΆ€μ˜ μƒνƒœκ°’μ„ μ°Έμ‘°ν•˜κ±°λ‚˜ λ˜λŠ” μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 것은 μˆœμˆ˜ν•¨μˆ˜λΌ λ³Ό 수 μ—†λ‹€!

- λ™μΌν•œ 인자λ₯Ό λ„£μ—ˆμ„ λ•Œ 항상 λ™μΌν•œ 결과값을 λ°˜ν™˜ν•˜κ³ , μ–Έμ œ μ„ μ–Έλ˜μ—ˆλŠ”μ§€ 외뢀에 영ν–₯λ°›μ§€ μ•Šλ„λ‘ μž‘μ„±ν•΄μ•Όν•œ.

 

3-2. λΉ„μƒνƒœ Stateless , λΆˆλ³€μ„± Immutability

- ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ λ°μ΄ν„°λŠ” λ³€ν•˜μ§€ μ•ŠλŠ” λΆˆλ³€μ„±μ„ μœ μ§€ν•΄μ•Όν•œλ‹€.

- λ°μ΄ν„°μ˜ 변경이 ν•„μš”ν•œ 경우 원본 데이터 ꡬ쑰λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ ,

κ·Έ 볡사본을 λ§Œλ“€μ–΄ κ·Έ 일뢀λ₯Ό λ³€κ²½ν•˜κ³  λ³€κ²½ν•œ 볡사본을 μ‚¬μš©ν•΄ μž‘μ—…μ„ μ§„ν–‰

(μ „λ‹¬λœ 데이터λ₯Ό λ³€κ²½ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ λ²„μ „μ˜ μƒˆλ‘œμš΄ 였브젝트λ₯Ό λ§Œλ“€μ–΄μ„œ κ²°κ³Όκ°’μœΌλ‘œ 전달해야함)

- λ³€κ²½ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ„œ λΆ€μž‘μš©(ν•¨μˆ˜ν˜ΈμΆœμ‹œ μ™ΈλΆ€μƒνƒœλ³€κ²½, μ˜ˆμƒμΉ˜λͺ»ν•œ μ—λŸ¬λ°œμƒ λ“±)을 λ§Œλ“€μ§€ μ•ŠμŒ

- λ©€μ“°λ ˆλ”© ν™˜κ²½(μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— ν•˜λ‚˜μ˜ μžμ›μ„ κ³΅μœ ν•˜κ³  μžˆκΈ°λ•Œλ¬Έμ— 같은 μžμ›μ„ 두고 κ²½μŸμƒνƒœμ™€ 같은 λ¬Έμ œκ°€ λ°œμƒ)μ—μ„œλ„ μ•ˆμ •μ μœΌλ‘œ λ™μž‘ν•œλ‹€.

 

3-3. μ„ μ–Έν˜• ν•¨μˆ˜ Expressions

- μ„ μ–Έν˜•μ€ "무엇"을 ν•  것인가에 μ£Όλͺ© / λͺ…λ Ήν˜•μ€ 무엇을 "μ–΄λ–»κ²Œ"ν•  것인가에 μ£Όλͺ© 

- if, for, switch와 같은 λͺ…령문을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν”„λ‘œκ·Έλž˜λ°ν•œλ‹€.

 

3-4. 1κΈ‰ 객체와 κ³ μ°¨ν•¨μˆ˜ First-class, Higher-order functions

- 1κΈ‰κ°μ²΄μ˜ νŠΉμ§• : λ³€μˆ˜λ‚˜ 데이터 ꡬ쑰 μ•ˆμ— 담을 수 μžˆλ‹€. νŒŒλΌλ―Έν„°λ‘œ 전달할 수 μžˆλ‹€. λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

ν• λ‹Ήλœ 이름과 관계없이 κ³ μœ ν•œ ꡬ별이 κ°€λŠ₯, λ™μ μœΌλ‘œ ν”„λ‘œνΌν‹° ν• λ‹Ή κ°€λŠ₯.

- κ³ μ°¨ν•¨μˆ˜μ˜ νŠΉμ§• : ν•¨μˆ˜λ₯Ό 인자둜써 전달할 수 μžˆμ–΄μ•Όν•œλ‹€. ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œ 또 λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.


4. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯점

- 높은 μˆ˜μ€€μ˜ 좔상화 제곡(λ³΅μž‘ν•œ 자료, λͺ¨λ“ˆ, μ‹œμŠ€ν…œ λ“±μœΌλ‘œλΆ€ν„° 핡심 κ°œλ…, κΈ°λŠ₯을 간좔렀냄)

  * ν•¨μˆ˜μ˜ 기본원칙 'ν•¨μˆ˜λŠ” ν•œκ°€μ§€ λ™μž‘λ§Œ 해야함' => μ—¬λŸ¬ λ™μž‘μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜λ©΄, λ‹€λ₯Έ ν•¨μˆ˜, λͺ¨λ“ˆκ³Όμ˜ 쒅속성이 컀져        μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§.

- ν•¨μˆ˜ λ‹¨μœ„μ˜ μ½”λ“œ μž¬μ‚¬μš© μˆ˜μ›”

-. λΆˆλ³€μ„±μ„ μ§€ν–₯ν•˜λ―€λ‘œ ν”„λ‘œκ·Έλž¨ λ™μž‘ 예츑이 쉽닀

 

5. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ λ‹¨μ 

- μ½”λ“œμ˜ 가독성이 μ’‹μ§€ μ•Šμ„ 수 있음

- λ°˜λ³΅μ„ for문이 μ•„λ‹Œ μž¬κ·€ν•¨μˆ˜λ₯Ό 톡해 μ΄λ£¨μ–΄μ§€λŠ”λ°(deep copy), μž¬κ·€μ  μ½”λ“œμŠ€νƒ€μΌμ€ λ¬΄ν•œλ£¨ν”„μ— 빠질 수 μžˆλ‹€.

* μž¬κ·€ν•¨μˆ˜ : ν•¨μˆ˜ μ•ˆμ— μžμ‹ μ˜ ν•¨μˆ˜λ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜. μžμ‹ μ˜ λ‘œμ§μ„ λ‚΄λΆ€μ μœΌλ‘œ λ°˜λ³΅ν•˜λ‹€κ°€ 일정 쑰건이 만쑱되면

ν•¨μˆ˜λ₯Ό μ΄νƒˆν•˜μ—¬ κ²°κ³Όλ₯Ό λ„μΆœν•œλ‹€.

- μˆœμˆ˜ν•¨μˆ˜μ˜ μ‚¬μš©μ€ μ‰¬μšΈ 수 μžˆμœΌλ‚˜, 쑰합은 쉽지 μ•Šλ‹€.


6. 정리

ui μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ νŠΉμ„±μƒ λ§Žμ€ μƒνƒœλ³€ν™”κ°€ μΌμ–΄λ‚˜λ―€λ‘œ μˆœμˆ˜ν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ°λ§Œμ„ μ΄μš©ν•΄μ„œλŠ” 무리가 μžˆλ‹€κ³ ν•¨.

λ”°λΌμ„œ 'ν•¨μˆ˜ν˜• λ°˜μ‘ν˜• ν”„λ‘œκ·Έλž˜λ°'을 μ΄μš©ν•˜κ±°λ‚˜, 객체지ν–₯ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•¨μˆ˜ν˜•ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•μ„

κ²°ν•©ν•΄ μ•ˆμ •μ μΈ ν”„λ‘œκ·Έλž¨μ„ ν•˜λŠ” μ‹μœΌλ‘œ ν™œμš©. 

μ›ν•˜λŠ” λͺ©ν‘œμ— 따라 μ μ ˆν•œ 것을 잘 골라 μ‚¬μš©ν•΄ν•˜κ³ , μ—¬λŸ¬ νŒ¨λŸ¬λ‹€μž„μ„ 잘 μ΄ν•΄ν•˜κ³  두루 μ•Œμ•„μ•Ό ν•œλ‹€.

+ Recent posts