반응형


모듈(Module)이란?


파이썬에서는 하나의 .py로 구성된 파일이 하나의 모듈이다.

자바에서는 모듈이라고 말하는지 정확하게는 모르지만, import를 하는 과정을 본 적이있을 것이다.


예를들어 Scanner를 쓰기 위해 java.util.Scanner 모듈을 호출해야 한다.(모듈인지 정확하지 않다. 파이썬에 비유하기 위해서다.)


파이썬도 마찬가지이다. 어떤 생성된 함수를 쓰기 위해 모듈을 호출하는 과정이다. 이때 자바와 마찬가지로 import 모듈명을 한다.


이쯤에서 보면 C에서는 #include로 인클루드 하는 과정모듈을 부른다라고 생각할 수 있겠다.(물론 C는 절차지향이지만)





모듈(Module)은 왜 사용하나?


모듈을 왜 사용할까?


결론적으로 말하자면, 객체 지향적인 코드를 만들기 위해, 코드의 재활용성을 높이기 위해 모듈을 만든다라고 말할 수 있겠다.


1. 코드의 재활용성이 높아진다.

2. 설계적인 면에서 작업의 효율을 높일 수 있다.(각자 서로의 객체를 제작하여 하나로 합치면 된다.)




여기서 한번 절차 지향 객체 지향의 차이를 보자.


레고를 기준으로 한번 설명해보자.


레고는 블럭 하나 하나를 나누어 만들어두었다.


레고 하나는 하나의 객체라고 볼 수 있다.

이 객체들을 이용하여 우리는 빌딩도 만들 수 있고, 배도 만들 수 있고, 로봇도 만들 수 있다.


이처럼 객체를 잘 구성해두면 할 수 있는 것들이 무수히 많다.


반면 레고를 블럭 단위로 만들어 둔 것이 아닌 로봇 하나로 만들어서 판매하고 있는 레고를 보자.


레고는 객체로 만들어진 로봇과 같은 로봇이지만, 부수게 된다면 다시 배로 만들 수 없는 레고이다.


이것이 절차 지향과 객체 지향의 차이이다.











모듈(Module)은 어디에 저장하고 어떻게 호출하나?


이제 모듈이 필요한 이유를 이해했고, 모듈을 저장하는 방법, 호출하는 방법을 알아보자.


하나의 프로젝트 속에 파일명.py로 저장하면 그것으로 이미 모듈은 저장된 것이다.


호출은 모듈을 호출하고자 하는 곳에서 import 모듈명을 하면 모듈이 호출 된다.


아주 간단하게 해결이 되는 모듈의 저장과 호출이다.




모듈(Module)을 이용하는 예제



아주 간단하게 모듈을 하나 이용해보자.


만약 내가 사칙연산 모듈을 생성해두었다면 다음과 같이 생성할 수 있다.



모듈 코드는 다음과 같다.


< module.py >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def add(n1, n2):
    return n1 + n2
 
def sub(n1, n2):
    return n1 - n2
 
def div(n1, n2):
    return int(n1 / n2) # 소수점 버리기 위해 이용
 
def mod(n1, n2):
    return n1 % n2
 
def mul(n1, n2):
    return n1 * n2
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



메인 코드는 다음과 같다.


< test.py >

1
2
3
4
5
6
7
8
9
10
11
12
import module
 
= 1004; b = 100
 
print("add :: ", module.add(a,b))
print("sub :: ", module.sub(a,b))
print("div :: ", module.div(a,b))
print("mod :: ", module.mod(a,b))
print("mul :: ", module.mul(a,b))
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



이렇게 하면 test.py에서 module.py를 불러와서 거기에 해당하는 함수, 변수 등등을 쓸 수 있게 된다.





모듈을 import할 때 부분적으로만 가지고 오고 싶을 때


from 모듈 명 import 함수 명


이렇게 한다면 모듈명.함수명()으로 호출을 안해도 되고 그냥 함수명()으로 호출이 가능해진다.


마지막 부분의 module.add(a,b)는 당연히 mul만 호출했으니 호출이 되지 않기에 에러가 난다.






모듈에 별명을 붙이고 싶을 때


import 모듈명 as 별명












반응형