Rust: ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ง€์—ญ ์ฃผ๋ฏผ๋งŒ์„ ์œ„ํ•œ var ํ‚ค์›Œ๋“œ

์— ๋งŒ๋“  2012๋…„ 06์›” 20์ผ  ยท  35์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/rust

๋ฌธ์ œ #1273์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ง€์—ญ ์ฃผ๋ฏผ์— ๋Œ€ํ•ด let mut , ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ์— ๋Œ€ํ•ด mut ๋ฅผ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. let mut ๋Š” ๋‹จ์ผ ํ‚ค์›Œ๋“œ๋ณด๋‹ค ๋” ์žฅํ™ฉํ•˜๋ฉฐ ์—ด ์ •๋ ฌ๋„ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๊ฐ€๋ณ€ ํ•„๋“œ ์„ ์–ธ์— ๋Œ€ํ•œ var ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๋„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด ์ œ์•ˆ ์—†๋‹ค๊ณ  ์ƒ๊ฐ var ๊ฐ€๋ณ€ ์ง€์—ญ ์„ ์–ธ๊ณผ๋ฅผ mut ๊ฐ€๋ณ€ ํ•„๋“œ ์„ ์–ธ์— ๋Œ€ํ•œ :

let x = 7; // declaration of immutable variable x
var y = 7; // declaration of mutable variable y
type point = { mut x: int, mut y: int }; // declaration of mutable record type

๋ฐ์ด๋ธŒ

I-nominated

๋ชจ๋“  35 ๋Œ“๊ธ€

๊ณ ๋ฐฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ฐ€๋ณ€ ๋ณ€์ˆ˜์™€ ๊ฐ€๋ณ€ ํ•„๋“œ์— ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ var ๋Š” ๊ฝค ์ž˜ ์ฝํž™๋‹ˆ๋‹ค( let mut ์ข‹์•„ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ).

๊ฐ€๋ณ€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋ฒˆ๊ฑฐ๋กœ์šด ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ "์ผ๊ด€์„ฑ"์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋˜๋Š” "var"๊ฐ€ ๋” ๊ฐ•๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— "var"๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Œ). ๊ทธ๋Ÿฌ๋ฉด ์ „๋ฐ˜์ ์œผ๋กœ ๋œ ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Rust๊ฐ€ ์‹ฌ๊ฐํ•œ ์†๋ฐ• ๋ฐ ๊ทœ์œจ ์–ธ์–ด๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋„›์ง€๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ๋„๋•์ ์œผ๋กœ ์ •๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋” ์‰ฝ๊ฒŒ ์—‰๋ง์ด ๋˜๋Š” ๊ตฌ์กฐ").

ํ•œํŽธ์œผ๋กœ๋Š” ์ด ํ˜•์‹์—์„œ ์‹œ๊ฐ์  ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

let mut x = 4,
    y = 8;  // is y mutable or not?

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

์œ„์˜ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด let mut ๋ฅผ ๋‹จ์ผ ํ‚ค์›Œ๋“œ๋กœ ๋ฐ”๊พธ๋Š” ์•„์ด๋””์–ด๊ฐ€ ์—ฌ์ „ํžˆ ๋งˆ์Œ์— ๋“ค์ง€๋งŒ mut ์ž์ฒด๋กœ ์ถฉ๋ถ„ํ•  ๋•Œ ์ƒˆ ํ‚ค์›Œ๋“œ๋ฅผ ๋„์ž…ํ•  ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? #1273์˜ ์›๋ž˜ ์ œ์•ˆ?

@pcwalton ์€ mut ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ๋ฌธ์ œ๋ฅผ ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ ๋ฆฌํ„ฐ๋Ÿด ๋ฐ ๋ธ”๋ก ํ‘œํ˜„์‹์— ๋ชจํ˜ธ์„ฑ์ด ์žˆ์–ด ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

