05의 개발 계발

[TIL] 230327 [Python] import 사용법 - 파일불러오기 본문

TIL

[TIL] 230327 [Python] import 사용법 - 파일불러오기

생각하는 코댕이 2023. 3. 27. 16:07
728x90

TIL 학습목표

  • Python 에서 import 의 의미를 안다.
  • Python 에서 import를 사용하는 방법을 안다.
  • import의 코드컨벤션(≒암묵적 약속,권장사항)을 안다.

1) 문제점 (Problem)

일반적으로 유지보수와 가독성을 위해 파일을 나누어서 작업한 뒤 import로 끌어와 main.py 에서 실행한다.

그런데 팀원들과 개인 과제 리뷰 중 
import <파일명> 을 사용하는 팀원과 from <파일명> import* 을 사용하는 팀원으로 나뉘어 코드 리뷰 시 혼동이 왔었다.

이에 import의 사용법과 코드컨벤션에 대해 학습을 진행하였다.


2) 학습내용

▶import의 의미  |  참고자료

 import : '수입하다', '가져오다'라는 뜻으로, 다른 프로그램으로부터 데이터를 갖고 오는 것을 뜻한다.
              즉, 모듈을 가져와 사용할 때 import 라는 명령어를 사용해 참조한다.

a.py 에서 b.py를 import 한다는 것은
a.py상단에 b.py가 써져있는 것 같은 효과를 준다.

즉, b.py에 적혀있는 클래스,함수,변수 들을
a.py에서 정의하지 않더라도 사용할 수 있다는 것이다.


▶import 방법의 종류

여기서, 내가 만든 파일도 하나의 모듈(module)임을 알도록 하자.
또한 <변수> 는 <모듈>에서 정의된 변수,클래스,함수 등을 모두 포함하는 의미임을 알자.

명령어 의미 특징
import <모듈명> 모듈을 참조하겠다 모듈명을 언급해야(O)
변수 호출이 가능하다
from <모듈명> import * 모듈에 있는 모든 변수들을 참조하겠다 모듈명 언급없이(X)
바로 변수 호출이 가능하다
from <모듈명> import <변수명> 모듈에 있는 특정 변수만 참조하겠다 모듈명 언급없이(X)
바로 특정 클래스와 메소드 호출이 가능하다
from . import <파일명> 현재폴더에 있는 특정 파일을 참조하겠다 -
#예시
import msvcrt
from rich import * #전체참조하는 import*를 wildcard import 라고 한다.
from threading import Timer
from . import views

▶import 코드컨벤션(권장사항)

구글링한 결과와 후에 pylint(VScode확장)의 사용법을 터득하고 알게 된 것들이다.
여기서, 내가 만든 파일도 하나의 모듈(module)임을 알도록 하자.

  1. import os, time, system 처럼 한 줄에 여러개의 모듈이나 파일명을 쓰지 않는다.
    • 가독성을 위해 한줄에 하나씩 작성한다.
  2. from <모듈명> import * 은 권장하지 않는다.
    • import 하여 사용한 것이 무엇인지 알아야 오류대처에 유리하다.
    • import * 로 파일 전체를 끌어오면 변수와 함수, 클래스 등 모든걸 참조하므로 변수 충돌의 위험이 높아진다.
  3. 코드실행에 문제가 없다하더라도 사용하지 않는 모듈과 파일은 import 에서 지운다.
    • 가독성과 코드리뷰에 용이하게 사용한 것들만 명시되도록 한다.
  4. [ standard import 내장 모듈 ] > [ pip install 한 모듈 ] > [ 직접 만든 모듈 ] 순으로 위에서부터 작성한다.
    • 충돌이 발생할 확률이 낮은 순으로 최상단에 배치된다.
    • 모듈이 섞이지 않도록 해 코드리뷰시 용이하다.
  5. import는 항상 모듈 최상단에 기입한다.
    • 모듈을 한눈에 파악할 수 있다.
    • 사용된 모듈을 통해 코드의 구동을 짐작할 수 있다.

3) 시사점

wildcard import를 할 경우 변수 충돌이 발생할 수 있다.

from <모듈명> import * == wildcard import

모듈의 모든 변수를 참조하면 순간은 참조의 편의성을 느낄 수 있지만,
각 모듈의 변수명이 겹칠경우 충돌이 발생하여 의도치 않은 오류나 버그가 발생할 수 있다.

따라서, 의식하고 참조할 수 있는 import <모듈명> 방식이나
필요한 변수만 참조 가능한 from <모듈명> import <변수명> 을 사용하도록 하자 


4) 알게 된 점  (Learnd)

import의 사용방법과 import 시 고려해야 할 부분에 대해 알게되었다.
특히나 코드컨벤션을 알아보는 부분에서 import 시 충돌이 일어날 수 있겠다는 생각을 하게 되었다.
지금처럼 미니프로젝트 수준의 프로젝트는 사용할 변수도 모듈도 적기 때문에 충돌의 위험이 적지만,
큰 프로젝트의 경우 자칫하면 대참사가 발생할 수 있는 큰 부분인것 같다.
코드컨벤션이 왜 중요한지 점점 알게되어간다. 익숙해지도록 하자.

개인과제 T개인과제 Text_RPGext_RPG개인과제 Text_RPG

728x90