DEV Community 👩‍💻👨‍💻

Sung-Chul Lee (이성철)
Sung-Chul Lee (이성철)

Posted on

[3분 Elixir] 변수의 재바인딩과 불변성

=불변성은 함수형 언어에서 자주 강조되는 키워드입니다.* 불변성은 한 번 지정된 데이터는 절대로 바뀌지 않는다는 원칙을 대변합니다. 불변성이 있으면 가장 좋은 것은 바로 동시성 프로그램에서 프로그래머들이 실수할 수 있는 부분을 대폭 줄여줄 수 있다는 것입니다.

Elixir도 마찬가지로 불변성에 기반한 언어입니다. Elixir도 한번 메모리에 입력된 데이터는 바뀌지 않는다는 원칙은 똑같습니다. 그러니 불변성을 가짐으로써 얻을 수 있는 장점을 모두 취할 수 있습니다.

그런데 Elixir의 다음과 같은 패턴매칭문을 보면 Elixir가 정말 불변성을 지원하는 언어인지 의심이 될 수 있습니다. 이 코드는 완벽한 Elixir 소스코드입니다. 언뜻보기에는 a에 두 번 다른 값을 넣은 듯 보이므로 불변성을 지원하지 않는 것처럼 보입니다.

iex> company = "hyundai"
"hyundai"
iex> company = "tesla"
"tesla"
Enter fullscreen mode Exit fullscreen mode

이렇게 두 번 다른 값을 넣는 것처럼 보이는 이러한 것을 Elixir에서는 리바인딩이라고 부릅니다. 하지만 실제로는 Elixir는 새로운 메모리 공간에 새로운 값을 넣게 됩니다. 일반적인 C와 같은 언어들은 같은 메모리 공간에 새로운 값을 덮어쓰게 될 때 말이지요. 결론적으로 한번 입력한 데이터의 내용은 변함이 없고 프로세스간 소통은 값의 복사로 이루어지므로 하나의 메모리를 가지고 변조를 시도하는 일이 Elixir에서는 쉽게 일어날 수 없습니다.

오늘의 3분 Elixir 여기서 마칩니다. 읽어주셔서 감사합니다.

생각해 볼만한 문제: Elixir에서 재바인딩된 데이터의 스코프는 어디까지일까요?
생각해 볼만한 문제: Gleam에서 변수를 재바인딩하면 Erlang코드는 어떻게 번역될까요?

Top comments (0)

🌚 Friends don't let friends browse without dark mode.

Sorry, it's true.