Skip to content

alstn2468/category-theory-for-programmers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

24 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ๋ก 

๋ณธ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋Š” Bartosz Milewsk์˜ Category Theory for Programmers์„ ๋ฒˆ์—ญํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ย ๐Ÿ—‚ ๋ชฉ์ฐจ

Part 1.

  1. ๋ฒ”์ฃผ:ํ•ฉ์„ฑ์˜ ๋ณธ์งˆ
  2. ํƒ€์ž…๊ณผ ํ•จ์ˆ˜
  3. ํฌ๊ณ  ์ž‘์€ ๋ฒ”์ฃผ
  4. Kleisli ๋ฒ”์ฃผ
  5. Products์™€ Coproducts
  6. Simple Algebraic Data Types
  7. Functors
  8. Functoriality
  9. Function Types
  10. Natural Transformations

Part 2.

  1. Declarative Programming
  2. Limits and Colimits
  3. Free Monoids
  4. Representable Functors
  5. The Yoneda Lemma
  6. Yoneda Embedding

Part 3.

  1. Itโ€™s All About Morphisms
  2. Adjunctions
  3. Free/Forgetful Adjunctions
  4. Monads: Programmerโ€™s Definition
  5. Monads and Effects
  6. Monads Categorically
  7. Comonads
  8. F-Algebras
  9. Algebras for Monads
  10. Ends and Coends
  11. Kan Extensions
  12. Enriched Categories
  13. Topoi
  14. Lawvere Theories
  15. Monads, Monoids, and Categories

๋” ๋‚˜์€ ์กฐํŒ ์„ค์ •์ด ์žˆ๋Š” ์ฑ…์˜ ๋ฌด๋ฃŒ pdf ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Blurb์—์„œ ์ปฌ๋Ÿฌ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜์ด ์žˆ๋Š” ํ•˜๋“œ์ปค๋ฒ„ ๋ฒ„์ „์„ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ฒญ์ค‘๋“ค์—๊ฒŒ ์ด ์ž๋ฃŒ๋ฅผ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŒˆ ์„œ๋ฌธ

