본문 바로가기

Back-End/Python

[Python][파이썬] 라이브러리, 모듈(module), import , __name__

~ 목차 ~

 

< 라이브러리와 Module >

 

  1. 라이브러리(Library):
    • 정의 : 필요한 프로그램을 모아 놓은 집합체, 필요할때 찾아 쓸 수 있도록 모듈화되어 제공되는 프로그램.
    • 프로그래밍 언어에 일반적으로 도움말, 설치 파일, 샘플 코드 등을 제공
    • 라이브러리는 모듈과 패키지를 총칭한다.
      • 모듈 : 개별파일                  ex. import(모듈명)
      • 패키지 : 모아놓은 폴더      ex. import(패키지명), (모듈명)
    • 장점 : 자주 사용하는 기능을 쉽게 재사용할 수 있고 다른 사람과도 공유가능
    • 표준 라이브러리 : 기본적으로 설치 될 때 자동으로 설치 되는 라이브러리
    • 외부 라이브러리 : 기본 외에 별도로 설치해서 사용하는 라이브러리
    • 외부 라이브러리 설치 : pip install 라이브러리명, conda install 라이브러리명
      ( google에 필요한 라이브러리 찾아서 설치 코드 검색해서 설치하는게 좋음)
    • 라이브러리 설치 확인 : pip list, conda list 라이브러리명
    • 사용법 : import 라이브러리명
  2.  모듈(Module):
    • 모듈은 코드의 일부분을 구성하는 독립적인 단위. 모듈은 특정 작업 또는 기능을 수행하기 위한 코드 블록으로, 관련된 함수, 클래스, 변수, 또는 상수가 포함됨.
    • 모듈을 사용하면 코드를 논리적으로 분할하고 재사용 가능한 코드 조각을 만들 수 있습니다. 모듈은 코드의 구조화를 촉진하며 유지 보수와 협업을 용이하게 합니다.

 

  • 만들어진 라이브러리 다운 : https://downloads.apache.org/
  • 파이썬의 라이브러리를 설치하게 되면 라이브러리 소스 코드는 보통 "C:\Users\user\AppData\Roaming\Python\Python311\site-packages" 디렉토리 안에 설치가 된다.
    • 경로 기억 나지 않을 땐 Site Package 위치 출력하기 :  python -m site --user-site
    • Python에서 Site Packages가 설치되어 있는 경로를 출력하는 방법입니다. Command Line Tool에서 다음 명령을 입력
  • 보통 파이썬 라이브러리 코드를 import를 할 때 아래 기준으로 라이브러리를 찾는다.
    1. 현재 위치(./)
    2. " C:\Users\user\AppData\Roaming\Python\Python311\site-packages "

 


 

<라이브러리와 프레임워크>

 

  • 라이브러리 : 개발자가 라이브러리의 기능을 수동으로 호출 함 , 제어의 주체가 개발자
  • 프레임워크 : 프레임워크는 개발자에게 제공되는 구조와 규칙의 집합,  개발하는 데 필요한 기본 틀을 제공.
                         제어의 주체가 프레임워크에 있으며, 개발자는 프레임워크가 정의한 규칙을 따라야 한다. 
                         예)Django - 파이썬언어, Ruby on Rails - 루비언어, Spring - 자바언어

 


 

< Module와 Import >

 

  • import :  import를 사용하면 모듈을 불러올 수 있다. (import는 '수입하다', '가져오다')
                  컴퓨터에서는 다른 프로그램으로부터 데이터를 갖고 오는 것
    • 파이썬 import 방법1 : import 모듈                     //모듈 전체 가져오기
    • 파이썬 import 방법2 : from 모듈 import 이름    // 모듈 내에서 필요한 것만 가져오기
  • module : 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일
                    이미 만들어 놓은 모듈을 사용할 수도 있고 우리가 직접 만들어 사용할 수도 있다.
  • 모듈 만들기 (cust폴더 > ver1폴더 안 common.py)
#common.py

def print_menu():
    return input('''
        다음 중에서 하실 작업의 메뉴를 입력하세요.
        I - 고객 정보 입력
        P - 이전 고객 정보 조회
        C - 현재 고객 정보 조회
        N - 다음 고객 정보 조회
        U - 현재 고객 정보 수정
        D - 현재 고객 정보 삭제
        Q - 프로그램 종료
    ''').upper()

#첫번째 파라미터는 로직이어야 한다.(함수) func( 리턴값 T/F로 넘어와야함)
#두번째 파라미터는 인풋에 사용되는 메세지 문자열. msg
def chk_input_data(msg, func):
    while True:
        x = input(msg).upper()
        if func(x):
            break
        else:
            print('잘못 입력하셨습니다. 다시 입력 해 주세요.')
    return x

 

  • 모듈 불러오기 (cust폴더 > ver1폴더 안 common.py)
from cust.ver1.common import print_menu
from cust.ver1.common import chk_input_data as check

as OO : 알리아스(alias), 모듈의 별명 

                  모듈 별명 설정하면 불러온 모듈 사용 할 때 별명으로 사용 할 수 있다.

from cust.ver1.common import chk_input_data as check

def do_I(customers, index):
    print('고객정보 입력')
    customer = { 'name':'', 'gender': '', 'email': '', 'year': 0 }

    #이름 입력 3글자 이상 체크(람다식)
    customer['name'] = check('이름을 입력하세요 : ', lambda x: True if len(x) > 2 else False)

    #성별 M, F 입력
    customer['gender'] = check('성별 (M/F)를 입력하세요 : ', lambda x: True if x in ('M', 'F') else False)

    #이메일 입력
    customer['email'] = check('이메일 주소를 입력하세요 : ', lambda x: True if '@' in x else False)

    #출생연도 입력
    customer['year'] = check('출생년도 4자리 입력하세요 : ', lambda x: True if len(x) == 4 and x.isdigit() else False)

    customers.append(customer)
    index = len(customers) - 1
    return index

※ def do_I(customers, index):
    customers는 main에서의 customers 주소값이 넘어오는것 (현재 모듈에서 수정하면 main에서 변경됨)

    indexmain에서의 index 이 넘어오는것 ( 현재 모듈에서 수정해도 main에 변경안됨, 따라서 return index 필요)

 

※ chk_input_data 함수를 'check'로 별명을 지었기 때문에 코드 안에서 check로 사용할 수 있다.

 


 

<TDD와 __name__>

 

TDD(Test Driven Development) : 테스트 주도적인 개발, 소스코드 작업 전에 테스트 코드를 먼저 작성해 소스 수정에 대한 부담을 덜고 디버깅 시간을 줄이는 방법

if __name__ == '__main__':
    main()
  • 해석 : __name__이라는 변수의 값이 __main__이라면 아래의 코드를 실행하라.
  •  파이썬의 두 가지 특징
     1. 들여쓰기를 통해 코드 실행의 레벨을 결정한다.
     2. main이 존재하지 않는다.
  • __name__이라는 내장변수
    • 현재 모듈의 이름을 담고있는 내장 변수
    • 이 변수는 직접 실행된 모듈의 경우 __main__이라는 값을 가지게 되며, 
      직접 실행되지 않은 import된 모듈은 모듈의 이름(파일명)을 가지게 된다.
if __name__ == '__main__':
    main()
    do_I()

#test, 모듈로 실행할 경우 모듈 이름 넣어주기
# if __name__ == '__customer_module__':

※ if문 아래 함수 넣어보면서 test실행해 볼 수 있다.

 

 

 

참고

 

점프 투 파이썬 - 박응용

[Python]if __name__ == "__main__" (tistory.com)

728x90