ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬의 모듈
    Python/study 2013. 12. 18. 03:31

    ※ 주의사항

    아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.

    악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.

    해당 문서의 저작권은 해당 저자에게 모두 있습니다. 다른 용도로 사용할 시 법적 조치가 가해질 수 있습니다.

     

    이번에는 모듈을 사용하는 방법에 대하여 알아보도록 하겠습니다.


    모듈이라는 것은 그 자체로 기능을 가지고 있는 하나의 프로그램이라고 할 수 있습니다. 지금 내가 가지고 있는 프로그램에 모듈을 더함으로써 모듈이 가지고 있는 기능을 내가 가진 프로그램에서 사용할 수 있습니다. 뭐, 하나의 업그레이드 부품이라고 생각하면 더 쉽겠네요. 


    더 쉽게 예를 들자면, 제가 자동차를 한대 가지고 있습니다. 이동하는 기능을 가지고 있죠. 그런데 이 자동차에 네비게이션이라는 모듈을 장착했습니다. 그럼 이제 제 자동차는 네비게이션이라는 모듈이 가지고 있는 기능을 포함하게되므로 결국 자동차가 길을 찾는 기능도 가지게 되는 것입니다. 모듈이라는 개념이 이해되십니까?


    자, 그럼 이 모듈이라는 것은 어떤 형태로 저장되어 있을까요? 살펴보도록 하겠습니다.



    모듈은 위와 같이 파일의 형태로 저장되어 있습니다. 파일 안에서 모듈이 구현할 기능들을 정의하는 것입니다. 위의 모듈은 예제를 위해 제가 임의로 작성한 것입니다. 'haerakai'라는 모듈에는 shout라는 함수도 있구요. 'Haerakai'라는 이름의 클래스도 정의되어 있습니다. 'haerakai'라는 모듈에서 정의된 함수와 클래스는 해당 모듈을 불러와야지만 사용할 수 있습니다.

    정리 70) 모듈 : 모듈은 그 자체로 기능을 가지고 있는 하나의 프로그램이며, 파일 형태로 저장되어 있습니다.


    모듈은 기본적으로 'import 모듈명'의 형태로 불러옵니다. import 란 단어가 '수입하다'라는 뜻을 가지고 있기 때문에 파이썬에서 'haerakai'라는 모듈을 수입해온다고 생각하면 간단합니다. 이렇게 불러온 모듈이 가지고 있는 기능을 사용하려면 반드시 기능의 이름 앞에 어떤 모듈에 있는 기능인지를 명시해 주어야 합니다. 

    정리 71) import haerakai : 'import 모듈명'과 같은 형태의 명령어로 모듈을 불러옵니다.

    위의 예제에서는 'haerakai'라는 모듈에 있는 shout()함수를 사용하기 위해서 haerakai.shout(5)와 같이 명령을 주었습니다. 즉, "'haerakai'라는 모듈에 있는 'shout'라는 함수를 사용하겠다"는 의미가 되는 것입니다. 이는 haerakai라는 모듈 안에 정의되어 있는 'Haerakai'라는 클래스를 사용할 때에도 마찬가지로 적용됩니다.

    이어서 해당 모듈을 다른 이름으로 불러올 수도 있습니다. 이런 경우는 해당 모듈이 누군가로부터 받아온 모듈이거나, 불가피한 사유로 모듈을 다른 이름으로 사용하고자 하는 경우, 또는 해당 모듈의 이름이 너무 긴 경우가 될 것입니다.


    모듈을 다른 이름으로 불러오는 방법은 위와 같이 모듈을 불러올 때, as 문을 이용하여 대체할 이름을 명시해주는 것입니다. 
    이렇게하면 해당 모듈을 더 간단한 이름, 혹은 다른 의미있는 이름으로 불러올 수 있습니다.

    정리 72) import haerakai as hk : as 문을 이용하여 모듈을 다른 이름으로 불러올 수 있습니다.

    이렇게 모듈에 정의된 기능들을 사용할 때마다 모듈의 이름을 명시해야하는 이유는 바로 네임스페이스 때문입니다. 네임스페이스라는 것은 모듈 별로 정의하고 있는 기능들을 구분하기위해 사용하는 것인데요. 개념을 그림으로 표현하면 다음과 같습니다.


    위와 같이 각각의 모듈을 자신의 이름을 본뜬 네임스페이스를 가집니다. 우리가 파이썬 명령을 주는 화면은 디폴트이기 때문에 네임스페이스가 생략됩니다. 지금과 같이 모듈을 하나 불러왔을 경우에는 문제가 되지 않지만, 여러가지 모듈을 동시에 불러와 사용할 때에는 문제가 발생할 수 있습니다. 바로 서로 다른 모듈에 같은 이름의 함수나 클래스 등의 기능이 존재하는 것입니다.

    예를 들어 A라는 모듈에도 add라는 함수가 있고, B라는 모듈에도 add라는 함수가 있다고 가정하겠습니다. 그런데 각각의 모듈이 가지고 있는 add라는 함수는 전혀 다른 동작을 정의하고 있습니다. 이런 경우 모듈의 이름을 명시하지 않고 함수명만을 사용해 모듈에 있는 기능을 사용하고자 한다면, 똑같은 이름의 함수 중 어떤 것을 불러와야하는지 혼란이 생깁니다. 

    이런 문제를 방지하고자 각각의 모듈은 고유한 네임스페이스를 가지고, 해당 모듈의 이름을 먼저 명시하고 기능을 호출해야만 하는 것입니다.

    정리 73) 네임스페이스 : 서로 다른 이름의 모듈에 존재하는 같은 이름의 기능을 사용할 때 발생하는 혼란을 막기위해 각각의 모듈을 고유한 네임스페이스를 가집니다.

    하지만, 이런 중요한 이유가 있다고 하더라도 매번 어떤 모듈이 가지고 있는 기능을 사용할 때마다 모듈의 이름을 명시한다면, 아주 귀찮은 작업이 될 것입니다. 그래서 다음과 같은 방법들을 사용하여 위와 같은 번거로움을 줄일 수 있습니다.

    먼저 프로그래머가 자주쓰는 특정 모듈의 특정 기능만을 기본 네임스페이스로 불러오는 방법입니다.


    위와 같이 from 문을 이용하여 모듈명을 명시하고 import 문을 이용하여 기본 네임스페이스로 불러올 기능명을 명시하는 것입니다. 위의 예제에서는 'haerakai'라는 모듈의 shout()함수 만을 기본 네임스페이스로 불러왔습니다. 그 결과로 shout()함수는 모듈명을 표기하지 않고도 사용할 수 있습니다. 

    반면에 기본 네임스페이스로 불러오지 않은 Haerakai 클래스를 shout()함수와 같이 모듈명을 표기하지 않고 사용하려고 하면, Haerakai 는 정의되지 않았다는 내용을 담은 에러가 발생합니다.

    정리 74) from haerakai import shout : 'from 모듈명 import 기능명'과 같은 명령어를 이용하여 자주 쓰이는 특정 모듈의 특정 기능을 기본 네임스페이스로 불러올 수 있습니다.

    마지막으로 "나는 해당 모듈의 모든 기능을 편하게 사용하고 싶다!"와 같은 경우입니다. 이러한 경우에는 다음과 같이 모듈의 모든 기능을 기본 네임스페이스로 불러오면 됩니다.


    방법은 간단합니다. 위와 같이 import 문에 모든 것을 포함한다는 의미를 가진 와일드카드인 '*'를 입력하면, 해당 모듈 내에서 정의된 모든 기능들을 기본 네임스페이스로 불러옵니다. 앞의 예제와 다르게 minsu라는 Haerakai 클래스가 생성된 것을 확인할 수 있습니다.

    정리 75) from haerakai import * : 특정 모듈에 정의된 모든 기능들을 기본 네임스페이스로 불러올 수 있습니다.

    정리모음

    정리 70) 모듈 : 모듈은 그 자체로 기능을 가지고 있는 하나의 프로그램이며, 파일 형태로 저장되어 있습니다.
    정리 71) import haerakai : 'import 모듈명'과 같은 형태의 명령어로 모듈을 불러옵니다.
    정리 72) import haerakai as hk : as 문을 이용하여 모듈을 다른 이름으로 불러올 수 있습니다.
    정리 73) 네임스페이스 : 서로 다른 이름의 모듈에 존재하는 같은 이름의 기능을 사용할 때 발생하는 혼란을 막기위해 각각의 모듈을 고유한 네임스페이스를 가집니다.
    정리 74) from haerakai import shout : 'from 모듈명 import 기능명'과 같은 명령어를 이용하여 자주 쓰이는 특정 모듈의 특정 기능을 기본 네임스페이스로 불러올 수 있습니다.
    정리 75) from haerakai import * : 특정 모듈에 정의된 모든 기능들을 기본 네임스페이스로 불러올 수 있습니다.

    참고 URL 및 도서

    - 파이썬 완벽 가이드, 데이비드 M. 비즐리 저, 2012년, 인사이트 펴냄


    'Python > study' 카테고리의 다른 글

    파이썬의 예외처리  (0) 2013.12.18
    파이썬의 객체와 클래스  (0) 2013.12.18
    파이썬의 코루틴  (2) 2013.12.18
    파이썬의 제네레이터(추가)  (0) 2013.12.18
    파이썬의 제네레이터와 이더레이터  (8) 2013.12.18
    파이썬의 함수  (0) 2013.12.18
    파이썬의 반복문  (0) 2013.12.18
    파이썬의 파일 입출력  (0) 2013.12.18
    파이썬의 조건문  (0) 2013.12.18
    파이썬의 자료형 - 사전  (0) 2013.12.18
Designed by Tistory.