본문 바로가기
개발

[파이썬&루비] 모듈(Module)

by 마스터누누 2017. 5. 31.
728x90
반응형

모듈(Module)



모듈이라고 하는 것은 프로그래밍에서 사용하는 부품이다.

어떻게 보면 함수도 부품이라고 할수 있는데, 함수보다 더 큰 규모의 파일이 모듈이 된다.

예를 들어, 학교에서 학생들을 가르치다가 학생들이 늘어남에 따라 학년으로 분리한다.

그러다가 학년이 감당할수 없을 만큼 규모가 증가하면 반이라는 단위로 나뉘게 된다.

만약 학년과 반의 개념이 없고 학교만 있다면, 학생들이 무질서하게 분포되어있으므로

문제가 생기게 된다.


학년은 교육 정도나 나이에 따라 분류되어지고, 반은 생일이나 키, 이름에 기반한 번호로 줄세워진다.

이와 같이 일정한 기준에 따라 성격이 비슷한 파일들을 하나의 디렉토리에 묶어준다.

따라서 모듈은 코드의 복잡도를 낮추고 문제를 방지하기 위한 중요한 기능이다.





1
2
3
4
5
6
7
8
# python
import math
print(math.ceil(2.9))
print(math.floor(2.9))
print(math.sqrt(16))
 
#ruby
puts(Math.sqrt(16))
cs


사실 우리는 모듈에 대한 것을 사용해 보았다.

수와 계산 포스팅에서, import math를 사용했는데, import는 모듈을 호출하는 명령어이다.

이 math 모듈에는 ceil(올림), floor(내림), sqrt(제곱) 등의 함수가 들어있다.

루비에서는 Math의 경우는, 별도의 import 없이 바로 Math를 호출해 주면된다.


따라서 이런 내장 모듈을 사용하면 코드를 작성하지 않고 손쉽게 문제를 해결할 수 있다.

반대로 말하자면, 이러한 모듈이 없다면 직접 모든 함수를 짜야하거나, 코드가 엄청나게 길어질수 있음을 의미한다.

그리고 코드를 한 파일에 넣어서 엄청나게 길어질 경우 변수나 함수의 이름이 충돌될 가능성이 있다.





모듈의 사용 - 파이썬


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# module1.py
def a():
    return 'a'
def b():
    return 'b'
def c():
    return 'c'
 
# module2.py
def a():
    return 'B'
 
#test.py
from module1 import a as z
import module2 as k
print(z())
print(k.a())
cs


파이썬의 모듈 사용 예제이다.

우선 module1과 2를 생성한다. 이 때, a라는 함수의 이름이 중복되는것에 주목하자.

test.py에서 이렇게 만들어진 모듈을 불러오게 되는데, 

우선 첫번째줄의 코드는 module1의 a라는 함수를 z로 사용하겠다는 의미이다.


여기서 사용된 as는 alias로, 가명이나 별명이라는 뜻이다.

같은 느낌으로 두번째 줄은, module2를 k라고 사용하겠다는 뜻이다.

이렇게 as를 사용함으로써 긴 모듈의 이름을 축약할 수 있고, 편리한 사용이 가능하다.


앞서 설정한 값을 기반으로 아래에 z()는 module1의 a함수를 사용한다는 뜻이며,

k.a()는 module2의 a함수를 호출하는 의미이다.





모듈의 사용 - 루비


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# module1.py
module Module1
  module_function()
  def a()
    return 'a'
  end
end
 
# module2.py
module Module2
  module_function()
  def a()
    return 'B'
  end
end
 
#test.py
require_relative 'Module1'
require_relative 'Module2'
puts(module1.a())
puts(module2.a())
cs


이제 루비에 대한 예제이다.

소스코드를 보면 알수 있듯이 모듈에서 부터 루비와 파이썬의 차이점이 생기기 시작한다.


모듈을 생성해주는 것은 module과  end 키워드를 사용한다.

루비에서는 모듈 이름은 대문자로 시작하는 것을 권장한다.


그리고 모듈 내부에 module_function()을 입력해야한다.

module안에 있는 모든 함수들을 모듈의 함수로 만들어 준다는 것이다.

다시말해, '모듈.함수이름'의 형식으로 접근이 가능하게 만들어주는 함수이다.


이렇게 만들어진 모듈을 사용하기 위해 test 코드에서 require_relative로 모듈을 호출한다.

그리고 '모듈.함수이름'을 통해 해당 모듈을 호출할 수 있다.

(require_relative는 호출하는 파일의 위치에 상대적으로 경로를 지정하게 된다.)



출처 : 생활코딩, 파이썬&루비



반응형

댓글