본문 바로가기
Python/Python Advanced

1. Python - 패키지?? 표준 라이브러리??

by Rosmary 2020. 6. 3.
728x90
반응형

Python 프로그래밍의 기본을 슬슬 땔 때 쯤이면, 아마 패키지와 표준 라이브러리라는 말을 슬슬 접하게 될 것이다. 필자는 사실, 처음 이 용어들을 들었을 때, 둘 사이 무슨 차이가 있는 것인지 이해를 하지 못했다(필자는 컴퓨터 관련 전공을 하지 않은 사람이다). 그렇다고 이해하지 않고 계속 Python 프로그래밍을 공부하려니, 혼란만 가중된다. 아마 필자와 같은 절차를 겪고 계신 분들이 적지는 않을 듯 하니(특히 독학이라면), 오늘은 Python의 패키지와 표준 라이브러리에 대해 정의를 하고 넘어가려 한다. 

 

 

1. 패키지

 

필자의 Python 포스팅 중 import / from... import를 사용하여 다른 python 파일의 함수와 변수를 호출하는 방법을 보신 분들이라면, 조금 이해가 쉬울 수 있다.

 

프로그래밍을 하다보면, 자신이 자주 사용하는 코드 포맷이 여러 개 발생하게 된다. 아주 간단한 예를 하나 들면, 필자가 숫자를 계산하기 위해 계산기에 필요한 덧셈, 곱셈, 뺄셈, 나눗셈에 대한 함수를 각각의 python 파일에 저장했다고 가정하자. 아래와 같이 

 

 

그런데, 필자가 작성하는 프로그램이 생각보다 비대해져서, 위와 같은 형태의 python 파일을 무수히 많이 만들어 사용한다고 가정해보자. 예를 들어, 계산을 실행하기 전에 사용자에게 안내 문구를 날린다던가, 결과를 출력하는 코드가 정의된 파일을 만든다고 해보자.

 

 

이런식으로 한도 끝도 없이 파일을 만들다보면, 여러분들의 Python 파일들은 특정 위치에 난잡하게 존재하게 된다.

 

위의 사진은 예시를 위해 만든 파일이라 몇 개 안된다만...이런 파일들이 수십개가 있다고 생각해보자.

 

기억력이 좋은 분들이라도, 이 많은 파일들의 기능과 이름을 단박에 매칭시켜 import 문으로 사용하는 것이 가능할리는 없다. 따라서, 이 파일들을 기능에 맞게 폴더로 분류해서 정리를 해 줄 필요가 있다. 예를 들어, 계산과 관련된 파일은 필자가 calculate이란 이름의 폴더에 저장한다고 해보자. 그리고 해당 폴더에는 계산과 관련된 파일들(sum, extract, multiple 그리고 divide.py)을 이동시킨다.

 

calculate 이라는 폴더는 순전히 계산 관련 파일만 존재한다. 이렇게 특정 기능을 가진 Python 파일만 모아놓은 폴더를 패키지(Package)라고 한다. 남아있는 파일들도 기능에 따라 분류하여 폴더 내에 넣으면, 특정 기능을 가진 패키지가 새로 만들어지는 것이다. 예를 들어, intro와 inputnumber, result 은 계산기 프로그램을 사용하기 위해 필요한 정보를 입력하고 결과를 출력하는 내용이 작성된 파일이므로, 이들을 info(안내)라는 이름의 폴더 내에 이동시킨다.

 

남아있는 나머지 두 개의 파일은 신경쓰지 말자... 배경이 허전해서 넣어둔 파일이다.

 

이제, calculate와 info 패키지가 위치한 폴더에, 우리가 만들려고 하는 계산기 기능을 가진 프로그램을 코딩해보자. 물론, 코딩하면서 이 패키지들을 import나 from...import 키워드와 함께 활용할 예정이다.

 

 

패키지 사용법은, 서두에 언급한 링크달린 포스팅을 어느 정도 이해했다면, 충분히 해석이 가능하다. 우선, import 문부터 보자. calculate.sum을 import 했다는 말은, calculate 폴더 아래에 위치한 sum.py를 import 했다는 말이다. 만약 import할 파일이 많다면, 위의 사진처럼 콤마(,)로 구분하여 하나씩 패키지명.파일명으로 지정해주면 된다.

 

