Elixirμ μν°(Atom)μ λ§λ¨
Elixirλ Erlang VM μμ ꡬμΆλ ν¨μν νλ‘κ·Έλλ° μΈμ΄λ‘, λμ λμμ±(concurrency), λ΄κ²°ν¨μ±(fault-tolerance), λΆμ°(distribution)μ μν΄ μ€κ³λμμ΅λλ€. μ΄ λ©μ§ μΈμ΄μ κΈ°λ³Έ κ΅¬μ± μμ μ€ νλλ λ°λ‘ 'μν°(atom)'μ λλ€. μν°μ Elixirμ λΆλ³νλ μμμ΄λ©°, μ΄λ¦ κ·Έλλ‘ κ³ μ ν κ°μΌλ‘ μ‘΄μ¬ν©λλ€. μ€λμ μ΄λ¬ν μν°μ λν΄ κΉμ΄ μκ² μμλ³΄κ² μ΅λλ€.
μν°(Atom)μ΄λ?
μν°μ μ΄λ¦μ΄ κ°μ λνλ΄λ κ°μ²΄μ
λλ€. μ¦, μν°μ μκΈ° μμ μ΄ μ΅μ’
κ°μ
λλ€. μλ₯Ό λ€μ΄, :ok
μν°μ "ok"λΌλ μ΄λ¦μ μν°μ
λλ€. μ΄ νΉμ± λλ¬Έμ, μν°μ μ£Όλ‘ μν, μλ³μ λλ νΉμ κ°μ λνλ΄λ λ° μ¬μ©λ©λλ€.
μν°μ νΉμ§
- μ μΌμ±: μν°μ μ μμ μΌλ‘ μ μΌν©λλ€.
:ok
λ μμ€ν μ΄λμμλ μ νν κ°μ:ok
μ λλ€. - λΆλ³μ±: μν°μ μμ± νμ λ³κ²½ν μ μμ΅λλ€. ν λ²
:error
λ‘ μ μνλ©΄, κ·Έκ²μ μμν:error
λ‘ λ¨μ΅λλ€. - λ©λͺ¨λ¦¬ ν¨μ¨μ±: μν°μ ν λ² μ μλλ©΄ μμ€ν μ μν° ν μ΄λΈμ μ μ₯λκ³ , κ°μ μν°μ λν λͺ¨λ μ°Έμ‘°λ λ©λͺ¨λ¦¬ λ΄ κ°μ μμΉλ₯Ό κ°λ¦¬ν€κ² λ©λλ€.
μν°μ μ¬μ© μ¬λ‘
defmodule Example do
def show_status(status) do
case status do
:ok -> "λͺ¨λ κ²μ΄ μ μμ
λλ€!"
:error -> "μλ¬κ° λ°μνμ΅λλ€!"
end
end
end
IO.puts Example.show_status(:ok)
# "λͺ¨λ κ²μ΄ μ μμ
λλ€!" μΆλ ₯λ©λλ€.
μ μμ μμ :ok
μ :error
λ κ°λ₯ν λ μνλ₯Ό λνλ΄λ μν°μ
λλ€. show_status
ν¨μλ μν°μ 맀κ°λ³μλ‘ λ°μ, μνμ λ°λΌ λ€λ₯Έ λ©μμ§λ₯Ό λ°νν©λλ€.
μν°κ³Ό JavaScript μμμ λΉκ΅
JavaScriptμμ μμλ const
ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈλ©λλ€. μμλ μ¬ν λΉλ μ μλ λ³μλ₯Ό μλ―Έν©λλ€. μλ₯Ό λ€μ΄:
const greeting = "μλ
νμΈμ";
console.log(greeting); // "μλ
νμΈμ" μΆλ ₯λ©λλ€.
μ΄ μμ greeting
μ "μλ
νμΈμ"λΌλ λ¬Έμμ΄μ μ΄λ¦μ λΆμ¬ν κ²μ
λλ€. μ΄λ₯Ό Elixirμ μν°κ³Ό λΉκ΅ν΄λ³΄λ©΄, λ κ°λ
λͺ¨λ λΆλ³μ±μ κ°μ§λ€λ 곡ν΅μ μ΄ μμ΅λλ€. κ·Έλ¬λ JavaScriptμ const
λ λ³μμ ν λΉλ κ°μ λ³κ²½ν μ μλ λ°λ©΄, μν°μ κ·Έ μμ²΄λ‘ κ°μ΄λ©°, μ΄ κ°μ μ μΌλ¬΄μ΄νκ³ μ μμ μΌλ‘ μΈμλ©λλ€.
JavaScriptμλ Elixirμ μν°κ³Ό μ νν λμΌν κ°λ μ μμ§λ§, λΉμ·ν λͺ©μ μΌλ‘ κ°μ²΄μ νλ‘νΌν°λ ν€λ₯Ό μ¬μ©νλ κ²μ μλ‘ λ€ μ μμ΅λλ€:
const STATUS = {
OK: 'ok',
ERROR: 'error'
};
console.log(STATUS.OK); // "ok" μΆλ ₯λ©λλ€.
μ¬κΈ°μ STATUS
κ°μ²΄μ νλ‘νΌν°λ λ³νμ§ μμΌλ©°, μ μμ μΌλ‘ κ³ μ ν κ°μ μ 곡νλ λ°©μμΌλ‘ μν°κ³Ό μ μ¬νκ² μ¬μ©λ μ μμ΅λλ€.
μν°μ μ£Όμμ
μν°μ λΆλ³νκ³ ν λ² μμ±λλ©΄ μμ€ν ν μ΄λΈμμ μ κ±°λμ§ μκΈ° λλ¬Έμ, μν°μ 무λΆλ³νκ² μμ±νλ κ²μ μ’μ§ μμ΅λλ€. μμ€ν λ΄μ λ무 λ§μ μν°μ΄ μ‘΄μ¬νλ©΄ λ©λͺ¨λ¦¬λ₯Ό κ³Όλνκ² μ¬μ©ν μ μκΈ° λλ¬Έμ λλ€. μ€μ λ‘ Elixirλ μν°μ μμ νκ³λ₯Ό λμ΄, μ΄λ¬ν λ¬Έμ λ₯Ό λ°©μ§ν©λλ€.
μν° κ²°λ‘
μν°μ Elixir νλ‘κ·Έλλ°μμ μ€μν μμμ λλ€. μνλ₯Ό λνλ΄κ±°λ, 쑰건μ λͺ μν λ κ΅μ₯ν μ μ©νκ² μ¬μ©λ©λλ€. κ·Έλ¬λ κ·Έ νΉμ±μ μ΄ν΄νκ³ μ μ νκ² μ¬μ©νλ κ²μ΄ μ€μν©λλ€.
Elixirμμμ μν°μ ν΅ν΄ μ°λ¦¬λ νλ‘κ·Έλ¨ λ΄μμμ νμ€ν μλ―Έλ₯Ό κ°λ μλ³μλ₯Ό μ¬μ©ν μ μκ² λμμΌλ©°, μ΄λ νλ‘κ·Έλ¨μ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμ΄λ λ° ν¬κ² κΈ°μ¬ν©λλ€.
νν(Tuple)μ΄λ?
Elixirμμ ννμ κ³ μ λ κΈΈμ΄λ₯Ό κ°μ§ μ°μλ κ°μ λνλ΄λ λ°μ΄ν° ꡬ쑰μ λλ€. κ°λ¨ν λ§ν΄, ννμ μ¬λ¬ κ°μ νλμ λ¬ΆμμΌλ‘ κ·Έλ£Ήννλ λ° μ¬μ©λ©λλ€. ννμ {}λ‘ μ μΈλλ©°, κ·Έ μμ λ€μν λ°μ΄ν° νμ μ μμλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
ννμ νΉμ§
κ³ μ λ ν¬κΈ°: ννμ μμ±λ λ μμμ μκ° μ ν΄μ§λ©°, μ΄νμλ ν¬κΈ°λ₯Ό λ³κ²½ν μ μμ΅λλ€.
λΉ λ₯Έ μ κ·Ό: ννμ μμμ μ κ·Όνλ μκ°μ μΌμ νλ―λ‘ λ°μ΄ν° μ κ·Όμ΄ λ§€μ° λΉ λ¦
λλ€.
ν¨ν΄ 맀μΉ: Elixirμ κ°λ ₯ν κΈ°λ₯ μ€ νλλ‘, ννμ μμλ₯Ό μ½κ² μΆμΆνκ³ ν λΉν μ μμ΅λλ€.
ννμ μ¬μ© μμ
# Elixirμμ νν μμ±
person = {:name, "Alex", :age, 32}
# ννμ μμμ μ κ·Ό
{name_atom, name, age_atom, age} = person
IO.puts("#{name_atom}μ #{name}, #{age_atom}λ #{age}μ΄μ
λλ€.")
# μΆλ ₯: :nameμ Alex, :ageλ 32μ΄μ
λλ€.
μ μμμμλ μ΄λ¦κ³Ό λμ΄λ₯Ό νλμ ννλ‘ λ¬Άμ΄ κ΄λ¦¬νκ³ μμ΅λλ€. νν λ΄ μμμ μ κ·Όνλ €λ©΄ κ° μμΉμ λ§λ λ³μλ₯Ό μ¬μ©νμ¬ ν¨ν΄ 맀μΉμ μνν©λλ€.
JavaScriptμμμ λΉκ΅ λμ: λ°°μ΄(Array)
JavaScriptμλ ννκ³Ό λμΌν λ°μ΄ν° κ΅¬μ‘°κ° μμ§λ§, κ°μ₯ μ μ¬ν ννλ λ°°μ΄μ λλ€. λ°°μ΄μ λ€μν λ°μ΄ν° νμ μ ν¬ν¨ν μ μμΌλ©°, λμ μΌλ‘ ν¬κΈ°κ° λ³ν μ μμ΅λλ€.
λ°°μ΄μ νΉμ§
λμ ν¬κΈ°: λ°°μ΄μ νμμ λ°λΌ μμλ₯Ό μΆκ°νκ±°λ μ κ±°ν μ μμ΅λλ€.
λ€μν λ©μλ: λ°°μ΄μ λ€λ£¨κΈ° μν λ€μν λ΄μ₯ λ©μλλ₯Ό μ 곡ν©λλ€.
λ°°μ΄μ μ¬μ© μμ
let personArray = ["name", "Alex", "age", 32]; // JavaScriptμμ λ°°μ΄ μμ±
let [nameLabel, nameValue, ageLabel, ageValue] = personArray; // λ°°μ΄ κ΅¬μ‘° λΆν΄λ₯Ό ν΅ν μμ μ κ·Ό
console.log(`${nameLabel} is ${nameValue}, ${ageLabel} is ${ageValue}`);
// μΆλ ₯: name is Alex, age is 32
JavaScriptμ λ°°μ΄μ μ¬μ©νμ¬ Elixirμ ννκ³Ό μ μ¬νκ² λ°μ΄ν°λ₯Ό κ·Έλ£Ήνν μ μμ΅λλ€. ꡬ쑰 λΆν΄ ν λΉμ ν΅ν΄ λ°°μ΄ λ΄ μμλ₯Ό μ½κ² μΆμΆν μ μμ§λ§, Elixirμ ν¨ν΄ 맀μΉλ§νΌ ννλ ₯μ΄ λ°μ΄λμ§λ μμ΅λλ€.
νν κ²°λ‘
Elixirμ ννμ κ°λ¨νκ³ ν¨μ¨μ μΈ λ°μ΄ν° ꡬ쑰λ‘μ, λΆλ³μ±μ μ μ§νλ©° μ¬λ¬ κ°μ νλ²μ λ€λ£¨κΈ°μ μ ν©ν©λλ€. JavaScriptμ λ°°μ΄κ³Ό λΉκ΅ν΄λ³΄λ©΄, ννμ λ°°μ΄λ³΄λ€ λ μ격ν ꡬ쑰λ₯Ό κ°μ§κ³ μμΌλ©°, ν¨ν΄ 맀μΉκ³Ό κ°μ κΈ°λ₯μ ν΅ν΄ ν¨μ¬ κ°λ ₯ν λ°μ΄ν° μ κ·Όκ³Ό μ‘°μμ΄ κ°λ₯ν¨μ μ μ μμ΅λλ€.
Elixirλ₯Ό μ¬μ©νλ κ°λ°μλ€μκ² ννμ κ°λ ₯ν λꡬμ λλ€. νμ§λ§ μ΄λ¬ν νΉμ±μ μ μ΄ν΄νκ³ μ¬μ©ν΄μΌλ§ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμΌ μ μμ΅λλ€.
'π» κ°λ°κ³΅λΆ > Elixir' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Eric's Elixir] Elixirμμμ Quoteμ Unquote μ λν΄μ μμ보μ! (0) | 2023.12.16 |
---|---|
[Eric's Elixir] ν μ°μ°μλ? π (0) | 2023.09.24 |