ํ’€์Šคํƒ ์›น๐ŸŒ ๊ฐœ๋ฐœ์ž ์ง€๋ง์ƒ ๐Ÿง‘๐Ÿฝโ€๐Ÿ’ป
โž• ์ธ๊ณต์ง€๋Šฅ ๊ด€์‹ฌ ๐Ÿค–


Categories


Recent views


OSSU PL-A Section 1

์ถœ์ฒ˜ ๊ฐ•์˜ Programming Languages, Part A, ์›Œ์‹ฑํ„ด ๋Œ€ํ•™๊ต Programming Languages, Part A, ์›Œ์‹ฑํ„ด ๋Œ€ํ•™๊ต ๋ณด์•ˆ ํ™•์ธ : ์™ธ๋ถ€๋งํฌ
"https://www.coursera.org/learn..."๋กœ ?

  1. ํ‘œํ˜„๊ณผ ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ(Expression and Variable Bindings)
  2. pair์™€ tuple
    • List
      • ์ง€์—ญ ๋ณ€์ˆ˜
        • Options
          • ๋ณ€๊ฒฝ(Mutation)์˜ ๋ถ€์žฌ์™€ ์ด๋กœ ์ธํ•œ ์ด๋“

            OSSU PL-A Section 1

            ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด๋‹ค.

            • ๋ฌธ๋ฒ• (Syntax): ์–ด๋–ป๊ฒŒ ๋™์ž‘์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ€? (ex) int x = 3;)
            • ์˜๋ฏธ (Semantics): ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์–ด๋–ค์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฐ€? (ex) x๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ๊ณผ์ •)
            • ๊ด€์šฉ๊ตฌ (Idioms): ํ•ด๋‹น ๋™์ž‘์„ ์œ„ํ•œ ํ‘œํ˜„์„ ์–ด๋–ค ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฐ€, ์ผ์ข…์˜ ๋ฌธ๋ฒ•์˜ ๋ชจ์Œ (ex) ํŠน์ • List๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ด์ฌ์€ for ๋ฌธ์„, Racket์€ ์žฌ๊ท€๋ฅผ ๋งŽ์ด ์ด์šฉํ•จ.)
            • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Libraries): ์ด๋ฏธ ์ง€์›ํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex) ํŒŒ์ผ ์ ‘๊ทผ์„ ์œ„ํ•œ os ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
            • ๋„๊ตฌ๋“ค(Tools): ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ๋“ค (ex) ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ, ๋Œ€ํ™”ํ˜• ๋„๊ตฌ ๋“ฑ)

            ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šธ ๋•Œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์€ ๋ฌธ๋ฒ•(Syntax), ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ฐ•์กฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ ์ •๋ง ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์˜๋ฏธ(semantics)์™€ ๊ด€์šฉ๊ตฌ(idioms)๋‹ค.

            ํ‘œํ˜„๊ณผ ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ(Expression and Variable Bindings)

            ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ”์ธ๋”ฉ์˜ ๋‚˜์—ด๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ฐ ๋ฐ”์ธ๋”ฉ์€ ํƒ€์ž… ํ™•์ธ ์ดํ›„ ํ‰๊ฐ€(evaluate) ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

            ๋ฌธ๋ฒ•(syntax)

            ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ”์ธ๋”ฉ์„ ํ‘œํ˜„ํ•œ๋‹ค.

            val x = e;
            
            
            • val์€ ํ‚ค์›Œ๋“œ x๋Š” ๋ณ€์ˆ˜๋ช…, e๋Š” ํ‘œํ˜„์ด๋ฉฐ, PL์— ๋”ฐ๋ผ ;๋ฅผ ์ƒ๋žตํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

              ์˜๋ฏธ(semantics)

              ์ •์  ํ™˜๊ฒฝ(static environment)์€ ๋ฐ”์ธ๋”ฉ์˜ ํƒ€์ž…์„, ๋™์  ํ™˜๊ฒฝ(dynamic environment)์€ ๋ฐ”์ธ๋”ฉ์˜ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
              ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ •์  ํ™˜๊ฒฝ์€ ๋ณดํ†ต context๋กœ, ๋™์  ํ™˜๊ฒฝ์€ Environment๋กœ ๋งŽ์ด ์นญํ•ด์ง„๋‹ค.

            1. ๋ฐ”์ธ๋”ฉ์˜ ํƒ€์ž…ํ™•์ธ๊ณผ ํ‰๊ฐ€(Evaluation)์„ ์ง„ํ–‰
              • ์ด์ „ ๋™์  ํ™˜๊ฒฝ๋ฅผ ์ด์šฉํ•ด ํ‘œํ˜„ e์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ƒ์„ฑ
              • ์ด์ „ ์ •์  ํ™˜๊ฒฝ๋ฅผ ์ด์šฉํ•ด ํ‘œํ˜„ e์˜ ํƒ€์ž…์„ ํ™•์ธ
            2. ํ•ด๋‹น ํƒ€์ž…์„ ์ƒˆ๋กœ ํ™˜๊ฒฝ์— ์ถ”๊ฐ€
              • x์˜ ํƒ€์ž…์„ e์˜ ํƒ€์ž… ํ™•์ธ ๊ฒฐ๊ณผ์ธ t๋กœ ๋งคํ•‘ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ •์  ํ™˜๊ฒฝ ์ƒ์„ฑ
              • ` x์˜ ๊ฐ’์„ e์˜ ๊ฒฐ๊ณผ๊ฐ’์ธ v`๋กœ ๋งคํ•‘ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋™์  ํ™˜๊ฒฝ ์ƒ์„ฑ
              • ์ด๋•Œ v๋Š” ๋” ์ด์ƒ ๊ณ„์‚ฐํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฐ’์œผ๋กœ ๋งคํ•‘ ๋จ.

                ์˜ˆ์‹œ

                ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด์ž.
                ```sml
                val x = 1;
                val y = 2;
                val z = x + y; (* ๋ฐ”์ธ๋”ฉ ์ง„ํ–‰ *)

            - ์ด์ „ ๋™์  ํ™˜๊ฒฝ(`x = 1, y = 2`)๋ฅผ ์ด์šฉํ•ด `e(x + y)`๊ฐ€ ํ‰๊ฐ€๋˜์–ด ์ƒˆ๋กœ์šด ๋™์  ํ™˜๊ฒฝ `(x = 1, y = 2, z = 3)`์ด ๋ณ€๊ฒฝ๋œ๋‹ค.
            	- ์ด๋•Œ ์ƒˆ๋กœ์šด ๊ฐ’ `x + y`๋Š” ๋”์ด์ƒ ๊ณ„์‚ฐ์ด ํ•„์š”์น˜ ์•Š๋„๋ก `1 + 2`๊ฐ€ ์•„๋‹Œ `3`์œผ๋กœ ํ‰๊ฐ€๋˜์–ด ์ €์žฅ
            - ์ด์ „ ์ •์  ํ™˜๊ฒฝ `(x = int, y = int)`๋ฅผ ์ด์šฉํ•ด `int + int`๊ฐ€ `int`๋กœ ํ‰๊ฐ€๋˜์–ด ์ƒˆ๋กœ์šด ์ •์  ํ™˜๊ฒฝ `(x = int, y = int, z = int)`๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
            
            ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐ”์ธ๋”ฉ์€ ์ˆ˜์ •๋˜์ง€ ๋ชปํ•˜์ง€๋งŒ, ๋Œ€์‹  ๋ฎ์–ด์”Œ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
            ๋”ฐ๋ผ์„œ, `val f = z` ๋ฐ”์ธ๋”ฉ ์ดํ›„, `val f = 4` ๋ฐ”์ธ๋”ฉ์ด ์ถ”๊ฐ€๋˜๋ฉด, `f`๋Š” 4๊ฐ€ ๋˜์ง€๋งŒ, `z`๋Š” ์—ฌ์ „ํžˆ ์ด์ „๊ณผ ๊ฐ™๋‹ค.
            
            ์ถ”๊ฐ€์ ์ธ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž
            - ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฌธ
            	- ๋ฌธ๋ฒ• : `if e1 then e2 else e3` (`e1, e2, e3`๋Š” ํ‘œํ˜„)
            	- ํƒ€์ž… ํ™•์ธ: `e1`์€ ์กฐ๊ฑด๋ฌธ์—์„œ `bool` ํƒ€์ž…์ด ๋“ค์–ด๊ฐ€๋Š” ์ž๋ฆฌ๋ฉฐ, `e2`, `e3`๋Š” ์„œ๋กœ ๊ฐ™์€ ํƒ€์ž… `t`(์•„๋ฌด ํƒ€์ž…์ด๋‚˜ ๊ฐ€๋Šฅ)์ด๋‹ค. ์ถ”๊ฐ€๋กœ ์ •์  ํ™˜๊ฒฝ์„ ํ™•์ธํ•˜์—ฌ ํƒ€์ž…์„ ํ™•์ธ
            	- ํ‰๊ฐ€: ๋™์  ํ™˜๊ฒฝ์„ ํ™•์ธ ๊ฒฐ๊ณผ, `e1`์˜ ๊ฒฐ๊ณผ ๊ฐ’์ด `true`์ด๋ฉด `e2`๊ฐ’์ด ๋™์  ํ™˜๊ฒฝ ํ•˜์— ํ‰๊ฐ€๋˜์–ด ํ•ด๋‹น ๋ฐ”์ธ๋”ฉ์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ €์žฅ๋จ. ๋ฐ˜๋Œ€๋กœ `false`์ด๋ฉด `e3`๊ฐ€ ๋Œ€์ƒ.
            
            ## ํ•จ์ˆ˜ ๋ฐ”์ธ๋”ฉ
            ํ•จ์ˆ˜๋Š” **๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋Š” ํ‘œํ˜„๊ณผ ์ด์— ์‚ฌ์šฉ๋˜๋Š” ์ธ์ž๋“ค**์ด๋ฉฐ, ์•„๋ž˜์™€ ๋น„์Šทํ•˜๊ฒŒ ํ‘œํ˜„๋œ๋‹ค.
            ### ๋ฌธ๋ฒ•(syntax)
            ```sml
            fun x0 (x1: t1, ..., xn: tn) = e
            
            
            • ํ•จ์ˆ˜ ๋ฐ”์ธ๋”ฉ ์ด๋ฆ„์€ x0
            • ๊ฐ ์ธ์ˆ˜๋Š” x1~xn์œผ๋กœ ๋งคํ•‘๋˜๋ฉฐ, ๊ฐ ํƒ€์ž…์„ t1~tn์œผ๋กœ ์ •์  ํ™˜๊ฒฝ์— ๋งคํ•‘๋œ๋‹ค.
            • ๊ฒฐ๊ณผ๊ฐ’ e

            ์˜๋ฏธ(semantics)

            ํƒ€์ž… ํ™•์ธ

            ํ‘œํ˜„ e๋Š” ์•ž์„  ์ •์  ํ™˜๊ฒฝ๊ณผ ๋ช…์‹œ๋œ ์ธ์ž๋“ค์˜ ํƒ€์ž…๋“ค์„ ํ†ตํ•ด ํƒ€์ž… t๋กœ ์œ ์ถ”๋œ๋‹ค.
            ์ฆ‰, x0 ํ•จ์ˆ˜์˜ ํƒ€์ž… t1 * ... * tn -> t๋กœ ์ •์ ํ™˜๊ฒฝ์— ๋งคํ•‘ ๋œ๋‹ค.

            • *๋Š” SML์—์„œ ๊ฐ ์ธ์ž๋ฅผ ๋‚˜๋ˆ„๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‘œํ˜„
              ์—ฌ๊ธฐ์„œ ๊ฐ ์ธ์ž x1,...xn์˜ ์ •์  ํ™˜๊ฒฝ๊ฐ’ t1,...,tn์€ ์ „์—ญ ์ •์  ํ™˜๊ฒฝ์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ ์ •์  ํ™˜๊ฒฝ์— ์ €์žฅ๋œ๋‹ค.

              ํ‰๊ฐ€

              ํ•จ์ˆ˜ ๋ฐ”์ธ๋”ฉ์˜ ํ‰๊ฐ€๋Š” ๋ฐ”๋กœ ํ‰๊ฐ€๋˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ(called)๋ ๋•Œ ํ‰๊ฐ€๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์žฌ๊ท€ ํ•จ์ˆ˜ ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

              ํ•จ์ˆ˜ ํ˜ธ์ถœ(Function calls)

              ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ x0 (e1,...,en)์˜ ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
              ํƒ€์ž… ํ™•์ธ์˜ ๊ฒฝ์šฐ,

            • x0์˜ ํƒ€์ž…์ด t1 * ... * tn -> t์ผ ๊ฒฝ์šฐ ์ „์ฒด ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ํƒ€์ž…์€ t๋กœ ์ •ํ•ด์ง„๋‹ค.
              ํ‰๊ฐ€์˜ ๊ฒฝ์šฐ
            • ๊ฐ ํ‘œํ˜„ e1,...,en์ด ๋จผ์ € v1,...,vn์œผ๋กœ ํ‰๊ฐ€๋œ ํ›„, ์ด ๊ฐ’์„ ํ†ตํ•ด ์ „์ฒด ํ•จ์ˆ˜ ๊ฒฐ๊ณผ e๊ฐ€ v๋กœ ํ‰๊ฐ€๋œ๋‹ค.
            • ์ด๋•Œ ์ „์ฒด ํ•จ์ˆ˜์— ํ‰๊ฐ€๋˜๋Š” ์ •์ , ๋™์  ํ™˜๊ฒฝ์€ ์–ด๋Š ์‹œ๊ธฐ์˜ ๊ฒƒ์ผ๊นŒ? ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ? ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ? ์ด๋Š” ๋‚˜์ค‘์— lexical scope๋กœ ๋ฐฐ์šฐ๊ฒŒ ๋œ๋‹ค.

            pair์™€ tuple

            ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด ๋ฌถ์€ ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด pair๋‚˜ tuple์„ ์ง€์›ํ•œ๋‹ค.
            ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

            val x = (e1, ... ,en) (* x = t1*...*tn ์œผ๋กœ ์ •์  ํ™˜๊ฒฝ์— ๋งคํ•‘*)
            (*ํ‘œํ˜„์€ x = (v1,...,vn) ์ฒ˜๋Ÿผ ๋‚˜๋‰˜์–ด ๋งคํ•‘*)
            
            

            ๋‚ด๋ถ€์—๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ํ‘œํ˜„์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ tuple ๋˜ํ•œ ๊ฐ€๋Šฅํ•˜๋‹ค.

            • ์ด๋•Œ๋Š” x = (t0 * t1)*...*tn ๊ฐ™์ด ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด ๋งคํ•‘๋œ๋‹ค.
              ์ˆ˜๊ฐ€ ๋‘˜์ธ tuple์„ pair๋ผ๊ณ  ํ•œ๋‹ค.

            ์‚ฌ์‹ค, ํ•จ์ˆ˜์˜ ์ธ์ž๋“ค์€ ์ผ์ข…์˜ ํ•˜๋‚˜์˜ ํŠœํ”Œ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

            List

            ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด, ํŠน์ • ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ž„์˜์˜ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ํŠœํ”Œ๊ณผ ๋‹ฌ๋ฆฌ ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ๋“ค์–ด๊ฐ„๋‹ค.

            ๋ฆฌ์ŠคํŠธ ๋‚ด์— ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ ๋˜ํ•œ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

            ๋น„์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋Š” []๋กœ ํ‘œํ˜„๋˜๋ฉฐ, a' list๋กœ ์ •์ ํ™˜๊ฒฝ์— ๋งคํ•‘๋˜๋ฉฐ, a'๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ์˜๋ฏธํ•˜๋Š” ์ž„์‹œ ๊ฐ’์œผ๋กœ, ๋ชจ๋“  ๊ฐ’๋“ค์ด ๋ฆฌ์ŠคํŠธ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

            ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๋ฆฌ์ŠคํŠธ [e1, ..., en]์€

            • [v1, ...., vn]์˜ ํ˜•ํƒœ๋กœ ๋™์  ํ™˜๊ฒฝ์— ๋งคํ•‘
            • ์ด๋•Œ e1,..., en์€ ์ „๋ถ€ ๊ฐ™์€ ํƒ€์ž…์ด์—ฌ์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ t0๋กœ ๋†“์œผ๋ฉด ์ •์ ํ™˜๊ฒฝ์— t0 list ํƒ€์ž…์œผ๋กœ ๋งคํ•‘๋œ๋‹ค.

            ์ง€์—ญ ๋ณ€์ˆ˜

            ํ•จ์ˆ˜ ๋‚ด์— ์ƒˆ๋กœ์šด ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด, ํ•ด๋‹น ๋ฐ”์ธ๋”ฉ๋“ค์€ ๊ธฐ์กด์˜ ์ „์—ญ ํ™˜๊ฒฝ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜๋‚ด ์ง€์—ญ ๋ฐ”์ธ๋”ฉ๋“ค์€ ํ•จ์ˆ˜ ๋‚ด์—์„œ์˜ ์‚ฌ์šฉ์œผ๋กœ๋งŒ ๊ตญํ•œ๋œ๋‹ค.

            ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋Š˜๋ฆฌ๊ณ , ๋ณ€์ˆ˜๋ช…์˜ ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

            Options

            ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ(SOME)์™€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(NONE)๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, t option ํ˜•์‹์œผ๋กœ ์ •์  ํ™˜๊ฒฝ์— ๋งคํ•‘๋œ๋‹ค.
            null, isSome์˜ ํ•จ์ˆ˜๋กœ NONE์ธ์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,valOf ๋“ฑ์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

            ๋ณ€๊ฒฝ(Mutation)์˜ ๋ถ€์žฌ์™€ ์ด๋กœ ์ธํ•œ ์ด๋“

            ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์€ ๋ฐ”์ธ๋”ฉ ๋“ค์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“  ๊ฒฝ์šฐ์™€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋กœ ๋‚˜๋‰œ๋‹ค.

            ์žฅ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ๋ณ€๊ฒฝ(Mutation)์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ๊ฐ’์— ๋Œ€ํ•œ ์›๋ณธ ๊ฐ’์— ์ˆ˜์ • ์ ‘๊ทผ ๋ณด์•ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ๊ณ , ๊ณต์œ ํ•˜๋Š” ๊ฐ’, ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.

            ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋“ค์€ ๋ณดํ†ต ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์–ด ์žˆ์œผ๋ฉฐ, Java์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋„ ์กด์žฌํ•œ๋‹ค.

            • ๊ทธ๋ž˜์„œ ์ž๋ฐ”์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ’๋“ค์˜ ์ฐธ์กฐ์™€ ๋ณต์‚ฌ ์—ฌ๋ถ€๋ฅผ ์ผ์ผ์ด ์‹ ๊ฒฝ์จ์•ผํ•˜์ง€๋งŒ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ทธ๋ ‡์ง€ ์•Š์•„๋„ ๋œ๋‹ค.