{ mut x: int ...

๋ฆฌํ„ฐ๋Ÿด์„ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ๋‹จํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

var ๊ฐ€ Rust์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ  let ๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์šฐ๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ var ๋Š” JavaScript์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ด ์ œ์•ˆ์˜ ์ข‹์€ ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์ œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ง€๊ธˆ let ์™€ var ๊ธธ์ด๊ฐ€ ๊ฐ™์•„ ์ •๋ ฌ์— ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ง€์ ํ•˜๋Š” ๊ฒƒ์„ ์šฐ์—ฐํžˆ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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

let ์™€ var ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ธด ํ•˜์ง€๋งŒ(Javascript์™€ ๊ฐ™์ง€๋งŒ 100% ๋‹ค๋ฆ„) ๋ณ€์ˆ˜๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋ฆฐํŠธ ํŒจ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ›จ์”ฌ ๋œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ€๋ณ€์„ฑ์„ ์œ ํ˜•์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“ค ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ง€์—ญ ์ฃผ๋ฏผ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์ด๊ฒƒ์ด ๊ด€๋ จ์ด ์—†๊ฒŒ ๋งŒ๋“œ๋Š”๊ฐ€?

์–ด๋•Œ์š”:

val x = ... // immutable (val-ue)
var y = ... // mutable (var-iable)

์Šค์นผ๋ผ์—์„œ์ฒ˜๋Ÿผ.

@brson ์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐ mut ๋ฅผ ์œ ํ˜•์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ฆ‰, let x = mut 10; ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋‹ค์‹œ ์—ด์–ด!

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ํ™•์‹ ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋‚˜๋Š” mut์„ ์œ ํ˜•์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด "์™„๋ฃŒ๋œ ๊ฑฐ๋ž˜"์ธ์ง€๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ๋‚˜๋Š” let x = mut 5 ์“ธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์ ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ•ญ์ƒ ์˜ค๋Š˜์ฒ˜๋Ÿผ let mut x = 5 ์“ธ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์œ ํ˜•์˜ "๊ฐ€๋ณ€์„ฑ"์€ ํ• ๋‹น๋œ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์„ ์–ธ๋œ ๋ฐฉ์‹์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด [mut int] ์œ ํ˜•์˜ ๋ฐฐ์—ด x ์ด ์žˆ๊ณ  let y = x[0] ํ•˜๋ฉด y ๊ฐ€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋ญ”๊ฐ€? ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Dretch ์Šค์นผ๋ผ ์„ ๋ก€๋Š” ์ข‹์ง€๋งŒ ์ถฉ๋ถ„ํžˆ ๊ตฌ๋ณ„๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— val/var๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ var ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ @eholk ์˜ ์šฐ๋ ค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ ๋ชจ๋“  ๊ฒƒ์„ ๋ถˆ๋ณ€์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ์„ ์ƒ๊ธฐ์‹œํ‚จ ๋‹ค์Œ mut ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ var/let ๋ถ„ํ• ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ๋œํ•œ ์ข‹์€ ํ–‰๋™์ž…๋‹ˆ๋‹ค. var ๋ฐ let ๊ฒƒ์€ ๋˜‘๊ฐ™์ด ์–ด๋ ต์ง€๋งŒ let mut ์ž…๋ ฅํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. let let mut ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  let .

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์—†์œผ๋ฉฐ ์„ธ ๊ธ€์ž ํ‚ค์›Œ๋“œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น๋ฌธ์˜ ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@nikomatsakis ํŠนํžˆ, ๋‹จ์ผ ํ• ๋‹น์— ๋Œ€ํ•œ ๊ทœ์น™์€ ์œ ํ˜•์ด ์•„๋‹ˆ๋ผ ์„ ์–ธ์˜ ๊ฐ€๋ณ€์„ฑ์—์„œ ๋น„๋กฏ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ํ• ๋‹น ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์žฌ๋ฏธ์žˆ๋Š” ๋ƒ„์ƒˆ๊ฐ€๋‚ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€๋ณ€ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ถˆ์ด์ต ์„ ์•ˆ๋œ๋‹ค๋Š” @pcwalton์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. var ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ์šฐ๋ ค์— ๊ด€ํ•ด์„œ๋Š” var ๋ฐ”์ธ๋”ฉ์ด ๋‹จ์ผ ํ• ๋‹น๋œ ๊ฒฝ์šฐ ๋ถˆํ‰ํ•˜๋Š” ์„ ํƒ์  ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋˜ํ•œ Rustc์™€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ข‹์€ ์Šคํƒ€์ผ์˜ ์„ ๋ก€๋ฅผ ์„ธ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ด๋ธŒ

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์„ ์–ธํ•˜๋ฉด ์ •๋ง ๋”์ฐํ•ฉ๋‹ˆ๊นŒ? var ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” Rust ํ”„๋กœ๊ทธ๋ž˜๋จธ ์„ธํŠธ์™€ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์— let ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๋Š” ๋‹ค๋ฅธ ์„ธํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ์„ธ์ƒ์˜ ๋์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค var ํ•„์š”ํ•  ๋•Œ var . ์ตœ์ดˆ์˜ Rust ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ์„œ, ์šฐ๋ฆฌ๋Š” let ์™€ var ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ ๋ก€๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IMHO์˜ ์ข‹์€ ๊ตฌ๋ฌธ ๋””์ž์ธ์€ ๋‹น์‹ ์ด ํ•˜๊ณ  ์‹ถ์€ "๋ชจ๋“  ๊ฒƒ"์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ธ์–ด์˜ ์˜๋ฏธ์™€ ๋””์ž์ธ ๋ชฉํ‘œ์˜ "์›ํ™œํ•œ ๊ฒฝ๋กœ"๋กœ ์‚ฌ๋žŒ๋“ค์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ฐ€์–ด ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Rust์˜ ๊ธฐ๋ณธ ์›์น™ ์ค‘ ํ•˜๋‚˜๋Š” ํšจ์œจ์ ์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ ๋ชฉ๋ก์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๊ตฌ๋ฌธ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด์œ ๋กœ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ํŽธ๋ฆฌํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ณ (์•ˆ์ „ํ•œ ๋™์‹œ์„ฑ์ด ๋˜ ๋‹ค๋ฅธ ์›์น™์ด๊ธฐ ๋•Œ๋ฌธ์—), ์ž„์˜์˜ int๋ฅผ ํฌ์ธํ„ฐ๋กœ ์บ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ๋„ ๋งค์šฐ ํŽธ๋ฆฌํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์ด ํฐ ์›์น™์ด๊ธฐ ๋•Œ๋ฌธ์—).

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

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

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

