λͺ¨λ“ˆ

soo-hyeonΒ·2021λ…„ 2μ›” 4일
0

파이썬

λͺ©λ‘ 보기
14/15

λͺ¨λ“ˆμ΄λž€?

πŸ”‘ λͺ¨λ“ˆμ΄λž€ ν•¨μˆ˜λ‚˜ λ³€μˆ˜ λ˜λŠ” 클래슀λ₯Ό λͺ¨μ•„ 놓은 νŒŒμΌμ΄λ‹€. λͺ¨λ“ˆμ€ λ‹€λ₯Έ 파이썬 ν”„λ‘œκ·Έλž¨μ—μ„œ λΆˆλŸ¬μ™€ μ‚¬μš©ν•  수 μžˆκ²Œλ” λ§Œλ“  파이썬 νŒŒμΌμ΄λΌκ³ λ„ ν•  수 μžˆλ‹€. μš°λ¦¬λŠ” 파이썬으둜 ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ ꡉμž₯히 λ§Žμ€ λͺ¨λ“ˆμ„ μ‚¬μš©ν•œλ‹€. λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 이미 λ§Œλ“€μ–΄ 놓은 λͺ¨λ“ˆμ„ μ‚¬μš©ν•  μˆ˜λ„ 있고 μš°λ¦¬κ°€ 직접 λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” λͺ¨λ“ˆμ„ μ–΄λ–»κ²Œ λ§Œλ“€κ³  μ‚¬μš©ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ² λ‹€.

λͺ¨λ“ˆ λ§Œλ“€κΈ°

🎈 λͺ¨λ“ˆμ— λŒ€ν•΄ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κΈ° 전에 κ°„λ‹¨ν•œ λͺ¨λ“ˆμ„ ν•œλ²ˆ λ§Œλ“€μ–΄ 보자.

# mod1.py
def add(a, b):
    return a + b

def sub(a, b): 
    return a-b

μœ„μ™€ 같이 add와 sub ν•¨μˆ˜λ§Œ μžˆλŠ” 파일 mod1.pyλ₯Ό λ§Œλ“€κ³  C:\doit 디렉터리에 μ €μž₯ν•˜μž. 이 mod1.py 파일이 λ°”λ‘œ λͺ¨λ“ˆμ΄λ‹€. μ§€κΈˆκΉŒμ§€ μ—λ””ν„°λ‘œ λ§Œλ“€μ–΄ 온 파일과 λ‹€λ₯΄μ§€ μ•Šλ‹€.

⭐ 파이썬 ν™•μž₯자 .py둜 λ§Œλ“  파이썬 νŒŒμΌμ€ λͺ¨λ‘ λͺ¨λ“ˆμ΄λ‹€. ⭐

λͺ¨λ“ˆ 뢈러였기

import mod1

print(mod1.add(3, 4))
print(mode1.sub(4, 2))

mod1.pyλ₯Ό 뢈러였기 μœ„ν•΄ import mod1이라고 μž…λ ₯ν•˜μ˜€λ‹€. μ‹€μˆ˜λ‘œ import mod1.py둜 μž…λ ₯ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•˜μž. importλŠ” 이미 λ§Œλ“€μ–΄ 놓은 파이썬 λͺ¨λ“ˆμ„ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” λͺ…령어이닀. mod1.py νŒŒμΌμ— μžˆλŠ” add ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μœ„ μ˜ˆμ™€ 같이 mod1.add처럼 λͺ¨λ“ˆ 이름 뒀에 "."(λ„νŠΈ μ—°μ‚°μž)λ₯Ό 뢙이고 ν•¨μˆ˜ 이름을 μ“°λ©΄ λœλ‹€.

β€» importλŠ” ν˜„μž¬ 디렉터리에 μžˆλŠ” νŒŒμΌμ΄λ‚˜ 파이썬 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ €μž₯된 디렉터리에 μžˆλŠ” λͺ¨λ“ˆλ§Œ 뢈러올 수 μžˆλ‹€. 파이썬 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” νŒŒμ΄μ¬μ„ μ„€μΉ˜ν•  λ•Œ μžλ™μœΌλ‘œ μ„€μΉ˜λ˜λŠ” 파이썬 λͺ¨λ“ˆμ„ λ§ν•œλ‹€.

