Skip to content

Latest commit

ย 

History

History
88 lines (72 loc) ยท 3.84 KB

File metadata and controls

88 lines (72 loc) ยท 3.84 KB

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Functional Programming)

(์ดํ•˜ ์ถœ์ฒ˜ :

  1. https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
  2. https://sungjk.github.io/2017/07/17/fp.html

)

  • ๋žŒ๋‹ค ๋Œ€์ˆ˜ (ฮป-calculus, lambda-calculus)์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ํƒ„์ƒ

๋žŒ๋‹ค ๋Œ€์ˆ˜ (ฮป-calculus, lambda-calculus)
(์ดํ•˜ ์ถœ์ฒ˜ :

  1. https://ko.wikipedia.org/wiki/%EB%9E%8C%EB%8B%A4_%EB%8C%80%EC%88%98

)

  • ๋ณ€์ˆ˜์˜ ๋„ค์ž„ ๋ฐ”์ธ๋”ฉ๊ณผ ๋Œ€์ž…์˜ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด ํ•จ์ˆ˜ ์ •์˜, ํ•จ์ˆ˜ ์ ์šฉ, ๊ท€๋‚ฉ์  ํ•จ์ˆ˜ ์ถ”์ƒํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ˆ˜ํ•™ ์—ฐ์‚ฐ์„ ํ‘œํ˜„ํ•˜๋Š” ํ˜•์‹ ์ฒด๊ณ„
  • ํ•จ์ˆ˜์˜ ํ‘œํ˜„
    • ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ด๋ฆ„์„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†์Œ
    • ํ•จ์ˆ˜์˜ ์ž…๋ ฅ ๋ณ€์ˆ˜๊ฐ€ ์ด๋ฆ„์„ ๊ฐ€์งˆ ํ•„์š” ์—†์Œ
    • ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋˜๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋‹ค์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ์ˆœ์ˆ˜ ํ•จ์ˆ˜ (Pure function)๋ฅผ ์กฐํ•ฉํ•ด ๊ณต์œ  ์ƒํƒœ (shared state), ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ (mutable data) ๋ฐ ๋ถ€์ž‘์šฉ (side-effects)์„ ํ”ผํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค
    • ์ˆœ์ˆ˜ ํ•จ์ˆ˜ (Pure function)
      • ์ˆ˜ํ•™์  ํ•จ์ˆ˜
      • ์ฐธ์กฐ ํˆฌ๋ช…์„ฑ (referential transparency)
      • ๊ฐ™์€ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜
      • ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๋ถ€์ž‘์šฉ ์—†์Œ c.f. ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ฐธ์กฐ ํˆฌ๋ช…์„ฑ (referential transparency)
(์ดํ•˜ ์ถœ์ฒ˜ :

  1. https://ko.wikipedia.org/wiki/%EC%B0%B8%EC%A1%B0_%ED%88%AC%EB%AA%85%EC%84%B1
    )
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์˜๋ฏธ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ
  • ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘์„ ์žฌ์ž‘์„ฑ ์‹œ์Šคํ…œ์œผ๋กœ์จ ์ถ”๋ก  ๊ฐ€๋Šฅ -> ๋ณ‘๋ ฌ์„ฑ์„ ์ˆ˜๋‹จ์œผ๋กœ ํ•˜๋Š” ์ฝ”๋“œ์˜ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

์ˆ˜ํ•™์  ํ•จ์ˆ˜
(์ดํ•˜ ์ถœ์ฒ˜ :

  1. https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98

)
function

  • X๋Š” ์ง‘ํ•ฉ์ด๋ฉฐ ์ •์˜์—ญ์ด๋ผ๊ณ  ํ•จ
  • Y๋Š” ์ง‘ํ•ฉ์ด๋ฉฐ ๊ณต์—ญ์ด๋ผ๊ณ  ํ•จ
  • f(x)๋Š” X x Y์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ
  • X์˜ ์ž„์˜์˜ ์›์†Œ x์— ๋Œ€ํ•ด f(x)์ธ Y์˜ y๊ฐ€ ์œ ์ผํ•˜๊ฒŒ ์กด์žฌ

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
(์ดํ•˜ ์ถœ์ฒ˜ :

  1. https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

)

  • ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋ฐ˜๋Œ€ ๊ฐœ๋… (ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ตฌ๋ฌธ์˜ ๊ด€์ ์—์„œ ์—ฐ์‚ฐ ์„ค๋ช…

  • ๊ณต์œ  ์ƒํƒœ (shared state)

    • ๊ณต์œ  ๋ฒ”์œ„ (shared scope) ๋‚ด ๋ณ€์ˆ˜, ๊ฐ์ฒด ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋˜๋Š” ๋ฒ”์œ„ ๊ฐ„ ์ „๋Œˆ๋˜๋Š” ์†์„ฑ
    • ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ชจ๋“  ๊ณต์œ  ๋ณ€์ˆ˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์•Œ์•„์•ผ ํ•จ
    • ํ•จ์ˆ˜ ํ˜ธ์ถœ ํƒ€์ด๋ฐ์— ์ข…์†์ 
  • ๋ถˆ๋ณ€์„ฑ (Immutability)

    • ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด
      • scala์˜ val c.f. javascript์˜ const
  • ์ต๋ช… ํ•จ์ˆ˜ (anonymous function)

  • ๊ณ ์ฐจ ํ•จ์ˆ˜ (high order function)
    (์ดํ•˜ ์ถœ์ฒ˜ :

    1. https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%B0%A8_%ED%95%A8%EC%88%98

    )

    • ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๊ฐ€์ง
    • ํ•จ์ˆ˜๋ฅผ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜
    • ์žฌ์‚ฌ์šฉ์„ฑ
    • ์ผ๊ธ‰ ๊ฐ์ฒด (First-class function)๋กœ์„œ์˜ ํ•จ์ˆ˜

์ผ๊ธ‰ ๊ฐ์ฒด (First-class function)
(์ดํ•˜ ์ถœ์ฒ˜ :

  1. https://fun-coding.org/PL&OOP4-2.html

)

  • ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ธ์ž๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์ „๋‹ฌ, ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋ฆฌํ„ด, ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