๋ฐ์ด๋ธŒ

์ด ๊ฒฝ์šฐ "let mut foo = bar"์™€ ๋ฐ˜๋Œ€๋กœ "let foo = mut bar" ๋˜๋Š” "let foo := bar"๊ฐ€ ์ฒซ ๋ฒˆ์งธ ํ† ํฐ์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๊ฐ€๋ณ€ ๊ธธ์ด์ผ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฌธ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—์„œ ์ถ”๊ฐ€ ์ˆ˜์ •์ž๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ค, ์ €๋Š” := ์•„์ด๋””์–ด์— ๋‹ค์†Œ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ด๋ธŒ

๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ํŒŒ์Šค์นผ์€ ์˜๊ตฌ์ ์œผ๋กœ ๋ฉ‹์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ๊ฐ€์ ธ. :)

๋ฐ์ด๋ธŒ

๋˜ํ•œ let foo := bar ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

let mut foo;
foo = bar;

๊ฐ™์€ ํŒจํ„ด์„ ์ž‘์„ฑํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•ญ์ƒ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ด ํŒจํ„ด์ด ๋•Œ๋•Œ๋กœ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

@eholk ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ทธ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ฑฐ์˜ ๋ชจ๋“  ์ฃผ๋ฅ˜ ์–ธ์–ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์—๊ฒŒ ๊ทธ๊ฒƒ์ด ๋„ˆ๋ฌด ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ด๋ธŒ

