Elixir의 패턴 매칭을 활용한 예시는?

_____
Q: Elixir에서 패턴 매칭이란 무엇인가요?
A: 패턴 매칭은 Elixir에서 값을 구조에 맞춰 분해하거나 확인할 때 사용하는 강력한 기능입니다. 변수에 값을 할당하거나 복잡한 데이터 구조를 쉽게 분해할 수 있습니다.

Q: Elixir의 기본적인 패턴 매칭 예시는 무엇인가요?
A: 변수에 값을 할당할 때 패턴 매칭이 일어납니다.
예:
```elixir
x = 1 여기서 1이 변수 x에 할당된다.
{a, b} = {10, 20} 튜플을 분해해 a=10, b=20으로 맵핑
```

Q: 함수 매개변수에서 패턴 매칭을 어떻게 활용하나요?
A: 함수 정의 시 매개변수에 다양한 패턴을 지정해 함수의 동작을 분기할 수 있습니다.
예:
```elixir
def greet({:ok, name}), do: "Hello, {name}!"
def greet({:error, _}), do: "Error occurred."
```

Q: 리스트 패턴 매칭 예시는 어떤 것이 있나요?
A: 리스트의 첫 요소와 나머지 리스트를 분리할 때 사용됩니다.
예:
```elixir
[head | tail] = [1, 2, 3]
head = 1, tail = [2, 3]
```

Q: 조건문에서 패턴 매칭을 어떻게 사용하나요?
A: `case` 문에서 다양한 패턴을 분기하여 처리합니다.
예:
```elixir
case {:ok, "Data"} do
{:ok, value} -> "Success: {value}"
{:error, reason} -> "Failed: {reason}"
end
```

Q: 패턴 매칭을 이용해 맵(Map)을 분해하는 방법은 무엇인가요?
A: 맵에서 특정 키가 있는지 매칭하며 값을 추출할 수 있습니다.
예:
```elixir
%{name: name} = %{name: "Elixir", version: "1.12"}
name = "Elixir"
```

Q: 패턴 매칭 실패 시 동작은 어떻게 되나요?
A: 매칭이 실패하면 `MatchError`가 발생하며, 함수에서는 다른 패턴으로 분기하지 않으면 에러가 납니다.

Q: 구조체에서 패턴 매칭을 사용하는 예시는 어떻게 되나요?
A: 구조체 필드를 이용해 패턴 매칭 가능합니다.
예:
```elixir
defmodule User do
defstruct name: "", age: 0
end

%User{name: name} = %User{name: "Alice", age: 30}
name = "Alice"
```

Q: 패턴 매칭에서 와일드카드(_)는 어떻게 사용하나요?
A: 불필요한 값을 무시할 때 `_`를 사용합니다.
예:
```elixir
{_, second} = {1, 2}
second = 2, 첫번째 값은 무시
```

