2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Elixir에서 모듈을 만드는 방법은?

_____
Q1: Elixir에서 모듈이란 무엇인가요?
A1: 모듈은 관련 함수들을 그룹화한 단위로, 함수의 네임스페이스 역할을 하며 코드를 구조화하고 재사용성을 높이는 기본 단위입니다.

Q2: Elixir에서 모듈을 어떻게 정의하나요?
A2: `defmodule` 키워드를 사용하여 모듈을 정의합니다. 예를 들어:
```elixir
defmodule MyModule do
함수 정의
end
```

Q3: 모듈 안에 함수를 어떻게 작성하나요?
A3: `def` 키워드를 사용해 함수를 정의합니다. 예:
```elixir
defmodule MyModule do
def say_hello do
IO.puts("Hello, Elixir!")
end
end
```

Q4: 모듈과 함수를 어떻게 호출하나요?
A4: 모듈명과 함수명을 `모듈명.함수명` 형태로 호출합니다. 예:
```elixir
MyModule.say_hello()
```

Q5: 모듈 안에 여러 함수를 만들 수 있나요?
A5: 네, 모듈 하나 안에 여러 함수를 자유롭게 정의할 수 있습니다.

Q6: private 함수는 어떻게 만드나요?
A6: `defp` 키워드로 private 함수를 만듭니다. 해당 함수는 모듈 외부에서 호출할 수 없습니다.
```elixir
defmodule MyModule do
def public_func do
private_func()
end
defp private_func do
IO.puts("This is private")
end
end
```

Q7: 모듈 네임스페이스를 어떻게 구성하나요?
A7: 점(`.`)을 사용하여 계층형 네임스페이스를 만듭니다. 예:
```elixir
defmodule MyApp.Utilities.Math do
def add(a, b), do: a + b
end
```

Q8: 모듈 문서화를 어떻게 하나요?
A8: `@moduledoc` 및 `@doc` 어트리뷰트를 사용해 문서화를 합니다.
```elixir
defmodule MyModule do
@moduledoc "이 모듈은 인사 관련 함수를 제공합니다."

@doc "이 함수는 Hello를 출력합니다."
def say_hello do
IO.puts("Hello")
end
end
```

Q9: 모듈 내부에서 상수를 정의할 수 있나요?
A9: 직접적인 상수 키워드는 없지만, 모듈 내부에 값을 변수처럼 갖는 `@attribue`를 정의해 상수처럼 활용할 수 있습니다.
```elixir
defmodule MyModule do
@pi 3.14159

def area(radius), do: @pi * radius * radius
end
```

Q10: 모듈 정의 시 주의할 점이 있나요?
A10: 모듈 이름은 대문자로 시작하는 아토믹 또는 점(`.`)으로 구분된 여러 이름으로 구성해야 하며, 함수 정의는 반드시 `do ... end` 또는 한 줄 함수로 작성해야 합니다.
Elixir에서 모듈을 만드는 것은 매우 간단하고 직관적입니다.

모듈은 관련된 함수와 데이터 구조를 그룹화하여 코드의 재사용성과 가독성을 높이는 데 도움을 줍니다.

Elixir에서 모듈을 만드는 방법에 대해 자세히 설명하겠습니다.

1. 모듈 정의 Elixir에서 모듈은 `defmodule` 키워드를 사용하여 정의합니다.

모듈 이름은 일반적으로 대문자로 시작하며, 여러 단어로 구성된 경우 언더스코어(_) 대신 점(.)을 사용하여 네임스페이스를 구분합니다.

```elixir defmodule MyModule do 모듈의 내용 end ```

2. 함수 정의 모듈 내에서 함수를 정의할 때는 `def` 키워드를 사용합니다.

함수는 이름과 인자를 정의하고, `do` 블록 내에서 실행할 코드를 작성합니다.

```elixir defmodule MyModule do def greet(name) do "Hello, {name}!" end end ``` 위의 예제에서 `greet/1` 함수는 하나의 인자를 받아서 인사 메시지를 반환합니다.

Elixir에서는 함수의 아리티(arity)를 함수 이름 뒤에 슬래시(/)와 함께 표시할 수 있습니다.

예를 들어, `greet/1`은 `greet` 함수가 1개의 인자를 받는다는 의미입니다.



3. 모듈 사용하기 모듈을 정의한 후에는 `MyModule.greet("Alice")`와 같이 모듈 이름과 함수 이름을 사용하여 함수를 호출할 수 있습니다.

```elixir IO.puts MyModule.greet("Alice") 출력: Hello, Alice! ```

4. 기본값 인자 Elixir에서는 기본값 인자를 사용할 수 없습니다.

대신, 여러 개의 함수를 정의하여 다양한 인자 수를 처리할 수 있습니다.

이를 함수 오버로딩이라고 합니다.

```elixir defmodule MyModule do def greet do greet("Guest") end def greet(name) do "Hello, {name}!" end end ``` 이제 `MyModule.greet()`를 호출하면 기본값으로 "Guest"를 사용하여 인사 메시지를 반환합니다.



5. 모듈 속성 모듈 내에서 사용할 수 있는 속성을 정의할 수 있습니다.

속성은 `@` 기호를 사용하여 정의합니다.

```elixir defmodule MyModule do @moduledoc """ 이 모듈은 인사 메시지를 생성합니다.

""" @version "1.0.0" def greet(name) do "Hello, {name}! Version: {@version}" end end ``` 위의 예제에서 `@moduledoc`는 모듈에 대한 문서화 주석을 추가하고, `@version`은 모듈의 버전을 정의합니다.



6. 내장 모듈 사용 Elixir는 다양한 내장 모듈을 제공합니다.

예를 들어, `Enum`, `List`, `Map` 등의 모듈을 사용하여 데이터 구조를 쉽게 조작할 수 있습니다.

```elixir defmodule MyModule do def sum_list(list) do Enum.sum(list) end end ```

7. 모듈 문서화 Elixir에서는 모듈과 함수에 대한 문서화를 쉽게 작성할 수 있습니다.

`@moduledoc`와 `@doc`을 사용하여 문서화를 추가할 수 있습니다.

```elixir defmodule MyModule do @moduledoc """ 이 모듈은 인사 메시지를 생성합니다.

""" @doc """ 주어진 이름으로 인사 메시지를 반환합니다.

""" def greet(name) do "Hello, {name}!" end end ```

8. 모듈 테스트 Elixir에서는 `ExUnit`을 사용하여 모듈을 테스트할 수 있습니다.

테스트는 `test` 블록 내에서 작성되며, `assert`를 사용하여 기대하는 결과와 실제 결과를 비교합니다.

```elixir defmodule MyModuleTest do use ExUnit.Case test "greet/1 returns a greeting message" do assert MyModule.greet("Alice") == "Hello, Alice!" end end ``` 결론 Elixir에서 모듈을 만드는 것은 코드의 구조를 잘 정리하고 재사용성을 높이는 데 매우 유용합니다.

모듈을 정의하고, 함수를 작성하며, 문서화하고, 테스트하는 방법을 이해하면 Elixir로 더 나은 프로그램을 작성할 수 있습니다.

Elixir의 모듈 시스템을 활용하여 코드의 가독성과 유지보수성을 높이세요.

작성자: 최윤아 [비회원] | 작성일자: 1년 전 2025-01-02 06:21:22
조회수: 117 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.