본문 바로가기
[Python & Ruby]

[Python & Ruby] Module

by Hevton 2020. 12. 20.
반응형

Module : 파일을 디렉토리 별로 정리하듯이, 연관되어 있는 기능들을 묶어놓은 일종의 한 부품.

코드를 재사용하기에 좋다. 일종의 템플릿을 구현해놓고 사용한다고 보면 된다.

쉽게 생각하면 관련된 함수들을 저장시켜놓은 디렉토리라고 생각하면 이해가 쉽다. (대신 꼭 함수들만 그런 것은 아니라는 것 주의)

 

 

 

[ 이미 존재하는 모듈에 대한 사용 ]


Python : 

import math
print(math.ceil(2.9))
print(math.floor(2.9))
print(math.sqrt(16))

 

Ruby :

puts(Math.sqrt(16))

루비에는 Math 모듈이 기본적으로 내장되어 있다.

 

 

[ 모듈 정의 / 사용 ]

 

Python :

 

good.py (모듈 역할을 해줄 파일)

a = 3;

def h():
    return 'hello'

def g():
    return 'good'

---

import good as k
# from good import h -> good 모듈에서 h 함수만 가져온다. 사용할 땐 그냥 바로 h()

print(k.a)
print(k.h())
print(k.g())

Output :

3
hello
good

 

이렇게, 모듈은 코드 묶음을(=파일) 그대로 가져와서 부품으로써 사용할 수 있는 것.

 

 

Ruby  :

루비에서는 모듈의 이름을 대문자로 시작시켜야한다.

module Good
  # a = 5 사용이 안되네.
  module_function()
  def h()
    return 'hello'
  end
end

puts(Good.h())

 

파이썬의 경우 파일을 분리해서 모듈을 만드는데, 루비의 경우 파일을 분리해서 만들어 줄 수도 있고, 이렇게 파일을 분리하지 않고도 모듈을 정의할 수 있다.

 

Q_파이썬에서는 변수같은 값을 모듈에 넣고도 사용이 가능했으며, 값을 바꿔줘도 잘 작동하는데 루비에서는 사용이 안됐다. 무슨 다른 방법이 있는 걸까 아니면 원래 안되는걸까.

->

module Good
  DD = 5
  module_function() // 모듈 안의 함수를 참조시키기 위해서 필수로 넣어줘야 한다고 함.
  def h()
    return 'hello'
  end
end

puts(Good::DD)

루비에서는 대문자로 작성하여 선언하면 값의 사용이 가능하고, 사용할 때엔 ::를 사용해서 참조해줘야 한다.

그치만 파이썬에서 처럼 변수역할로 동작하진 못하는 것 같다. 값을 바꿔줄 수가 없다.

파이썬과 루비에서의 모듈은 조금은 다른 것 같다. 포함 범위가 조금 다른 느낌. 물론 사용방법도 다르고.

파이썬 모듈 : dojang.io/mod/page/view.php?id=2447 

루비 모듈 : edu.goorm.io/learn/lecture/2011/한-눈에-끝내는-루비-기초/lesson/83331/모듈

 

 

이번엔 루비에서 파일을 분리하여 모듈을 정의하는 방법

 

Good.rb ( good.rb 해도 됨. 모듈 이름과 대소문자만 상관없이 같으면 됨 )

module Good
  DD = 5
  module_function()
  def h()
    return 'hello'
  end
end

---

require 구문으로 모듈 이름 참조.

# require './Good' # 경로를 표시해줘야함. 이 경우엔 상대경로
require_relative 'Good' # 아예 이렇게 해줄 수도 있음. 이게 편함.

puts(Good.h())

 

반응형