관리 메뉴

보리차

[파이썬] 스크립트와 모듈 본문

파이썬

[파이썬] 스크립트와 모듈

보리콩 2021. 5. 24. 17:04

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

 

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

 

스크립트와 모듈은 실행 여부에 나뉜 것이지 파일 자체에 특별한 차이가 있는 것은 아니다. 따라서 어떤 파일은 모듈이 될 수도 있고 스크립트가 될 수도 있다.

그런데 예를 들어 모듈 파일에 테스트 코드를 추가하게 되면 이 모듈을 임포트할 때 테스트 코드도 함께 출력되는 문제가 발생하게 된다.

 

 

area.py

PI = 3.14

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

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

# circle 함수 테스트
print(circle(2) == 12.56)

 

이 문제를 해결하기 위해서는 __name__(던더바 네임) 이라는 특수 변수를 사용하면 된다. ( __ 는 던더바(더블언더바)라고 읽는다. )

 

 

 

name 특수 변수

__name__은 모듈의 이름을 저장해 놓은 변수이다.

 - 파일을 직접 실행하면 __name__은 __main__으로 설정된다.

 - 파일을 임포트하면 __name__은 모듈 이름으로 설정된다.

 

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

 

 

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)

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

 

 

+) __name__을 이용하면 JAVA나 C++에서의 main( ) 함수와 같은 형태를 만들어 줄 수 있다.

 

run.py

import area

# 면적 계산기 프로그램
def main():
        x = float(input('원의 지름을 입력해 주세요: '))
        print('지름이 {}인 원의 면적은 {}입니다.\n'.format(x, area.circle(x)))

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

if __name__ == '__main__':
    main()

 

main( ) 함수를 사용하면 파일에서 프로그램을 작동시키는 코드가 어디인지 알 수 있기 때문에 코드의 가독성이 올라가게 된다.

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

[파이썬] __init__  (0) 2021.06.03
[파이썬] 패키지  (0) 2021.05.27
[파이썬] 모듈 검색 경로  (0) 2021.05.24
[파이썬] 네임스페이스(namespace)  (0) 2021.05.24
[파이썬] 모듈  (0) 2021.05.24