티스토리 뷰

파이썬/모듈

스크립트 vs 모듈

코린이도이 2021. 4. 1. 22:48

스크립트란? 실제로 프로그램을 작동시키는 코드를 담은, 실행 용도의 파일을 뜻함

모듈이란? 프로그램에 필요한 변수들이나 함수들을 정의해 놓은, 임포트 용도의 파일을 뜻함

 

area.py

PI = 3.14

#원의 면적을 구해 주는 함수
def circle(radius):
	return PI * redius * radius

#정사각형의 면적을 구해 주는 함수
def square(length):
	return length * length

area 파일에서는 프로그램에 필요한 함수들을 정의하기만 하고 함수들을 사용하지는 않음

 

run.py

import area

x = float(input('원의 지름을 입력해 주세요: '))
print('지름이 {}인 원의 면적은 {}입니다.\n'.format(x, area.circle(x)))

y = float(input('정사각형의 변의 길이를 입력해 주세요: '))
print('변의 길이가 {}인 정사각형의 면적은 {}입니다.'.format(y, area.circle(y)))

실제로 함수들을 사용하는 코드는 run파일에 있음, 이 파일을 실행시키면 프로그램이 작동함

 

따라서 area 파일은 모듈이고 run 파일은 스크립트라고 할 수 있음

 

그런데 스크립트와 모듈은 우리가 그 안에 어떤 내용을 담을지 정한 것일 뿐 파일 자체에 특별한 차이가 있는 건 아니기 때문에 어떤 파이썬 파일이든 직접 실행할 수도 있고 다른 곳에서 불러올 수도 있음, 그러니까 어떤 파일은 상황에 따라 모듈이 될 수도 있고 스크립트가 될 수도 있음, 예를 들어 아래와 같은 코드를 area.py에 추가하면

 

area.py

PI = 3.14

#원의 면적을 구해 주는 함수
def circle(radius):
	return PI * radius * radius
    
#정사각형의 면적을 구해 주는 함수
def square(length):
	return length * length
    
#circle 함수 테스트
print(circle(2) == 12.56)
print(circle(5) == 78.5)

#square 함수 테스트
print(square(2) == 4)
print(square(5) == 25)

area 파일을 함수들을 테스트해주는 스크립트로 사용할 수도 있음

 

하지만 여기서 문제가 생기는데 그건 area 모듈을 임포트해도 위 테스트 코드가 실행된다는 것임, 모듈을 임포트하면 모듈 안에 있는 코드가 처음부터 끝까지 모두 실행되기 때문임, 이 문제를 해결하기 위해서는 __name__이라는 특수 변수를 사용해야 함

 

 

name 특수 변수

 

name이란? __name__은 모듈의 이름을 저장해 놓은 변수

__name__의 값은 파이썬이 알아서 정해줌

  • 파일을 직접 실행하면 __name__은 __main__으로 설정됨
  • 파일을 임포트하면 __name__은 모듈 이름으로 설정됨

예를 들어 area 파일에서 __name__을 아래처럼 출력해보면:

 

area.py

print(__name__)

area 파일을 직접 실행할 경우 __main__이라고 나오고

__main__

area 파일을 임포트할 경우 area라고 나옴

area

 

 

if __name__ == '__main__'

__name__을 사용하면 파일이 직접 실행되냐 아니면 임포트되냐에 따라서 코드의 흐름을 제어할 수 있음

파일 직접 실행될 때만 실행하고 싶은 코드는 if __name__ == '__main__'이라는 조건문 안에 넣어주면 됨

 

area.py

PI = 3.14

#원의 면적을 구해 주는 함수
def circle(radius):
	return PI * radius * radius

#정사각형의 면적을 구해 주는 함수
def square(length):
	return length * length
    
if __name__ == '__main__':
	#circle 함수 테스트
    print(circle(2) == 12.56)
    print(circle(5) == 78.4)
    
    #square 함수 테스트
    print(square(2) == 4)
    print(square(5) == 25)

area 파일을 직접 실행시키면 파일의 __name__은 __main__이 되기 때문에 조건문 안에 있는 코드가 실행되지만 area파일을 임포트하면 __name__은 area가 되기 때문에 조건문 안에 있는 코드가 실행되지 않는다.

'파이썬 > 모듈' 카테고리의 다른 글

패키지 정리  (0) 2021.04.02
main() 함수  (0) 2021.04.01
파일 경로  (0) 2021.03.31
유용한 스탠다드 모듈  (0) 2021.03.31
모듈과 클래스  (0) 2021.03.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함