πŸ“Œ import의 μ‚¬μš© 방법은 λ‹€μŒκ³Ό κ°™λ‹€.

import λͺ¨λ“ˆμ΄λ¦„

μ—¬κΈ°μ—μ„œ λͺ¨λ“ˆ 이름은 mod1.pyμ—μ„œ .py ν™•μž₯자λ₯Ό μ œκ±°ν•œ mod1λ§Œμ„ 가리킨닀.

λ•Œλ‘œλŠ” mod1.add, mod1.sub처럼 μ“°μ§€ μ•Šκ³  add, sub처럼 λͺ¨λ“ˆ 이름 없이 ν•¨μˆ˜ μ΄λ¦„λ§Œ μ“°κ³  싢은 κ²½μš°λ„ μžˆμ„ 것이닀. 이럴 λ•ŒλŠ” "from λͺ¨λ“ˆ 이름 import λͺ¨λ“ˆ ν•¨μˆ˜"λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

πŸ”₯ from λͺ¨λ“ˆμ΄λ¦„ import λͺ¨λ“ˆν•¨μˆ˜

μœ„ ν˜•μ‹μ„ μ‚¬μš©ν•˜λ©΄ μœ„μ™€ 같이 λͺ¨λ“ˆ 이름을 뢙이지 μ•Šκ³  λ°”λ‘œ ν•΄λ‹Ή λͺ¨λ“ˆμ˜ ν•¨μˆ˜λ₯Ό μ“Έ 수 μžˆλ‹€.

from mod1 import add
add(3, 4)

그런데 μœ„μ™€ 같이 ν•˜λ©΄ mod1.py 파일의 add ν•¨μˆ˜λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€. add ν•¨μˆ˜μ™€ sub ν•¨μˆ˜λ₯Ό λ‘˜ λ‹€ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?

2κ°€μ§€ 방법이 μžˆλ‹€.

from mod1 import add, sub

πŸ“ 첫 번째 방법은 μœ„μ™€ 같이 from λͺ¨λ“ˆ 이름 import λͺ¨λ“ˆ ν•¨μˆ˜1, λͺ¨λ“ˆ ν•¨μˆ˜2처럼 μ‚¬μš©ν•˜λŠ” 것이닀. 콀마둜 κ΅¬λΆ„ν•˜μ—¬ ν•„μš”ν•œ ν•¨μˆ˜λ₯Ό 뢈러올 수 μžˆλ‹€.

from mod1 import *

πŸ“πŸ“ 두 번째 방법은 μœ„μ™€ 같이 * 문자λ₯Ό μ‚¬μš©ν•˜λŠ” 방법이닀.

from mod1 import *λŠ” mod1.py의 λͺ¨λ“  ν•¨μˆ˜λ₯Ό λΆˆλŸ¬μ„œ μ‚¬μš©ν•˜κ² λ‹€λŠ” λœ»μ΄λ‹€.

if__name__ == "__main__": 의 의미

mod1.py νŒŒμΌμ„ λ‹€μŒκ³Ό 같이 λ³€κ²½ν–ˆλ‹€.

# mod1.py 
def add(a, b): 
    return a+b

def sub(a, b): 
    return a-b

print(add(1, 4))
print(sub(4, 2))

λ‹€μŒκ³Ό 같이 λ³€κ²½λœ mod1.py νŒŒμΌμ„ μ•„λž˜μ™€ 같이 μ‹€ν–‰μ‹œμΌœλ³΄λ©΄

import mod1

5와 2κ°€ 좜λ ₯으둜 λ‚˜μ˜€κ²Œ 될 것이닀.

ν•˜μ§€λ§Œ 단지 mod1.py 파일의 add와 sub ν•¨μˆ˜λ§Œ μ‚¬μš©ν•˜κΈΈ μ›ν–ˆλ‹€λ©΄
λ‹€μŒκ³Ό 같은 좜λ ₯은 λ°˜κ°‘μ§€ μ•Šμ„ 것이닀. κ·ΈλŸ¬λ―€λ‘œ μ΄λŸ¬ν•œ 문제λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” mod1.py νŒŒμΌμ„ λ‹€μŒκ³Ό 같이 λ³€κ²½ν•΄μ•Ό ν•œλ‹€.