Q: 패턴 매칭은 반복문이나 Enum 모듈 함수와 어떻게 결합되나요?
A: Enum 함수 내에서 익명함수 매개변수에 패턴을 활용해 데이터를 쉽게 처리할 수 있습니다.
예:
```elixir
list = [{:ok, "a"}, {:error, "b"}]
Enum.map(list, fn {:ok, val} -> val; {:error, _} -> nil end)
결과: ["a", nil]
```
2000으로 변경해둠. 조회 가능 active view % 노출 줄이면 올라가는지 테스트 Elixir는 함수형 프로그래밍 언어로, 패턴 매칭(Pattern Matching)을 핵심 개념으로 사용합니다. 패턴 매칭은 변수에 값을 할당할 때, 그 값의 구조를 기반으로 변수를 바인딩하는 강력한 기능입니다. 이를 통해 코드의 가독성을 높이고, 복잡한 조건문을 간결하게 표현할 수 있습니다. 아래에서는 Elixir의 패턴 매칭을 활용한 다양한 예시를 소개하겠습니다. 1. 기본적인 패턴 매칭 Elixir에서 가장 기본적인 패턴 매칭은 변수에 값을 할당하는 것입니다. 예를 들어: ```elixir x = 1 y = 2 sum = x + y ``` 위 코드는 `x`와 `y`에 각각 1과 2를 할당하고, `sum`에 두 값을 더한 결과를 저장합니다. 하지만 패턴 매칭을 사용하면 다음과 같이 쓸 수 있습니다: ```elixir {x, y} = {1, 2} sum = x + y ``` 여기서 `{x, y}`는 튜플 패턴으로, `{1, 2}` 튜플의 값을 각각 `x`와 `y`에 바인딩합니다. 2. 함수의 인자 패턴 매칭 Elixir에서는 함수의 인자에 패턴 매칭을 사용할 수 있습니다. 예를 들어, 다음과 같은 함수를 정의할 수 있습니다: ```elixir defmodule Math do def add({a, b}) do a + b end end result = Math.add({3, 4}) result는 7이 됩니다. ``` 위의 `add` 함수는 튜플을 인자로 받아서, 튜플의 각 요소를 `a`와 `b`에 바인딩한 후 두 값을 더합니다. 3. 리스트와 패턴 매칭 리스트에서도 패턴 매칭을 사용할 수 있습니다. 예를 들어, 리스트의 첫 번째 요소와 나머지 요소를 분리할 수 있습니다: ```elixir list = [1, 2, 3, 4] [head | tail] = list head는 1, tail은 [2, 3, 4]가 됩니다. ``` 위의 예제에서 `head`는 리스트의 첫 번째 요소에 바인딩되고, `tail`은 나머지 요소들로 구성된 리스트에 바인딩됩니다. 4. 조건부 패턴 매칭 Elixir에서는 패턴 매칭과 함께 조건부를 사용할 수 있습니다. 예를 들어, 다음과 같은 함수를 정의할 수 있습니다: ```elixir defmodule Example do def describe_age(age) when age < 18 do "You are a minor." end def describe_age(age) when age >= 18 do "You are an adult." end end Example.describe_age(15) "You are a minor." Example.describe_age(20) "You are an adult." ``` 위의 예제에서 `describe_age` 함수는 나이에 따라 다른 메시지를 반환합니다. `when` 절을 사용하여 조건을 추가할 수 있습니다. 5. 중첩된 패턴 매칭 Elixir에서는 중첩된 구조체에서도 패턴 매칭을 사용할 수 있습니다. 예를 들어, 다음과 같은 구조체가 있다고 가정해 보겠습니다: ```elixir defmodule User do defstruct name: "", age: 0 end user = %User{name: "Alice", age: 30} %User{name: user_name, age: user_age} = user user_name은 "Alice", user_age는 30이 됩니다. ``` 위의 예제에서 `%User{name: user_name, age: user_age}` 패턴을 사용하여 `user` 구조체의 필드에 접근하고, 각각의 필드 값을 변수에 바인딩합니다. 6. 패턴 매칭을 활용한 재귀 재귀 함수에서도 패턴 매칭을 활용할 수 있습니다. 예를 들어, 리스트의 합을 구하는 함수를 작성할 수 있습니다: ```elixir defmodule ListUtils do def sum([]), do: 0 def sum([head | tail]), do: head + sum(tail) end ListUtils.sum([1, 2, 3, 4]) 10 ``` 위의 예제에서 `sum` 함수는 빈 리스트일 경우 0을 반환하고, 리스트의 첫 번째 요소와 나머지 요소의 합을 재귀적으로 계산합니다. 결론 Elixir의 패턴 매칭은 코드의 가독성을 높이고, 복잡한 로직을 간결하게 표현할 수 있는 강력한 도구입니다. 다양한 데이터 구조에 대해 패턴 매칭을 활용함으로써, 더 직관적이고 유지보수가 용이한 코드를 작성할 수 있습니다. 이러한 특성 덕분에 Elixir는 함수형 프로그래밍의 장점을 잘 살리고 있습니다.
작성자: 김도윤 [비회원] | 작성일자: 1년 전 2025-01-02 06:21:46
조회수: 145 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.