기타/What I Learned

[TIL] 모듈 사용의 필요성

가죽방패 2021. 12. 28. 11:45

※ 모듈의 필요성

함수 정의 코드가 길어지면 길어질수록 특정 기능들을 단위별로 모듈로 만든 뒤 import 문으로 모듈을

불러들인다면 메인이 되는 모듈의 코드를 파악하기 쉽고 어렵지 않게 활용할 수 있을 것이다.

예를 들어, 카메라 기능이 필요한 태블릿을 만들어야 한다고 할 때, camera_base 모듈을 import해 사용할 수 있고

이렇게 한다면 카메라 기능이 필요할때마다 모듈만 import 하면 되기 때문에 매우 효율적이다

 

이전 포스트에서 사용한 예시와 같이 camera_base.py 모듈은 import 문으로 다른 모듈로 불렸을떄 사진을 찍는 기능을 한 번 사용하며 불려졌는데 일반적으로 스마트폰은 이렇게 작동하지 않고 사용자 친화적이지 않다는 점을 깨달았을 것 이다. 그래서 camera나 phone 모듈이 다른 모듈에 의해 불려질때 기능이 자동으로 실행되지 않도록 해볼것인데 이는 __name__ 변수에 대한 이해가 필요하다.

 

○ 모듈은 __name__ 변수를 가진다

- 사용자가 모듈 내에서 정의하지 않더라도 파이썬 프로그램을 실행할 때 모듈 내에 자동으로 만들어지는 변수들이 있는데, __name__ 변수는 해당 모듈의 이름이 저장되는 변수이다. __name__ 변수가 어떤것인지 확인하기 위해 모듈 두개를 불러들이는 예시를 보며 확인해보자.

#camera.py
def photo():
	print("Take Photo")
photo()
print("camera.py's module name is",__name__)

#phone.py
def makeacall():
	print("Make a Call")
makeacall()
print("phone.py's module name is",__name__)

#smart.py
import carmera
import phone
print("smart.py's module name is",__name__)
print("-----")
while True:
	choice = input("what do you want? : ")
    if choice == '0':
    	break
    if choice == '1':
    	camera.photo()
    elif choice == '2':
   		phone.makeacall()
   	elif choice == '3':
    	print("나중에 구현될 기능")
print("프로그램이 종료되었습니다")

예시 코드는 이렇게 작성하였고 출력 결과는 다음과 같다.

#Take Photo
#camera.py's module name is camera
#Make a Call
#phone.py's module name is phone
#smart.py's module name is __main__
#-----
#what do you want? :

camera 와 phone 모듈은 각각 자신의 모듈 명이 저장되어 있고, smart.py 모듈은 __main__이 저장되어 있는데 이는 직접 실행되는 모듈의 변수 __name__ 은 항상 __main__ 이라는 값을 갖기로 약속되었기 때문이다.

즉, 어떤 모듈을 실행하던지 변수명과는 상관없이 직접 실행되는 모듈의 경우 항상 __main__ 값을 가지고 출력한다는 점을 유의하여야 한다.

 

이 점을 이용하여 원하는 경우에만 기능이 작동하도록 하는 코드를 작성해보았다.

#camera_mod.py
def photo():
	print("Take Photo")
if __name__ == '__main__':
    photo()


#phone_mod.py
def makeacall():
	print("Make a Call")
if __name__ == '__main__':
	makeacall()

#smart.py
import carmera
import phone
print("smart.py's module name is",__name__)
print("-----")
def smart_on():
  while True:
      choice = input("what do you want? : ")
      if choice == '0':
          break
      if choice == '1':
          camera_mod.photo()
      elif choice == '2':
          phone_mod.makeacall()
      elif choice == '3':
          print("나중에 구현될 기능")
  print("프로그램이 종료되었습니다")

if __name__ == '__main__':
	smart_on()

이제 모듈을 불러들인다 하더라도 모듈에 있는 실행코드가 멋대로 작동하는 것이 아니라 사용자가 원할때만 작동하도록 코드가 수정되어 실행여부를 제어할 수 있게 되었다. 이렇게 모듈의 특성을 이해하고 적용하는데 어려움이 없다면 간단하게 효율적인 코드를 작성할 수 있을 것이다.

'기타 > What I Learned' 카테고리의 다른 글

[TIL] 패키지  (0) 2022.01.01
[TIL] 모듈을 사용하는 방법  (0) 2021.12.29
[TIL] 모듈  (0) 2021.12.27
[TIL] 람다 표현식  (0) 2021.12.26
[TIL] 스코핑룰과 주의점  (0) 2021.12.25