Elixir Module Directives

Tags
Published
Author
Elixir 에는 모듈이라는 개념이 있다. module 은 namespace 의 역할을 한다.
모듈에 주로 사용되는 Elixir 의 directive 들이 몇가지 있다.
  • alias
  • import
  • require
위 세가지가 각각 어떤 역할을 하는지 알아보자.

alias


alias 는 외부 모듈을 짧은 atom 으로 사용할 수 있도록 해준다. Elixir 의 Module 은 전부 atom 이다. 아래와 같이 긴 Module 명을 짧게 사용할 수 있도록 해준다.
alias My.Very.Long.Module.Name, as: ShortName # as 를 생략하면 마지막 .이후의 값으로 자동설정된다. 즉 위 코드와 아래코드는 동일하다. alias My.Very.Long.Module.Name # Name으로 참조 가능 # 여러 모듈을 한번에 alias 처리할 수 있다. alias My.Very.Long.Module.{Name1, Name2, Name3}
alias 는 주로 긴 네임스페이스를 가진 모듈을 더 간단하게 참조하고 싶을 때 사용한다.

require


elixir 에서 매크로를 사용하려면 컴파일 시점에 이미 사용할 수 있는 상태가 되어야 한다. require 는 다른 모듈의 매크로를 컴파일 시점에 사용할 수 있는 상태로 설정해주는 역할을 한다.
# Logger 매크로를 사용하기 위한 준비 require Logger # 이제 Logger 매크로를 사용할 수 있습니다 Logger.debug "디버그 메시지"
Elixir 의 Logger 모듈에서 debug 함수는 매크로이다. 이 함수를 사용하려면 module 에서 미리 require 로 선언해 두어야 사용이 가능하다.

import


import는 다른 모듈의 함수를 현재 범위(scope)로 가져와서 모듈 이름 없이 직접 사용하도록 할 수 있다.
import List
위와같이 List 를 import 하는 경우 아래와 같이 동작하는 것을 확인할 수 있다.
notion image
만약 특정 함수나 매크로만 불러오고 싶은 경우 아래와 같이 적용하면 된다.
# 특정 함수만 import import String, only: [upcase: 1, downcase: 1] # 매크로만 import import String, only: :macros

정리

각 directive 는 아래와 같은 역할을 한다.
  • alias: 긴 모듈 이름을 짧게 줄여서 사용
  • require: 다른 모듈의 매크로를 사용할 수 있도록 처리
  • import: 다른 모듈의 함수와 매크로를 현재 모듈에서 직접 사용