# mod1.py 
def add(a, b): 
    return a+b

def sub(a, b): 
    return a-b

if __name__ == "__main__":
    print(add(1, 4))
    print(sub(4, 2))

λ‹€μŒκ³Ό 같이 λ³€κ²½ν•  경우 mod1.py 파일 λ‚΄μ—μ„œ μ‹€ν–‰ν•˜λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄

import mod1

λ‹€μŒκ³Ό 같은 μ½”λ“œμ—μ„œ 아무 좜λ ₯값도 λ‚˜μ˜€μ§€ μ•Šκ²Œ 될 것이닀.

즉 if__name__ == "__main__"λ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€ν™”ν˜• μΈν„°ν”„λ¦¬ν„°λ‚˜ λ‹€λ₯Έ νŒŒμΌμ—μ„œ 이 λͺ¨λ“ˆμ„ λΆˆλŸ¬μ„œ μ‚¬μš©ν•  λ•ŒλŠ” if__name__ == "__main__"이 거짓이 λ˜μ–΄ ifλ¬Έ λ‹€μŒ λ¬Έμž₯이 μˆ˜ν–‰λ˜μ§€ μ•Šκ²Œλœλ‹€.

❓ __name__ λ³€μˆ˜λž€?

파이썬의 name λ³€μˆ˜λŠ” 파이썬이 λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” νŠΉλ³„ν•œ λ³€μˆ˜ 이름이닀. λ§Œμ•½ C:\doit>python mod1.py처럼 직접 mod1.py νŒŒμΌμ„ μ‹€ν–‰ν•  경우 mod1.py의 name λ³€μˆ˜μ—λŠ” main 값이 μ €μž₯λœλ‹€. ν•˜μ§€λ§Œ 파이썬 μ…Έμ΄λ‚˜ λ‹€λ₯Έ 파이썬 λͺ¨λ“ˆμ—μ„œ mod1을 import ν•  κ²½μš°μ—λŠ” mod1.py의 name λ³€μˆ˜μ—λŠ” mod1.py의 λͺ¨λ“ˆ 이름 κ°’ mod1이 μ €μž₯λœλ‹€.

ν΄λž˜μŠ€λ‚˜ λ³€μˆ˜ 등을 ν¬ν•¨ν•œ λͺ¨λ“ˆ

πŸ”‘ μ§€κΈˆκΉŒμ§€ μ‚΄νŽ΄λ³Έ λͺ¨λ“ˆμ€ ν•¨μˆ˜λ§Œ ν¬ν•¨ν–ˆμ§€λ§Œ ν΄λž˜μŠ€λ‚˜ λ³€μˆ˜ 등을 포함할 μˆ˜λ„ μžˆλ‹€. λ‹€μŒ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄ 보자.

# mod2.py 
PI = 3.141592

class Math: 
    def solv(self, r): 
        return PI * (r ** 2) 

def add(a, b): 
    return a+b 

이 νŒŒμΌμ€ μ›μ˜ 넓이λ₯Ό κ³„μ‚°ν•˜λŠ” Math ν΄λž˜μŠ€μ™€ 두 값을 λ”ν•˜λŠ” add ν•¨μˆ˜ 그리고 μ›μ£Όμœ¨ 값에 ν•΄λ‹Ήλ˜λŠ” PI λ³€μˆ˜μ²˜λŸΌ 클래슀, ν•¨μˆ˜, λ³€μˆ˜ 등을 λͺ¨λ‘ ν¬ν•¨ν•˜κ³  μžˆλ‹€.

이럴 경우 λ‹€μŒκ³Ό 같이 λͺ¨λ“ˆμ„ λΆˆλŸ¬μ™€ λͺ¨λ“ˆ μ•ˆμ— μžˆλŠ” λ³€μˆ˜λ‚˜ ν•¨μˆ˜, 클래슀 등을 μ‚¬μš©ν•  수 μžˆλ‹€.

import mod2

a = mod2.Math()
print(a.solv(2))

b = mod2.add(mod2.PI, 4)
print(b)

0개의 λŒ“κΈ€