[8]¿¡¼ °è¼Ó
3. package(ÆÐŰÁö)
package´Â
µð·ºÅ丮´Ù. µð·ºÅ丮 À̸§ÀÌ´Ù. ¿¹¸¦ µé¾î µµ·Î¼³°è ÆÐŰÁö¸¦ ¸¸µç´Ù°í ÇÏÀÚ. µµ·Î ¾È¿¡´Â Åä°ø±¸°£, ±³·®±¸°£, Åͳα¸°£ÀÌ ÀÖÀ» °ÍÀÌ´Ù. ±×·¯¸é
µµ·Î¼³°è ÆÐŰÁöÀÇ À̸§À» roaddesignÀ̶ó°í ÇÏ°í ±× ¾È¿¡ µµ·Î¼±Çü°ü·ÃÀº road.py Åä°øÀº earth.py, ±³·®Àº
bridge.py, ÅͳÎÀº tunnel.py¶ó´Â À̸§À¸·Î °¢°¢ ÆÐŰÁö¸¦ ¸¸µé¾ú´Ù°í ÇÏÀÚ. ÀÌ·¸°Ô package·Î ¸¸µå´Â ÀÌÀ¯´Â ´Ù¸¥»ç¶÷°ú
°øÀ¯Çϱ⠽±´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. µð·ºÅ丮 Àüü¸¦ Àü´ÞÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù.
µµ·Î¼³°è
ÆÐŰÁö µð·ºÅ丮´Â ¾Æ·¡¿Í °°ÀÌ ±¸¼ºµÉ °ÍÀÌ´Ù.
roaddesign
road.py
earth.py
bridge.py
tunnel.py
|
°¢°¢ÀÇ
¸ðµâµéÀÇ ³»¿ëÀº ¾Æ·¡¿Í °°´Ù. road.py¿¡´Â ¼±Çü°ü·Ã ÇÔ¼ö align()°¡, earth.py¿¡´Â ÀýÅä¿¡ °ü·ÃµÈ ÇÔ¼ö cutting()ÀÌ,
bridge.py¿¡´Â °Å´õ¿¡ °ü·ÃµÈ ÇÔ¼ö girder()°¡, tunnel.py¿¡´Â Á¦Æ®ÆÒ¿¡ °ü·ÃµÈ ÇÔ¼ö jetpan()ÇÔ¼ö¸¦ Á¤ÀÇÇß´Ù. °¢ÀÚ ¾Æ¹«
µð·ºÅ丮¿¡ ¸¸µé¾îº¸ÀÚ. ³ªÁß¿¡ ÀÌ µð·ºÅ丮´Â ¿øÇÏ´Â ÇÁ·ÎÁ§Æ® ¾Æ·¡·Î º¹»çÇÏ´Â °Íµµ ½Ç½ÀÇØ º¼ °ÍÀÌ´Ù.
print("Road design")
def align():
print("Road design align function")
|
print("Earth work")
def cutting():
print("Earth work cutting function")
|
print("Bridge work")
def girder():
print("Bridge work girder function")
|
print("Tunnel Work")
def jetpan():
print("Tunnel Work jetpan function")
|
°¢°¢ÀÇ
¸ðµâµéÀÇ Ã¹¹øÂ° ÁÙÀº importµÇ¸é¼ ¹Ù·Î ½ÇÇàµÈ´Ù. importµÇ¾ú´Ù´Â °ÍÀ» Ç¥½ÃÇØÁÙ °ÍÀÌ´Ù.
ÀÌ
roaddesign ÆÐŰÁö´Â ³»°¡ ¾²·Á°í ¸¸µé¾úÁö¸¸ À̰ÍÀ» ´Ù¸¥ »ç¶÷µéµµ ¾µ ¶§¸¦ ´ëºñÇØ¼ º°µµÀÇ ÆÐŰÁö·Î ¸¸µç °ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ ÆÐŰÁö(µð·ºÅ丮)¸¦
ºÒ·¯¿Í(importÇØ¼) ½áº¸ÀÚ.
³»°¡
ÀÛ¾÷ÇÏ´Â Æú´õ°¡ d:\myproject\¶ó°í ÇÏÀÚ. ÀÌÀü¿¡ ¸¸µé¾ú´ø roaddesignµð·ºÅ丮¸¦ myproject¿¡ º¹»ç(¶Ç´Â ¸¸µé°í)Çϰí
myproject µð·ºÅ丮·Î À̵¿Çؼ pythonÀ» ½ÇÇàÇÑ´Ù.
(base) D:\>cd myproject
(base) D:\myproject>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
>>>
|
ÀÌÁ¦
roaddesign ÆÐŰÁö¸¦ importÇÒ °ÍÀÌ´Ù. ÀÌÀü¿¡ ¼³¸íÇßµíÀÌ fromÀ» ÀÌ¿ëÇÑ´Ù.
>>> from roaddesign import road, earth,
bridge, tunnel
Road design
Earth work
Bridge work
Tunnel Work
|
importµÇ¸é¼
½ÇÇàµÈ print¹® ´öºÐ¿¡ ³×°³ÀÇ ¸ðµâÀÌ ¸ðµÎ ¼º°øÀûÀ¸·Î importµÈ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌÁ¦ °¢ ¸ðµâ¿¡ ÀÖ´Â ÇÔ¼öµéÀ» ½áº¸ÀÚ.
road.py¸ðµâ¿¡´Â align()À̶ó´Â ÇÔ¼ö°¡ ÀÖ¾ú´Ù. align()ÇÔ¼ö¸¦ ¾²±âÀ§Çؼ ¸ðµâ¸íÀ» ¸í½ÃÇØÁà¾ß ÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ´Ù¸¥ ¸ðµâÀÇ
ÇÔ¼öµéµµ ¸¶Âù°¡Áö´Ù.
>>> road.align()
Road design align function
>>>
bridge.girder()
Bridge work girder function
|
±×·±µ¥
¿Ö? from roaddesign import *¸¦ ¾²Áö ¾Ê°í ³×°³ÀÇ ¸ðµâ¸íÀ» ´Ù ½áÁáÀ»±î? *°¡ ¸ðµç °ÍÀ» ÀǹÌÇÏ´Â °ÍÀ̶ó°í Çß´Ù¸é *¸¦ ¾²´Â
°ÍÀÌ ÆíÇÏÁö ¾ÊÀ»±î? ½ÃµµÇغ¸ÀÚ. exit()À¸·Î ÆÄÀ̽ã ÀÎÅÍÇÁ¸®Å͸¦ ºüÁ® ³ª¿Ô´Ù°¡ ´Ù½Ã ÆÄÀ̽ã ÀÎÅÍÇÁ¸®ÅÍ·Î µé¾î°£ ´ÙÀ½¿¡ *·Î importÇØº¸ÀÚ.
>>> from roaddesign import *
|
¾Æ¹«
Àϵµ ¾È ¹ú¾îÁø´Ù. °¢ ¸ðµâÀÌ importµÉ ¶§ ¸Þ½Ã°¡ Ãâ·ÂµÇ¾î¾ß Çϴµ¥ ¾Æ¹«°Íµµ ¾Èº¸ÀδÙ. ±×·¸´Ù¸é road.py¸ðµâÀÇ align()ÇÔ¼ö¸¦ ºÒ·¯¿Íº¸ÀÚ.
road°¡ Á¤ÀǵǾîÀÖÁö ¾Ê´Ù´Â °ÍÀÌ´Ù.
>>> road.align()
Traceback (most recent call last):
File "", line 1, in
NameError: name 'road' is not defined
|
¿ª½Ã
import¿¡ ½ÇÆÐÇÑ °ÍÀÌ´Ù. from roaddesign import * ÇßÀ» ¶§ ¾Æ¹«·± ¿¡·¯ ¸Þ½ÃÁö°¡ º¸ÀÌÁö ¾Ê¾Ò´Ù¸é import¿¡ ¼º°øÇÑ
°Í ¾Æ´Ï¾ú³ª? import°¡ ¾ÈµÈ °ÍÀÇ ºñ¹ÐÀº *¿¡ ÀÖ´Ù. ÆÐŰÁö(µð·ºÅ丮)¿¡ ´ëÇØ¼ *°¡ »ç¿ëµÉ ¶§ ºÒ·¯¿Ã ¸ðµâµé(pyÆÄÀϵé)ÀÇ ¸ñ·ÏÀº µû·Î
Á¤ÇØÁà¾ß ÇÑ´Ù. ¾ÕÀÇ ¿¹¿¡¼´Â *¿¡ ´ëÇÑ ¸ñ·ÏÀ» Á¤ÇØÁÖÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¾Æ¹« ¸ðµâµéµµ ºÒ·¯¿ÀÁö ¾ÊÀº °ÍÀÌ´Ù. ÆÐŰÁö¿¡ ´ëÇØ *¿¡ ´ëÇÑ ¸ñ·ÏÀº ÆÐŰÁö
µð·ºÅ丮¿¡ __init__.pyÆÄÀÏ¿¡ ½áÁØ´Ù. __init__.py ÀÌ ÆÄÀÏÀº ÆÄÀÏ¸í¿¡¼µµ ´«Ä¡Ã§ ¼ö ÀÖµíÀÌ ÆÐŰÁö°¡ importµÉ ¶§ ¼öÇàÇÒ
¸í·ÉµéÀ» Á¤ÀÇÇØÁÖ´Â ÀÏÁ¾ÀÇ ¼³Á¤ÆÄÀÏÀÌ´Ù. ÆÄÀ̽㿡¼ __·Î ½ÃÀÛÇϰí __·Î ³¡³ª´Â ÆÄÀϵéÀº ¼³Á¤ÆÄÀÏÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. __init__.pyÆÄÀÏÀ»
¸¸µé¾îº¸ÀÚ.
<__init__.py>
__all__ = ['road', 'earth', 'bridge', 'tunnel']
|
ÀÌ
ÆÄÀÏÀ» roaddesignµð·ºÅ丮¿¡ ÀúÀåÇϸé roaddesign µð·ºÅ丮 ¾Æ·¡¿¡´Â ¾Æ·¡¿Í °°ÀÌ 5°³ÀÇ ÆÄÀÏÀÌ ÀÖ°Ô µÈ´Ù.
roaddesign
__init__.py
road.py
earth.py
bridge.py
tunnel.py
|
ÀÌÁ¦
exit()À¸·Î ÆÄÀ̽ã ÀÎÅÍÇÁ¸®Å͸¦ ºüÁ®³ª¿Ô´Ù°¡ ´Ù½Ã ÆÄÀ̽ã ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇàÇϰí *¸¦ ÀÌ¿ëÇØ¼ importÇØº¸ÀÚ. ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ °É º¸¸é Á¦´ë·Î
importµÇ¾ú´Ù. ÇÔ¼ö¸¦ ºÒ·¯¿Íº¸ÀÚ. Àß ½ÇÇàµÈ´Ù.
>>> from roaddesign import *
Road design
Earth work
Bridge work
Tunnel Work
>>>
road.align()
Road design align function
|
__init__.py
__init__.py¿¡
´ëÇØ¼ Á»´õ ¾Ë¾Æº¸ÀÚ. ÆÐŰÁö°¡ importµÉ ¶§ ÀÚµ¿À¸·Î ½ÇÇàµÇ´Â ÆÄÀÏÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ±×·¯¸é ÀÌ ÆÄÀÏ ¾È¿¡¼ ¸ðµâµéÀ» importÇϸé
µÇÁö ¾ÊÀ»±î?
<__init__.py>
from . import road
from . import earth
from . import bridge
from . import tunnel
|
__init__.py¾È¿¡
import¹®À» 4°³ ³Ö¾ú´Ù. from .ÀÇ .Àº ÇöÀç µð·ºÅ丮¶ó´Â ¶æÀÌ´Ù. ¾î¶² µð·ºÅ丮Àϱî? pythonÀÌ ½ÇÇàµÈ µð·ºÅ丮Àϱî? ¾Æ´Ï¸é
roaddesignµð·ºÅ丮Àϱî? ´ç¿¬È÷ __init__.pyÀÌ ÀÖ´Â µð·ºÅ丮´Ù. ÀÌ ³»¿ëÀº __init__.py¾È¿¡ ÀÖ´Â ³»¿ëÀ̶ó´Â °É ±â¾ïÇÏÀÚ.
Áï __init__.pyÀÌ ÀÖ´Â roaddesignµð·ºÅ丮¿¡¼ road.py, earth.py, bridge.py, tunnel.pyÀ» ºÒ·¯¿À¶ó´Â
¶æÀÌ´Ù. ÀÌ·¸°Ô __init__.pyÀÇ ³»¿ëÀ» ¹Ù²Ù°í ³ ´ÙÀ½¿¡ roaddesignÀ» ºÒ·¯¿Í º¸ÀÚ. ÆÄÀ̽ãÀ» ´Ù½Ã ½ÇÇàÇϰí roaddesignÀ»
importÇϸé Á¦´ë·Î importµÇ´Â °É È®ÀÎÇÒ ¼ö ÀÖ´Ù.
>>> import roaddesign
Road design
Earth work
Bridge work
Tunnel Work
|
ÀÌ·¸°Ô
importÇϸé ÇÔ¼ö´Â ¾î¶»°Ô »ç¿ëÇØ¾ß ÇÒ±î? road.align()Àº ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
>>> road.align()
Traceback (most recent call last):
File "", line 1, in
NameError: name 'road' is not defined
|
ÆÐŰÁö¸í±îÁö
½áÁà¾ß ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. roaddesignÀ̶ó´Â ÆÐŰÁö¾È¿¡¼ °¢ ¸ðµâµéÀ» importÇß´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ.
>>> roaddesign.road.align()
Road design align function
|
import as Ű¿öµå
ÆÄÀ̽ã
ÆÐŰÁö¸¦ ºÒ·¯¿Ã ¶§ º°¸íÀ» Á¤ÇØÁÙ ¼ö ÀÖ´Ù. as µÚ¿¡´Ù º°¸íÀ» ½áÁÖ¸é µÈ´Ù. roaddesignÀÇ º°¸íÀ» rd·Î ÇØº¸ÀÚ. roaddesign´ë½Å
rd¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. °£°áÇØÁö´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ÆÐŰÁö¸íÀº ÆÐŰÁöÀÇ ±â´ÉÀ» Àß ³ªÅ¸³¾ ¼ö ÀÖ°Ô Áþ´Ùº¸¸é Á» ±æ°Ô µÈ´Ù. ±×·¡¼ as¸¦ ÀÌ¿ëÇØ
º°¸íÀ¸·Î ¾²´Â °æ¿ì°¡ ¸¹´Ù. ¿¹¸¦ µé¾î µ¥ÀÌÅÍ Á¶ÀÛ ¹× ºÐ¼®¿¡ À¯¿ëÇÏ°Ô ¾²ÀÌ´Â pandas¶ó´Â ÆÐŰÁö´Â pd·Î ÁÙ¿©¼ ¾²°í, Çà·ÄÀ̳ª ¼öÄ¡¿¬»ê
±â´ÉÀ» °¡Áö°í ÀÖ´Â numpy´Â np·Î ÁÙ¿©¼ ¾´´Ù. ´Ù¸¥ ´Ü¾î·Î ÁÙ¿©¼ ½áµµ µÇÁö¸¸ º¸ÅëÀº ÀüÅë(?)À» µû¸¥´Ù.
>>> import roaddesign as rd
>>>
rd.road.align()
Road design align function
|
scope
ÀÌ
´ë¸ñ¿¡¼ ¾Ë°í ³Ñ¾î°¡¾ß ÇÒ °ÍÀÌ Çϳª ÀÖ´Ù. ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡µµ ÀÖ´Â °³³äÀε¥ scopeÀ̶ó´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î 1Çгâ 1¹Ý¿¡µµ È«±æµ¿ÀÌ
ÀÖ°í 1Çгâ2¹Ý¿¡µµ È«±æµ¿ÀÌ ÀÖ´Ù°í ÇÏÀÚ. ±×·¯¸é ±× µÑÀ» ±¸ºÐÇϱâ À§Çؼ ¿ì¸®´Â ¡®³Ê´Â 1Çгâ1¹ÝÈ«±æµ¿ÀÌ´Ï?¡¯¶ó°í ¹°¾îº¼ °ÍÀÌ´Ù. ÀÌ°Ô ¹Ù·Î
math.sin(1.0)ÀÇ °³³äÀÌ´Ù. ¾Õ¿¡ math°¡ 1Çгâ1¹ÝÀÇ °³³äÀ̰í sinÀÌ È«±æµ¿ÀÇ °³³äÀÌ´Ù. ´©±º°¡°¡ sinÀ̶ó´Â ÇÔ¼ö¸¦ Á¤ÀÇÇß´Ù°í
ÇÏÀÚ. ±×·±µ¥ ±×°Ô ¼öÇп¡¼ ¸»ÇÏ´Â sin°ªÀ» ±¸ÇÏ´Â °ÍÀº ¾Æ´Ï°í ´Ù¸¥ ÀÏÀ» ÇÏ´Â ÇÔ¼ö¿´´Ù. ±×¸®°í ±×°É ´Ù¸¥ »ç¶÷ÀÌ ¾µ ¼ö ÀÖµµ·Ï °øÀ¯Çß´Ù°í
ÇÏÀÚ. ¼öÇп¡¼ ¾²´Â sin°ú ´Ù¸¥ ÀÏÀ» ÇÏ´Â º°µµ·Î Á¤ÀÇµÈ ÇÔ¼öÀÎ sinÀ» ±¸ºÐÇϱâ À§Çؼ °¢°¢ sinÀ» Á¤ÀÇÇÑ ¸ðµâÀ̳ª ÆÐŰÁöÀÇ À̸§À» ¾Õ¿¡
½áÁØ´Ù.
¸ðµâ°ú
ÆÐŰÁö´Â ÆÄÀ̽ãÀÇ °·ÂÇÑ ±â´ÉÀ» ¹ÞÃÄÁÖ´Â Áß¿äÇÑ ±â´ÉÀÌ´Ù. ´ÙÀ½ ½Ã°£¿¡´Â °ø°³µÈ ¸ðµâÀ̳ª ÆÐŰÁö¸¦ ³» ÄÄÇ»ÅÍ¿¡ ¼³Ä¡ÇÏ°í »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸°Ú´Ù.
|