:= ์™€ ๊ด€๋ จํ•˜์—ฌ Go๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํ˜• ์ถ”๋ก  ํ• ๋‹น์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(์•„์ง ์ฃผ๋ฅ˜ ์–ธ์–ด๋Š” ์•„๋‹ˆ์ง€๋งŒ). ๊ทธ๋Ÿฌ๋‚˜ ํ•œ ๋ˆˆ์— ๋‘ ํ˜•์‹์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let foo = "hello";
let foo := "hell";

ํ˜„์žฌ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ brson์˜ ์ฃผ์žฅ(์ฆ‰, ๊ฐ€๋ณ€ ์„ ์–ธ์ด ๋จผ์ € ๋ถˆ๋ณ€ ์„ ์–ธ์„ ํ•„์š”๋กœ ํ•จ)์€ ์„ค๋“๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋…๋‹จ์ ์ด๋ผ๋ฉด, ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ฐ”๋ณด๊ฐ€ ์•„๋‹Œ ํ•œ ์™„์ „ํžˆ ์ข‹์Šต๋‹ˆ๋‹ค. :)

= ๋Œ€ := . ๋Œ€๋ถ€๋ถ„ val , var ๋ฐ ๊ทธ ๋ณ€ํ˜•์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์„ ์ œ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์€ _๋ช…๋ฐฑํ•œ_ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฑ„ํƒํ•˜๋ฉด ํ˜์˜ค๊ฐ์„ ๊ทธ๋งŒ๋‘์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ, "๋‹ˆ๋ชจ๋‹‰์„ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค"๋Š” ๊ฒƒ์€ ๋‚˜์œ ์ง•์กฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋” ๊ดœ์ฐฎ๋‹ค:

  • ์œ ํ˜•์ด ์ง€์‹œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • mut ๋‹จ๋…์œผ๋กœ ๋กœ์ปฌ ์„ ์–ธ์ž๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ณ  ํŒŒ์„œ๊ฐ€ ๋ ˆ์ฝ”๋“œ ๊ตฌ๋ฌธ ๋Œ€ ๋กœ์ปฌ ์„ ์–ธ์— ๋Œ€ํ•œ ์ปค๋ฐ‹์„ ์ง€์—ฐํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ LL(1)์€ ์ถ”๊ฐ€ ์ค‘๊ฐ„ ๋ฌธ๋ฒ• ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ถ”๊ฐ€ ์—ญ์ถ”์ ์€ ์—†์Šต๋‹ˆ๋‹ค(์•ž์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์œ ํšจํ•จ).
  • let mut .

"์šฐ์—ฐํ•œ" ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ์„ ํ”ผํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ํ™˜๊ฒฝ ์บก์ฒ˜๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ฐจ์šฉ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ถ„์„์— ๋Œ€ํ•œ ์œ„ํ—˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›๊ฑฐ๋ฆฌ ํ–‰๋™์˜ ํ˜•ํƒœ๋กœ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

(๋ชจ๋“  let์€ ์ฒ˜์Œ์—๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ํ™˜๊ฒฝ ์บก์ฒ˜๋„ ์—†์—ˆ๊ณ  ๋ฐ”์ธ๋”ฉ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฐ”์ธ๋”ฉ์ด ์—†๊ณ  env ์บก์ฒ˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. Tomayto, tomahto.)

๋‚˜๋Š” mutables๊ฐ€ ์ง€๊ธˆ ์•”์‹œ์ ์œผ๋กœ ์บก์ฒ˜๋  ์ˆ˜ ์—†๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

@graydon ์€ ๋‘ ๊ฐ€์ง€ ์›๋ž˜ ๋™๊ธฐ๊ฐ€

  • fn@ ์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜์˜ ์•”์‹œ์  "๋ณต์‚ฌ๋ณธ" ์บก์ฒ˜
  • ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ณ  ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”์ง€ ์ดํ•ด

ํ›„์ž๋Š” ๋” ์ด์ƒ ๊ด€๋ จ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ/๋ถˆ๋ณ€ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์€ ์‹ค์ œ๋กœ ๋„ˆ๋ฌด ์กฐ์žกํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์šฉ์€ ๋ณ€์ˆ˜๋ฅผ "์ผ์‹œ์ ์œผ๋กœ" ์ฐจ์šฉํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋Š” ๋™์•ˆ ๋ณ€์ˆ˜๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š๋Š” ํ•œ ๊ฐ€๋ณ€ ๋ณ€์ˆ˜๋Š” ๋ถˆ๋ณ€ ptr๋กœ ์ฐจ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„.

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

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

