세로형
Recent Posts
Recent Comments
Link
04-20 00:01
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

파이썬 모듈(import) 다루기(__name__ 의미 및 클래스, 함수 import) 본문

python

파이썬 모듈(import) 다루기(__name__ 의미 및 클래스, 함수 import)

이수진의 블로그 2017. 11. 22. 10:30

파이썬에서는 모듈을 다룰 수 있습니다

본인이 직접 만들 수도 있구요, 다른 사람이 만든 것을 가지고 올 수도 있습니다

import라는 것을 써서 말이죠

모듈로 관리하게 되면 기능을 나누어서 관리할 수 있습니다

그래서 관리도 용이하고 사용하기도 편하죠

만약 내가 현재 A 라는 기능을 쓰고 있는데 '아 언젠가는 다시 쓸 것 같은데?' 라고 생각해서 파일을 만들었습니다

그리고 B라는 작업을 하는데 이때 A라는 작업이 필요하게 되었어요

근데 B라는 파일에 다시 A의 기능을 코딩을 한다?

물론 해도 좋지만 귀찮고, 시간 낭비에 좀 비효율적이죠

A라는 파일이 이미 있는데 굳이 만들 필요가 없죠

이럴때 import를 이용해서 모듈을 가지고 옵니다

 

저는 이 모듈 실습을 위해 총 4개의 파일을 준비했어요

 

빨간색 선을 기준으로 왼쪽이 메인, 오른쪽이 모듈이라고 생각하시면 됩니다.

각 파일은 아래와 같은 내용이 적혀있습니다

 

 

2번 파일은 sum 함수가 들어있어요

이 기능은 a 라는 타입이 int가 아니면 더할 수 없다고 나오고요

int면 둘 값을 더해서 return 해줍니다.

 

 

3번 파일은 __name__ == "__main__" 이라는 기능을 소개하는 파일이에요

이것에 대한 설명은 밑에서 할게요

일단은 3번 파일은 이런 내용이라는 것입니다.

 

 

4번 파일은 클래스가 있어요

Math라는 클래스와 그 밑에 sum이라는 함수가 있네요

그리고 클래스에 속하지 않는 mul이라는 함수도 있어요

자 이제 모듈을 공부해보죠

 

 

1번 파일 기준에서 import하며 사용합니다.

먼저 2번 파일을 import해보죠!

 

자 이렇게 import하면 2번 파일의 기능을 쓸 수 있습니다

근데 1번의 매개변수가 숫자가 아니네요?

그래서 결과는 더할 수 없다고 나옵니다.

이렇게 사용할 수 있어요

근데 이게 좀 귀찮죠?

파일명.기능  으로 접근을 해야하는데요

파일명이 길면 정말 난처합니다

그래서 from ~ import 절을 쓸 수 있어요

 

from 2번파일에서 import *(모든 것) 처럼 사용하면 그냥 sum()과 같이 사용할 수 있습니다

만약 sum 함수만 가지고 오고 싶으면 from 2번 파일 import sum 을 하면 됩니다!

 

 

이렇게 결과가 나오네요!

 

이제 3번 파일을 불러오죠

3번 파일은 __name__을 테스트 하는 파일입니다.

__name__은 현재 모듈의 이름을 담고 있는 내장 변수입니다.

즉 __name__이 있는 파일이 AAA.py 이면 __name__ 변수에는 __main__이라는 값이 들어가 있는것이죠

하지만 이 파일을 외부에서 실행한다면?

__name__은 다른 값이 들어갑니다.

즉 __name__이 있는 파일 AAA가 들어가게 되죠

 

한마디로 어디서 이 모듈을 실행했느냐에 따라 __name__에 들어가는 값이 달라집니다

그래서 외부에서 실행했을 때, 내부에서 실행했을 때를 나누어서 처리할 때 사용할 수 있죠

한번 봐볼까요

 

먼저 3번 파일을 직접 실행해보죠

 

이렇게 나옵니다.

본인이 직접 실행했으니 __name__ 변수에는 __main__ 값이 들어갑니다

그리고 외부에서 실행해볼까요

 

 

외부에서 실행해보니 이 3번 파일 이름인 Study_11_15_3이 나오고 있습니다.

__name__은 이런 값을 담을 수 있습니다

 

이제 4번 파일을 불러와보죠

4번 파일은 클래스가 있습니다.

클래스는 객체로 만들어야하죠?

 

 

Math라는 클래스를 참조하는 a 객체를 생성했습니다.

즉 a는 Math의 인스턴스이죠

그래서 a.sum( )으로 클래스 내부의 함수로 접근할 수 있습니다.

객체지향 및 클래스에 대한 것이 이해가 안가시면 이쪽을 공부 더 하고오세요!

또한, 클래스에 속하지 않은 mul이라는 함수는 그냥 호출 할 수 있습니다

클래스에 속하지 않고 그냥 파일에 있으니까요 ㅎㅎ

여기까지 공부 마치겠습니다

반응형
그리드형
Comments