이렇게 import한 각각의 파일 내에 있는 함수를 쓰기 위해서는 import 파일명 뒤에 점(.)을 찍고, 해당 파일 내에 존재하는 함수명을 언급해주면 된다. 예를 들어, sum.py 파일 내에는 def sum(a, b)가 정의되어 있고, 덧셈 시, 이를 활용할 것이기 때문에, calculate.sum 파일에 존재하는 sum() 함수를 호출한다는 의미에서, calculate.sum.sum(num1, num2)를 작성해주면 되는 것이다.

 

from... import도 별반 다르지 않다. 다만, from import 문은 import 문과 달리, 파일이 아닌 파일 내의 함수를 직접 import 한다는 차이점이 있다(이는 서두에 링크달아놓은 포스팅을 참조하기 바란다). 그렇기 때문에, intro, input_twonumber, result() 함수가, info.result.result, info.inputnumber.input_twonumber와 같은 형태가 아닌, 함수명을 바로 입력하여 호출하는 것만으로도 작동하는 것을 확인할 수 있다.

 

프로그래밍의 결과는 아래와 같다.

 

 

정리하자면, 자주 사용하는 기능을 파일로 만들고, 이 파일의 목적에 따라 따로 폴더로 만들어 놓은 것을 패키지라고 보면 된다. 

 

그럼, 표준 라이브러리란 무엇일까...?

 

 

2. 표준 라이브러리

 

만약, 어떤 사람이 필자와 같이 협업을 하여, 특정 프로그램을 만든다고 가정해보자. 그리고 그 프로그램에는 계산기 기능이 반드시 필요하기 때문에, 필자가 만든 패키지를 활용하여 작업을 끝내야만 했다.

 

프로젝트가 끝나고, 필자와 협업했던 사람(철수라고 하자)이 또 다른 사람(영희라고 하고...)과 협업을 하게 되었는데, 이 때도 계산기 프로그램을 사용하게 되었다. 철수는 필자에게 계산기 패키지를 보내달라고 요청한다. 그리고 작업을 마무리한다.

 

철수가 또 프로젝트를 진행한다. 또 계산기가 필요하다. 이미 패키지를 지워버렸다. 필자에게 또 요구한다...철수는 생각한다. "아... 이거 유용한데 파이썬에서 바로 쓸 수 있게 이런거 제공해주면 좋겠다..."

 

이 때문에 나온 것이 표준 라이브러리다. 즉, 특정 문제를 해결함에 있어, 프로그래머들이 유용하고 편리한 패키지 또는 python 파일을 공동으로 사용할 수 있도록 하려는 취지에서, Python에서 이들 패키지, 파일을 Python 내에 내장하여 제공하거나, 인터넷으로 다운받을 수 있게 만들어놓았다.

 

패키지의 한 예를 들어보자. 1부터 100 사이의 난수를 출력하는 과정이 프로그램 상에서 필요한데, python은 이러한 기능을 가지는 파일을 내장된 형태로 제공한다. 즉, 랜덤 숫자를 출력하도록 만들어주는 표준 라이브러리를 제공한다고 보면 된다.

 

 

내장 형태의 라이브러리는 Python 폴더 및의 Python37(설치 버전에 따라 숫자는 다르다) 및의 Lib 폴더에 위치해있다. 위에서 예시로 든 random 파일 역시, 해당 폴더에 존재하고 있음을 확인할 수 있다.

 

 

내장된 라이브러리 외에, 최근에 추가된 라이브러리도 사용할 수 있다. 이는 pip라고 불리는 Python Install Package라는 명령어를 cmd에서 사용하여 받을 수 있는데, 이와 관련된 내용은 다음 포스팅에서 조금 더 자세히 다룰 예정이다.

 


파이썬의 패키지와 표준 라이브러리는 프로그래머들의 편의를 위해 만들어진 패키지나 파일이라는 점은 동일하지만, 그것이 많은 사람들에게 표준으로 받아들여졌느냐, 그렇지 않느냐에 따라 차이가 있다고 보면 된다. 아래와 같은 형태의 그래프로 표현하면 적당할 듯 하다.

 

라이브러리를 많이 알면 알 수록, Python으로 만들 수 있는 프로그램의 범위가 넓어지기 때문에, 표준 라이브러리를 많이 알고 있다면 Python 프로그래밍에 상당한 도움이 된다. 물론, 진짜 실력을 키우기 위해서라면 얼마나 효율적으로 코드를 짜는지가 더 중요하지만 말이다...

 

다음 포스팅에서는, 외부 표준 라이브러리를 다운받아 사용하는 방법에 대해 작성하려 한다. 자주 사용하는 라이브러리에 대한 내용은 "그 다음" 포스팅부터 진행하려 한다. 시작은 내장 라이브러리부터.

 

 

FIN.

반응형

댓글