@Dretch ๋˜ํ•œ "val" ๋ฐ "var" ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š” Scala ์Šคํƒ€์ผ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ˜„์žฌ ๊ตฌ๋ฌธ์ด ์–ด๋–ป๊ฒŒ mutables๊ฐ€ ์•„ํ”ˆ ์—„์ง€์†๊ฐ€๋ฝ์ฒ˜๋Ÿผ ํŠ€์–ด๋‚˜์˜ค๊ฒŒ ๋งŒ๋“œ๋Š”์ง€๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. val ๋ฐ var ๋Š” ๊ทธ๋Ÿฐ ๋ฉด์—์„œ ์‹œ๊ฐ์ ์œผ๋กœ ๋„ˆ๋ฌด ์œ ์‚ฌํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ์ด ์ ˆ๋Œ€์ ์œผ๋กœ _๋ฐ˜๋“œ์‹œ_ ํŠ€์–ด๋‚˜์™€์•ผ ํ•œ๋‹ค๋Š” ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ ํ‚ค์›Œ๋“œ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋šœ๋ ทํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์„ฑ์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๊ฐ€ ๋…น์—์„œ ์ œ๊ฑฐ๋  ๊ฒƒ์ž„์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด let mut ๋Œ€์‹  mut ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ? ๋ ˆ์ฝ”๋“œ/๋ธ”๋ก ๋‚ด ๋ณ€์ˆ˜ ๋ชจํ˜ธ์„ฑ์ด ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ?

๋˜ํ•œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๊ฐ€ ๋‚จ์•„ ์žˆ์–ด๋„ ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ตฌ์กฐ์  ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ง„ํ–‰ ์ค‘์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@Dretch ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ์žˆ๊ณ  ๊ตฌ์กฐ์  ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์‚ฌ๋ผ์ง„ ๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

๋™๊ฒฐ/ํ•ด๋™์˜ ๊ฒฝ์šฐ mut ๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์„ ์–ธ ํ‚ค์›Œ๋“œ(Dretch๊ฐ€ ์ œ์•ˆํ•œ ๋Œ€๋กœ)๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด _๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. . ์˜ค๋Š˜ ๋น„๊ต:

let foo = 1;  // immutable
/* 10,000 lines of code here */
let mut foo = foo;  // we're making foo mutable, totally understandable
/* 10,000 lines of code here */
let foo = foo;  // potential wtf

์ œ์•ˆ:

let foo = 1;  // immutable
/* 10,000 lines of code here */
mut foo = foo;  // a mutable foo, no problems here
/* 10,000 lines of code here */
let foo = foo;  // slightly less of a potential for wtf, since we officially have two declaration forms

๋‚˜๋Š” ๋˜ํ•œ ๋…น์ฃผ์˜ ํ•  ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๊ธฐ๋ก ํ•  ๊ฒƒ ๋•Œ๋ฌธ์— ๋œ ์ผ๊ด€ "ํ”ผ ์‹œํ—˜ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ถ€์žฌ๋Š” ๋ถˆ๋ณ€์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค" let foo = 1; ์˜คํžˆ๋ ค๋ณด๋‹ค๋Š” ๋‹ค๋งŒ foo = 1; (ํ›„์ž์˜ ํ˜•ํƒœ๋Š” ๋ถ„๋ช…ํžˆ ์„ ์–ธ์— ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Œ).

Kotlin ์€ val ๋ฐ var ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด ๋ณ€๊ฒฝ์„ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ, ์ž˜ ์ •์˜๋œ ์ด์ •ํ‘œ 1์„ ์ง€๋ช…ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

mut์„ ํŒจํ„ด ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํ•ฉ์˜์ž…๋‹ˆ๋‹ค. ํ์‡„.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