Elixir의 맵(Map) 데이터 구조는 어떻게 사용하나요?
_____A1: 맵(Map)은 키-값 쌍으로 데이터를 저장하는 컬렉션 자료구조입니다. 키는 원시 타입이나 튜플 등 어떤 값도 될 수 있으며, 값에는 어떤 데이터도 올 수 있습니다. 가변이 아닌 불변 구조입니다.
Q2: 맵은 어떻게 생성하나요?
A2: 맵은 `%{}` 구문을 사용해 생성합니다. 예:
```elixir
map = %{"name" => "Alice", "age" => 30}
```
키로 원자(atom)을 사용할 때는 아래와 같이 표현할 수도 있습니다.
```elixir
map = %{name: "Alice", age: 30}
```
Q3: 맵에서 값은 어떻게 조회하나요?
A3: 모듈의 `Map` 함수를 이용하거나, 키를 대괄호로 조회할 수 있습니다.
```elixir
map[:name] "Alice"
Map.get(map, :age) 30
```
Q4: 맵에 값은 어떻게 추가하거나 수정하나요?
A4: 맵은 불변이므로, 새 맵을 반환합니다. 수정하려면 키를 지정해 새 맵을 만듭니다.
```elixir
map = %{map | age: 31} 기존 키 수정
map = Map.put(map, :city, "Seoul") 새 키-값 추가
```
Q5: 존재하지 않는 키를 접근하면 어떻게 되나요?
A5: `map[:not_exist]` 또는 `Map.get(map, :not_exist)`는 `nil`을 반환합니다.
`map.key` 형태 접근 시에는 `KeyError`가 발생할 수 있습니다.
Q6: 키 목록이나 값 목록을 어떻게 얻나요?
A6:
```elixir
Map.keys(map) 키 리스트 반환
Map.values(map) 값 리스트 반환
```
Q7: 맵 내에 여러 값을 한꺼번에 병합하려면?
A7: `Map.merge/2`를 사용합니다.
```elixir
Map.merge(%{a: 1, b: 2}, %{b: 3, c: 4}) %{a: 1, b: 3, c: 4}
```
Q8: 패턴 매칭에서 맵을 어떻게 사용하나요?
A8: 맵의 특정 키와 값을 패턴 매칭할 수 있습니다.
```elixir
%{name: name} = %{name: "Alice", age: 30}
name에는 "Alice"가 바인딩됨
```
Q9: 맵에서 키의 존재 여부는 어떻게 확인하나요?
A9:
```elixir
Map.has_key?(map, :age) true or false 반환
```
Q10: 키가 원자(atom)이 아닌 경우에도 맵을 사용할 수 있나요?
A10: 네, 문자열, 정수, 튜플 등 거의 모든 값을 키로 사용할 수 있습니다.
```elixir
%{1 => "one", "two" => 2}
```
Q11: 맵에서 키를 삭제하고 싶으면 어떻게 하나요?
A11: `Map.delete/2`를 사용해 새로운 맵을 반환합니다.
```elixir
map2 = Map.delete(map, :age)
```
Q12: 맵과 키워드 리스트(Keyword list)의 차이는 무엇인가요?
A12: 맵은 키가 고유하며 임의 순서의 키-값 쌍을 저장합니다. 키워드 리스트는 순서가 있고 같은 키가 여러 번 나올 수 있는 리스트 형태입니다. 속도와 목적에 따라 선택합니다.
---
이상으로 Elixir 맵(Map)의 기본 사용법에 대한 FAQ입니다.
맵은 동적으로 크기가 조정되며, 다양한 데이터 타입을 키와 값으로 사용할 수 있습니다.
Elixir의 맵은 주로 데이터를 구조화하고, 쉽게 접근하고 수정할 수 있도록 돕습니다.
아래에서는 Elixir의 맵을 사용하는 방법에 대해 자세히 설명하겠습니다.
1. 맵 생성 맵은 `%{}` 구문을 사용하여 생성할 수 있습니다.
예를 들어: ```elixir 빈 맵 생성 empty_map = %{} 키-값 쌍이 있는 맵 생성 person = %{ name: "Alice", age: 30, city: "New York" } ```
2. 맵에 값 추가 및 수정 맵에 값을 추가하거나 수정할 때는 `Map.put/3` 함수를 사용하거나, 키를 통해 직접 접근하여 값을 할당할 수 있습니다.
```elixir Map.put/3 사용 updated_person = Map.put(person, :age, 31) 직접 접근하여 수정 person_with_new_city = %{person | city: "Los Angeles"} ```
3. 맵에서 값 가져오기 맵에서 값을 가져오는 방법은 두 가지가 있습니다.
`Map.get/2` 함수를 사용하거나, 키를 통해 직접 접근할 수 있습니다.
```elixir Map.get/2 사용 name = Map.get(person, :name) 직접 접근 age = person.age ```
4. 맵의 키와 값 조회 맵의 모든 키와 값을 조회할 수 있는 여러 함수가 있습니다.
```elixir 모든 키 조회 keys = Map.keys(person) 모든 값 조회 values = Map.values(person) 모든 키-값 쌍 조회 key_value_pairs = Map.to_list(person) ```
5. 맵의 키 존재 여부 확인 특정 키가 맵에 존재하는지 확인하려면 `Map.has_key?/2` 함수를 사용할 수 있습니다.
```elixir has_name_key = Map.has_key?(person, :name) true has_country_key = Map.has_key?(person, :country) false ```
6. 맵의 삭제 맵에서 특정 키-값 쌍을 삭제하려면 `Map.delete/2` 함수를 사용합니다.
```elixir person_without_age = Map.delete(person, :age) ```
7. 맵의 병합 두 개의 맵을 병합하려면 `Map.merge/2` 함수를 사용할 수 있습니다.
같은 키가 있을 경우, 두 번째 맵의 값이 우선합니다.
```elixir additional_info = %{country: "USA", age: 31} merged_person = Map.merge(person, additional_info) ```
8. 패턴 매칭 Elixir에서는 맵에 대한 패턴 매칭을 통해 특정 키의 값을 쉽게 추출할 수 있습니다.
```elixir %{name: name, age: age} = person ```
9. 맵의 불변성 Elixir의 모든 데이터 구조는 불변(immutable)입니다.
즉, 맵을 수정하면 새로운 맵이 생성되고, 원래의 맵은 변경되지 않습니다.
이는 함수형 프로그래밍의 중요한 특성 중 하나로, 상태 관리와 데이터의 일관성을 유지하는 데 도움을 줍니다.
10. 요약 Elixir의 맵은 키-값 쌍을 저장하고 조작하는 데 매우 유용한 데이터 구조입니다.
다양한 함수와 패턴 매칭을 통해 쉽게 데이터를 관리할 수 있으며, 불변성을 통해 안정적인 상태 관리를 제공합니다.
이러한 특성 덕분에 Elixir의 맵은 데이터 중심의 애플리케이션에서 널리 사용됩니다.
작성자:
최윤수 [비회원]
| 작성일자: 1년 전
2025-01-02 06:21:28
조회수: 153 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 153 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.