주요 개념
- 라이브러리(library)
- 패키지(package)
- 모듈(module)
- 함수(function)
- 메소드(method)
비단 파이썬에서만 사용되는 용어는 아니지만 가끔 혼동해서 말하는 경우가 있어 정리해 둘 필요가 있을 것 같다.
먼저 라이브러리(library)는 여러 패키지와 모듈들을 모아놓은 것을 의미한다.
패키지(package)는 특정 기능과 관련된 여러 모듈을 한 폴더 안에 넣어 관리하는데 이를 패키지라고 한다. 예를 들어 Test라는 폴더 안에 __init__.py, test.py와 같은 파일들이 모여있는 것이다.
모듈(module)은 함수, 변수, 클래스를 모아놓은 것을 말한다. 일반적으로 한 파일을 말하는데 예를 들어 .py와 같은 하나의 파일 안에 함수와 변수, 클래스가 모여있는 것으로 볼 수 있다.
결론적으로 라이브러리 >= 패키지 >= 모듈로 볼 수 있다.
함수(function)는 특정 작업을 수행하는 독립된 기능을 수행하는 단위이다. 아래는 Python 함수의 예이다.
def function(val):
return val
print(function(8))
메소드(method)는 클래스, 구조체, 열거형 등에 포함되어 있는 함수를 메소드라고 지칭한다. 클래스 안에 선언되어 있는 멤버 함수들이 이에 해당되고 클래스 함수라고도 불린다. 아래는 Python 클래스와 메소드의 사용의 예이다.
class Object():
def method(self, val):
return val
obj = Object()
print(obj.method(8))
즉, 함수는 메소드보다 상위 개념이므로 메소드를 지칭할 때 포괄적으로 함수라고 지칭할 수 있다.
추가적으로 그냥 궁금해서 함수를 실행하는 시간과 메소드를 호출해서 실행하는 시간을 비교해보았는데 똑같은 실행시간 일 때도 있지만 일반적으로 메소드가 더 짧은 실행 시간이 걸렸다. val을 1로 바꾸어도 결과는 메소드가 조금 더 빨랐다. 이와 관련해서는 원인을 조금 더 생각해 봐야겠다.
def function(val):
for i in range(val):
val += i
return val
stime = time.time()
function(10000000)
func_time=time.time()-stime
print(func_time)
class Object():
def method(self, val):
for i in range(val):
val += i
return val
obj = Object()
stime = time.time()
obj.method(10000000)
method_time=time.time()-stime
print(method_time)
print(func_time-method_time)
관련 포스트