Elixir에서 리스트 컴프리헨션은 어떻게 작성하나요?
A: 리스트 컴프리헨션은 컬렉션(주로 리스트)의 각 요소를 순회하며 조건에 맞는 요소만 추출하거나 변환된 결과를 새로운 리스트로 생성하는 표현식입니다. 간결하고 선언적인 방식으로 리스트를 처리할 수 있습니다.
Q: Elixir에서 기본적인 리스트 컴프리헨션 문법은 어떻게 되나요?
A: 기본 문법은 다음과 같습니다.
```elixir
for element <- collection, do: expression
```
`collection`의 각 `element`에 대해 `expression`을 평가하여 결과 리스트를 생성합니다.
Q: 실제 예제를 보여주실 수 있나요?
A: 예를 들어, 1부터 5까지의 숫자 리스트에서 각 숫자를 두 배로 만든 리스트는 다음과 같습니다.
```elixir
for x <- [1, 2, 3, 4, 5], do: x * 2
결과: [2, 4, 6, 8, 10]
```
Q: 리스트 컴프리헨션에서 조건(필터링)은 어떻게 추가하나요?
A: 조건을 추가하려면 `when` 키워드를 사용하거나 소괄호 없이 쉼표로 조건을 나열합니다. 예:
```elixir
for x <- 1..10, x rem 2 == 0, do: x
결과: [2, 4, 6, 8, 10]
```
여기서 `x rem 2 == 0`은 `x`가 짝수인 경우만 포함합니다.
Q: 여러 컬렉션을 동시에 순회할 수도 있나요?
A: 네, 가능합니다. 여러 제너레이터를 콤마로 구분하여 작성합니다. 예:
```elixir
for x <- [1, 2], y <- [:a, :b], do: {x, y}
결과: [{1, :a}, {1, :b}, {2, :a}, {2, :b}]
```
Q: 리스트 컴프리헨션에서 바인딩된 변수는 어떻게 처리되나요?
A: `for` 내에서 선언된 변수는 컴프리헨션의 스코프에 한정되며, 외부 변수나 패턴 매칭도 가능합니다. 예:
```elixir
for {a, b} <- [{1, 2}, {3, 4}], do: a + b
결과: [3, 7]
```
Q: 리스트 컴프리헨션으로는 어떤 컬렉션도 처리할 수 있나요?
A: 기본적으로 리스트나 이터러블(Enumerable) 자료구조를 처리할 수 있습니다. 예를 들어 `Range`도 가능합니다:
```elixir
for x <- 1..3, do: x * x
결과: [1, 4, 9]
```
Q: 리스트 컴프리헨션의 반환 타입은 무엇인가요?
A: 항상 리스트(List) 타입입니다. 각 이터레이션의 결과를 모은 리스트를 반환합니다.
Q: 리스트 컴프리헨션에서 `into:` 옵션은 무엇인가요?
A: 결과를 리스트 대신 다른 데이터 구조(예: MapSet, Map, String 등)로 받을 때 `into:` 옵션을 사용합니다. 예:
```elixir
for x <- 1..5, rem(x, 2) == 1, into: MapSet.new(), do: x * x
결과: MapSet<[1, 9, 25]>
```
Q: 리스트 컴프리헨션 사용 시 주의할 점이 있나요?
A: 복잡한 컴프리헨션은 가독성을 해칠 수 있으므로 적절히 필터링과 변환을 분리하는 것이 좋습니다. 매우 큰 데이터 집합 처리 시 메모리 사용도 주의하세요.
---
요약하면, Elixir 리스트 컴프리헨션은 `for` 키워드와 화살표 `<-`를 사용하여 리스트 요소를 순회, 조건 필터링, 변환을 수행하며 결과를 새로운 리스트로 반환하는 강력하고 간결한 기능입니다.
작성자:
이윤지 [비회원]
| 작성일자: 1년 전
2025-01-02 06:21:29
조회수: 138 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 138 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.