분류 전체보기 (199)
ººº::Development™:: (66)
ººº::Learning™:: (31)
ººº::Information™:: (37)
ººº::Note™:: (11)
ººº::Photo™:: (50)
ººº::zEtc™:: (3)
rss

믹시
tistory 티스토리 가입하기!
2008. 10. 6. 19:18
  지금까지 얼래에 관해 아주 간단하게나마 간을 보았다. 그런데 정작 프로그램같은 코드는 한줄도 작성해 보지 않았다. 그래서 이번 포스트부터 얼랭으로 간단한 프로그램을 만들어보고 컴파일하고 사용해 보도자.
그럼 처음으로 얼랭에서의 모듈에 관해 알아보자.

1. 모듈
  얼랭에서의 모듈은 코드의 기본 단위이다. 작성한 모든 함수는 모듈에 담기고, 이러한 모듈은 확장자 .erl인 파일로 저장된다. 또한 이렇게 작성된 모듈은 컴파일해야 하며, 컴파일된 모듈은 .beam확장자를 가진다.

다음내용을 geometry.erl파일로 저장한다.
-module( geometry ).
-export( [area/1] ).
area( {rectangle, Width, Ht } )   -> Width * Ht;
area( {circle, R} )                   -> 3.14159 * R * R.

위에서 -module은 해당하는 모듈의 이름이라고 생각하시면 되고, -export는 해당하는 모듈의 함수(?, 이 부분은 추후 다시 설명 )이름과 해당하는 함수의 파라미터 개수를 뜻한다고 생각하자. -module과 -export보다는 아래 내용에 중점을 두고, 위 내용을 간략하게 설명하겠다.
  area 함수는 두 절( clause )로 구성되며, 두 절의 각 패천은 정확하게 하나의 절과 대응한다. 풀어 설명하면 geometry:area( {rectangle, 10, 5} )를 호출하면, 첫번째 절과 매치하게 된다. 이해가 잘 안되면 컴파일 하고 실행해보면서 이해를 해보자.

  먼저 위 내용을 컴파일 하기 전에 위 파일은 erl을 실행하는 폴더에 존재해야 한다. 즉, C:\temp 폴더에서 erl을 실행하면 위 파일은 c:\temp 폴더에 존재해야 한다. 만약 다른 폴더에서 erl을 실행했다면 erl 콘솔에서 "cd( "변경하고자 하는 폴더 path" )." 명령어를 통해 폴더를 변경해 주어야 한다.
1> c( geometry ).
{ok, geometry}
2> geometry:area( {rectangle, 10, 5}).
50
3> geometry:area( {circle, 1.4} ).
6.15752

1번째 라인에서 c( geometry ) 명령을 통해 geometry.erl 파일의 코드를 컴파일 한다. 2와 3번째 라인에서 geomery 모듈에 있는 함수를 호출한다. 함수 이름과 함께 모듈 이름도 포함하고 있음에 유의해서 보자.

  어떻게 위 내용을 통해 모듈에 관해 조금이나마 이해가 되는지 모르겠다. 나는 이 코드를 통해 일단 가장 기보닝 되는 내용은 이해가 되기는 했지만 머 아직도 이해의 폭은 좁고 설명하기에는 많이 부족한거 같다. 다음 포스트에서 함수에 관해 좀더 포스팅을 하다보면 조금 이나마 이해의 폭을 넓일수 있을 것이다.

그럼 이 글을 읽는 모든 분들에게 즐겁고 행복한 일만 가득하기를 기원합니다.!