ํ•œ๋™์•ˆ ์ €๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ฒ”์ฃผ๋ก ์— ๊ด€ํ•œ ์ฑ…์„ ์จ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๊ณผํ•™์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋จธ, ๊ณผํ•™์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์—”์ง€๋‹ˆ์–ด๋ผ๋Š” ์ ์„ ๋ช…์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒํ•˜๊ฒŒ ๋“ค๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์ € ๋˜ํ•œ ๋‘๋ ต์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ณผํ•™๊ณผ ์—”์ง€๋‹ˆ์–ด๋ง ์–‘์ชฝ์—์„œ ์ผ์„ ํ•ด์™”๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด์— ํฐ ๊ฒฉ์ฐจ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ถ€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ํ•ญ์ƒ ๋ฒ”์ฃผ๋ก ์„ ์„ค๋ช…ํ•˜๊ณ  ์‹ถ์€ ๊ฐ•ํ•œ ๊ฐ•๋ฐ•์„ ๋Š๊ปด์™”์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋‹จ์ˆœํ•œ ์„ค๋ช…์˜ ๋Œ€๊ฐ€์˜€๋˜ ๋ฆฌ์ฒ˜๋“œ ํŒŒ์ธ๋จผ(Richard Feynman)์—๊ฒŒ ์—„์ฒญ๋‚œ ์กด๊ฒฝ์„ ํ‘œํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํŒŒ์ธ๋จผ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์ตœ์„ ์„ ๋‹คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๋…์ž๊ฐ€ ๋ฒ”์ฃผ๋ก ์„ ๋ฐฐ์šฐ๋„๋ก ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์ด ์„œ๋ฌธ์„ ์ถœํŒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ด ์ฑ…์ด ์—ฌ๋Ÿฌ๋ถ„์„ ์œ„ํ•ด ์“ฐ์˜€๋‹ค๋Š” ๊ฒƒ์„ ๋ช‡ ๋ฌธ๋‹จ์˜ ๊ณต๊ฐ„์—์„œ ์„ค๋“ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด "ํ’๋ถ€ํ•œ ์—ฌ๊ฐ€ ์‹œ๊ฐ„"์— ์ˆ˜ํ•™์˜ ๊ฐ€์žฅ ์ถ”์ƒ์ ์ธ ๋ถ„์•ผ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ๋ฐ˜๋Œ€ ์˜๊ฒฌ์ด๋˜ ๋ชจ๋‘ ์—†์• ๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ๋‚™๊ด€๋ก ์€ ๋ช‡ ๊ฐ€์ง€ ๊ด€์ฐฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ, ๋ฒ”์ฃผ๋ก ์€ ๋งค์šฐ ์œ ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•„์ด๋””์–ด์˜ ๋ณด๊ณ ์ž…๋‹ˆ๋‹ค. Haskell ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด ์ž์›์„ ์˜ค๋žซ๋™์•ˆ ํ™œ์šฉํ•ด ์™”์œผ๋ฉฐ ์•„์ด๋””์–ด๊ฐ€ ์ฒœ์ฒœํžˆ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์Šค๋ฉฐ๋“ค๊ณ  ์žˆ์ง€๋งŒ, ์ด ๊ณผ์ •์€ ๋„ˆ๋ฌด ๋Š๋ฆฌ๊ณ  ์†๋„๋ฅผ ๋†’์—ฌ์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘˜์งธ, ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ˆ˜ํ•™์ด ์žˆ์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ์ฒญ์ค‘์—๊ฒŒ ํ˜ธ์†Œํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ถ„์ ๋ถ„ํ•™์ด๋‚˜ ๋Œ€์ˆ˜ํ•™์— ์•Œ๋ ˆ๋ฅด๊ธฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฒ”์ฃผ๋ก ์„ ์ฆ๊ธธ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํŠนํžˆ ์ €๋Š” ๋ฒ”์ฃผ๋ก ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋งˆ์Œ์— ์ž˜ ๋งž๋Š” ์ข…๋ฅ˜์˜ ์ˆ˜ํ•™์ด๋ผ๊ณ  ์ฃผ์žฅํ•  ์ •๋„์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฒ”์ฃผ๋ก ์ด ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋‹ค๋ฃจ๊ธฐ๋ณด๋‹ค ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฒ”์ฃผ๋ก ์€ ํ”„๋กœ๊ทธ๋žจ์„ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์ข…๋ฅ˜์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ์€ ๋ฒ”์ฃผ๋ก ์˜ ๋ฟŒ๋ฆฌ์— ์žˆ์œผ๋ฉฐ ๋ฒ”์ฃผ ์ž์ฒด๋ฅผ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ํ•ฉ์„ฑ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณธ์งˆ์ด๋ผ๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ฃผ์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์„œ๋ธŒ๋ฃจํ‹ด์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๋‚ด๋†“๊ธฐ ํ›จ์”ฌ ์ „๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” ๊ณ„์† ํ•ฉ์„ฑ์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ์–ผ๋งˆ ์ „ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™์€ ์ฝ”๋“œ ๋ธ”๋ก์„ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ˜๋ช…์„ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„์— ๊ฐ์ฒด ํ•ฉ์„ฑ์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•จ์ˆ˜์™€ ๋Œ€์ˆ˜์  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ•ฉ์„ฑํ•˜๋Š” ๊ฒƒ๋ฟ ์•„๋‹ˆ๋ผ ๋™์‹œ์„ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ๋Š” ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์…‹์งธ, ์ €์—๊ฒŒ๋Š” ๋น„๋ฐ€ ๋ฌด๊ธฐ์ธ ์นผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์นผ๋กœ ์ˆ˜ํ•™์„ ๋„์‚ดํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋” ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „๋ฌธ ์ˆ˜ํ•™์ž๋ผ๋ฉด ๋ชจ๋“  ๊ฐ€์ •์„ ๋ฐ”๋กœ ์„ธ์šฐ๊ณ  ๋ชจ๋“  ์ง„์ˆ ์„ ๊ฒ€์ฆํ•˜๊ณ , ๋ชจ๋“  ์ฆ๋ช…์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์กฐ์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆ˜ํ•™ ๋…ผ๋ฌธ๊ณผ ์ฑ…์„ ์™ธ๋ถ€์ธ์ด ์ฝ๊ธฐ์— ๋งค์šฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ €๋Š” ํ›ˆ๋ จ์„ ๋ฐ›์€ ๋ฌผ๋ฆฌํ•™์ž์ด๋ฉฐ ๋ฌผ๋ฆฌํ•™์—์„œ ๋น„๊ณต์‹ ์ถ”๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋†€๋ผ์šด ๋ฐœ์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์ž๋“ค์€ ์œ„๋Œ€ํ•œ ๋ฌผ๋ฆฌํ•™์ž P. A. M. Dirac์ด ์ผ๋ถ€ ๋ฏธ๋ถ„ ๋ฐฉ์ •์‹์„ ํ’€๊ธฐ ์œ„ํ•ด ๋งŒ๋“  Dirac ๋ธํƒ€ ํ•จ์ˆ˜๋ฅผ ๋น„์›ƒ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ Dirac์˜ ํ†ต์ฐฐ๋ ฅ์„ ๊ณต์‹ํ™”ํ•œ ๋ถ„ํฌ ์ด๋ก ์ด๋ผ๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ฏธ์ ๋ถ„ํ•™ ๋ถ„์•ผ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ์›ƒ์Œ์„ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์†์„ ํ”๋“œ๋Š” ์ฃผ์žฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž˜๋ชป๋œ ๋ง์„ ํ•  ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฑ…์—์„œ ๋น„๊ณต์‹์ ์ธ ์ฃผ์žฅ ๋’ค์—๋Š” ํ™•์‹คํ•œ ์ˆ˜ํ•™์  ์ด๋ก ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ํƒ์ž ์œ„์—๋Š” ์„ ๋”์Šค ๋งฅ ๋ ˆ์ธ(Saunders Mac Lane)์˜ ์ˆ˜ํ•™์ž๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ๋ก ์˜ ๋‚ก์€ ์‚ฌ๋ณธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ๋ก ์ด๋ฏ€๋กœ ์ปดํ“จํ„ฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ฃผ์š” ๊ฐœ๋…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๊ฐ€ ์ธ๊ธฐ ์žˆ๋Š” ๋ช…๋ นํ˜• ์–ธ์–ด๋ณด๋‹ค ์ˆ˜ํ•™์— ๋” ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋Š” ๋” ๋งŽ์€ ์ถ”์ƒํ™” ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒ”์ฃผ๋ก ์˜ ํ˜œํƒ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ธฐ ์ „์— Haskell์„ ๋ฐฐ์›Œ์•ผ ํ•  ๊ฑฐ๋ผ๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ์œ ํ˜น์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ”์ฃผ๋ก ์ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์™ธ์—๋Š” ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋” ๋งŽ์€ C++ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋”๋Ÿฌ์šด ๊ตฌ๋ฌธ์„ ๊ทน๋ณตํ•ด์•ผ ํ•˜๊ณ  ์žฅํ™ฉํ•œ ๋ฐฐ๊ฒฝ์—์„œ ํŒจํ„ด์ด ๋ˆˆ์— ๋„์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋” ๋†’์€ ์ถ”์ƒํ™” ๋Œ€์‹  ๋ณต์‚ฌ, ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ชซ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Haskell์— ๊ด€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฑฑ์ •์€ ๋ฉ€์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Haskell ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋  ํ•„์š”๋Š” ์—†์ง€๋งŒ, C++๋กœ ๊ตฌํ˜„ํ•  ์•„์ด๋””์–ด๋ฅผ ์Šค์ผ€์น˜ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ Haskell์„ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•๊ณผ ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ์ด C++ ํ…œํ”Œ๋ฆฟ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋…์ž๋“ค์ด ์ด๋ฏธ Haskell์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฒœ์ฒœํžˆ ์†Œ๊ฐœํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒฝํ—˜์ด ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด ์Šค์Šค๋กœ ์ด๋ ‡๊ฒŒ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์ฃผ๋ก ์ด๋‚˜ ํ•จ์ˆ˜ํ˜• ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋žซ๋™์•ˆ ์ฝ”๋”ฉ์„ ํ•ด์™”๋Š”๋ฐ ๋ฌด์—‡์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋‚˜์š”? ํ™•์‹คํžˆ ๋ช…๋ นํ˜• ์–ธ์–ด๋ฅผ ์นจ๋ฒ”ํ•˜๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ํ˜• ๊ธฐ๋Šฅ์˜ ๊พธ์ค€ํ•œ ํ๋ฆ„์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ์ธ Java์กฐ์ฐจ๋„ ์ตœ๊ทผ C++์˜ ๋žŒ๋‹ค๊ฐ€ ๋ช‡ ๋…„๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ‘œ์ค€์œผ๋กœ ๊ธ‰๋ณ€ํ•˜๋Š” ์„ธ์ƒ์„ ๋”ฐ๋ผ์žก๊ธฐ ์œ„ํ•ด ๋น ๋ฅธ ์†๋„๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ํ™œ๋™์€ ํŒŒ๊ดด์ ์ธ ๋ณ€ํ™” ๋˜๋Š” ๋ฌผ๋ฆฌํ•™์ž๋“ค์ด ๋งํ•˜๋Š” ์ƒ์ „์ด๋ฅผ ์œ„ํ•œ ์ค€๋น„์ž…๋‹ˆ๋‹ค. ๋ฌผ์„ ๊ณ„์† ๊ฐ€์—ดํ•˜๋ฉด ๊ฒฐ๊ตญ ๋“๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์ ์  ๋œจ๊ฑฐ์›Œ์ง€๋Š” ๋ฌผ์—์„œ ๊ณ„์† ํ—ค์—„์„ ์ณ์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋Œ€์•ˆ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๊ตฌ๋ฆฌ์˜ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํฐ ๋ณ€ํ™”๋ฅผ ์ฃผ๋„ํ•˜๋Š” ํž˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ˜๋ช…์ž…๋‹ˆ๋‹ค. ๋„๋ฆฌ ํผ์ง„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ธ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋™์‹œ์„ฑ ๋ฐ ๋ณ‘๋ ฌ์„ฑ ๋ถ„์•ผ์—์„œ ์–ด๋–ค ๊ฒƒ๋„ ์‚ฌ์ง€ ์•Š๊ณ  ๋Œ€์‹  ์œ„ํ—˜ํ•˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋””์ž์ธ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ธฐ๋ณธ ์ „์ œ์ธ ๋ฐ์ดํ„ฐ ์€๋‹‰์€ ๊ณต์œ ์™€ ๋ณ€ํ™”๊ฐ€ ๊ฒฐํ•ฉํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์˜ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฎคํ…์Šค๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์ข‹์ง€๋งŒ, ๋ถˆํ–‰ํžˆ๋„ ์ž ๊ธˆ์€ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž ๊ธˆ์„ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์€ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์‰ฝ๊ณ  ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ๋ช…๋ นํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ™•์žฅ์„ฑ์˜ ํ•œ๊ณ„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ถ€์ž‘์šฉ์ด ๊ฑท์žก์„ ์ˆ˜ ์—†์ด ๋‚˜์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ์ข…์ข… ํŽธ๋ฆฌํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ํšจ๊ณผ๋Š” ์›์น™์ ์œผ๋กœ ์ด๋ฆ„๊ณผ ์ฃผ์„์œผ๋กœ ์ธ์ฝ”๋”ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SetPassword ๋˜๋Š” WriteFile์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋ถ„๋ช… ์ผ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ถ€์ž‘์šฉ์„ ์ƒ์„ฑํ•˜๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ํ•จ์ˆ˜ ์œ„์— ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•ฉ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ผ์ด ๋ณต์žกํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์ด ๋ณธ์งˆ์ ์œผ๋กœ ๋‚˜์˜๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ํฐ ๊ทœ๋ชจ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๋ถ€์ž‘์šฉ์ด ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์€ ํ™•์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ชจ๋‘ ๋ถ€์ž‘์šฉ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด์˜ ๋ณ€ํ™”์™€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋กœ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ๋Ÿฝ์˜ ์œ„๋Œ€ํ•œ ๊ณ ๋”• ๋Œ€์„ฑ๋‹น์˜ ๊ฑด์ถ•๊ฐ€๋“ค์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๋Š” ์žฌ๋ฃŒ์™€ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๊นŒ์ง€ ๊ธฐ์ˆ ์„ ์—ฐ๋งˆํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ”„๋ž‘์Šค์˜ ๋ณด๋ฒ ์—๋Š” ๋ฏธ์™„์„ฑ ๊ณ ๋”• ์–‘์‹์˜ ๋Œ€์„ฑ๋‹น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋Œ€์„ฑ๋‹น์€ ์ธ๊ฐ„์˜ ํ•œ๊ณ„์— ๋Œ€ํ•œ ๊นŠ์€ ํˆฌ์Ÿ์„ ์ฆ์–ธํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์˜ ๋ชจ๋“  ๋†’์ด์™€ ๊ฐ€๋ฒผ์šด ๊ธฐ๋ก์„ ๊นจ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ผ๋ จ์˜ ๋ถ•๊ดด๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ์‡ ๋ง‰๋Œ€์™€ ๋‚˜๋ฌด ์ง€์ง€๋Œ€ ๊ฐ™์€ ์ž„์‹œ ์กฐ์น˜๋Š” ๊ทธ๊ฒƒ์ด ๋ถ„ํ•ด๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๋งŽ์€ ์ผ์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„๋Œ€์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ํ˜„๋Œ€ ์žฌ๋ฃŒ ๊ณผํ•™, ์ปดํ“จํ„ฐ ๋ชจ๋ธ๋ง, ์œ ํ•œ ์š”์†Œ ๋ถ„์„, ์ผ๋ฐ˜ ์ˆ˜ํ•™๊ณผ ๋ฌผ๋ฆฌํ•™์˜ ๋„์›€ ์—†์ด ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๊ณ ๋”• ๊ฑด์ถ•๋ฌผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ธฐ์ ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋ฏธ๋ž˜ ์„ธ๋Œ€๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๋ณต์žกํ•œ ์šด์˜ ์ฒด์ œ, ์›น ์„œ๋ฒ„ ๋ฐ ์ธํ„ฐ๋„ท ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๋ณด์—ฌ์ฃผ์—ˆ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์— ๊ฐํƒ„ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋งค์šฐ ์–ด์„คํ”ˆ ํ† ๋Œ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ๊ธฐ์ดˆ๋ฅผ ๊ณ ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋ฒ  ๋Œ€์„ฑ๋‹น ๋ถ•๊ดด๋ฅผ ๋ง‰๋Š” ์ž„์‹œ ์กฐ์น˜

๋‹ค์Œ์œผ๋กœ โžก

Translated by @Minsu KimโœŒ