IT

[Erlang 기초] Erlang 시작하기

BoBooBoo 2018. 6. 7. 06:58
반응형

Erlang Shell

운영 체제에서는 사용자가 입력한 명령을 하나씩 해석해서 실행시키는 커맨드 인터프리터(command interpreter)를 갖고 있는데, 유닉스(UNIX) 쉘(shell)이나 윈도우 명령 프롬프트(command prompt)가 그 예이다.

얼랭에도 이런 커맨드 인터프리터가 존재하는데, 이를 얼랭 쉘(Erlang shell)이라 부른다. 사용하는 운영 체제의 커맨드 창에서 erl이라고 치면 아래와 같이 생긴 얼랭 쉘이 켜진다.


오늘은 윈도우 환경에서 진행했어요. 맥 유저들은 이전 포스팅을 참고해서 얼랭 쉘을 켜신 뒤 진행하시면 됩니다.

2018/05/30 - [IT/Erlang] - macOS에 Erlang 개발 환경 셋팅하기


얼랭 쉘에 간단한 연산을 입력해보자. 아래와 같이 1+2. 를 입력하면 3이라는 값을 리턴한다. 얼랭 쉘에서는 온점(.)을 찍으면 사용자의 입력이 끝났다고 인지하고 이를 해석하여 결과값을 리턴한다. 

쉘에서 빠져나오려면 윈도우의 경우 ctrl+C, 맥의 경우 ctrl+G -> q를 입력하면 된다. 또, 두 운영 체제 모두 halt(). 라고 입력해도 빠져나올 수 있다.

Module
쉘에서가 아니라 텍스트 편집기에서도 얼랭 프로그램을 만들 수 있는데, 파일이름.erl 의 형태를 가진다. 모든 파일은 모듈명을 가져야 하고, 모둘명은 파일 이름과 동일해야 한다. 보통 제일 첫 줄에 -module을 이용해 모듈명을 정의한다. 아래 코드에서는 test 가 모듈명인 것이다.

Function
모듈 안에 함수를 정의하는데, 첫 번째 함수 multiple은 두 개의 파라미터를 입력받아 두 수의 곱을 리턴하는 함수다. 두 번째 factorial은 팩토리얼 계산 함수, 세 번째 함수 print는 입력받는 파라미터를 출력하는 함수다.

-module(test).
-export([factorial/1, multiple/2]). 

multiple(Value1, Value2) -> Value1 * Value2. 

factorial(1) -> 1; 
factorial(Num) -> Num * factorial(Num - 1).

print(Value) -> io:format("print : ~w\n", [Value]).

-export([함수1, 함수2, ...]) 이런식으로 외부에서 호출할 함수를 정의하는데 함수명이 리스트 형으로 들어가기 때문에 [ ] 안에 넣어줘야 한다. 리스트에 들어가는 함수들은 함수명/파라미터 수 의 형태를 가진다. 여기에 입력된 함수만 외부에서 호출할 수 있다. 여기 선언된 함수는 쉘에서 뿐만 아니라 다른 모듈에서 함수가 위치하는 모듈명:함수명(파라미터) 이렇게 호출할 수도 있다. export에 선언되지 않은 함수는 동일 모듈 내에서만 호출이 가능하다.


함수는 함수명(파라미터) -> 함수내용. 이런 형태로 정의하는데, 팩토리얼 함수의 경우 동일한 함수 명에 두 가지 케이스가 있다. 이런 경우에는 세미콜론(;)을 이용해 각 케이스별 내용 정의를 끝마치고, 마지막 함수에서만 온점(.)을 사용해 함수 정의가 끝났음을 알린다. 


이제 컴파일을 하고, test 모듈내 작성한 함수들을 실행시켜 보자.

print함수는 수행이 되지 않았다. 왜일까? export 함수에 넣지 않았기 때문이다. 위에서 언급했듯이 export에 선언하지 않은 함수들은 동일 모듈 내에서만 사용이 가능하다. multiple 함수 내에서 print 함수를 호출하도록 코드를 다음과 같이 수정해보자.

-module(test).
-export([factorial/1, multiple/2]). 

multiple(Value1, Value2) -> Result = Value1 * Value2, print(Result).

factorial(1) -> 1; 
factorial(Num) -> Num * factorial(Num - 1).

print(Value) -> io:format("print : ~w\n", [Value]).

다시 컴파일하고 multiple 함수를 호출하면, 내부에서 print 함수를 호출했음을 알 수 있다.

이번에는 test2 모듈을 하나 더 만들어서 test 모듈의 factorial 함수를 호출하도록 해보자.

-module(test2).
-export([call_test1_factorial/1]). 

call_test1_factorial(Num) -> test:factorial(Num).

test2모듈을 컴파일하고 call_test1_factorial 함수를 호출하면 아까 만들었던 factorial 함수를 호출하는 것을 볼 수 있다.



얼랭 쉘 시작 및 간단한 테스트 모듈 작성하기 끝!


반응형