์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
TIOBE ์ ์ ์ฌํด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด | ||||
2006๋
Ruby | โ | 2007๋
Python | โ | 2008๋
C |
2009๋
Go | โ | 2010๋
Python | โ | 2011๋
Objective-C |
2017๋
C | โ | 2018๋
Python | โ | 2019๋
C |
2019๋
C | โ | 2020๋
Python | โ | ์์ |
ํ์ด์ฌ Python | |
๊ฐ๋ฐ | ํ์ด์ฌ ์ํํธ์จ์ด ์ฌ๋จ (PSF) |
๋ฒ์ | 3.9.2 2021๋ 2์ 19์ผ ์ ๋ฐ์ดํธ |
์น์ฌ์ดํธ | |
1. ๊ฐ์2. ํน์ง3. ์ฅ์
3.1. ๋์ ์์ฐ์ฑ3.2. ๋ฌธ๋ฒ ํต์ผ์ ๋ฐ๋ฅธ ๋น ๋ฅธ ํผ๋๋ฐฑ3.3. ๊ณผํ/๊ณตํ ์นํ3.4. ๋ง๋ฅ ์ธ์ด3.5. ๊ต์ก
4. ๋ฌธ์ ์ 4.1. ๋ฉํฐ์ค๋ ๋ฉ ๋ถ๊ฐ ๋ฌธ์
5. ๋ค์ํ python ๊ตฌํ์ฒด ์ข
๋ฅ4.1.1. ๋ฉํฐ์ฝ์ด๋ก ํ๋ก๊ทธ๋จ ๋๋ฆฌ๊ธฐ
4.2. ๋์กํ ํจํค์ง ๊ด๋ฆฌ ๋ฐ ํ์ ํธํ ์๋ฌ5.1. Stackless Python5.2. C ์ธ์ด ํ์ฅ, Cython5.3. C++ ๊ตฌํ, Pyston (ํ๋ก์ ํธ ์ค๋จ)5.4. Python ๊ตฌํ, PyPy5.5. Java ๊ตฌํ, Jython5.6. .NET Framework ๊ตฌํ, IronPython5.7. JavaScript ๊ตฌํ, Brython
6. ์ํ๊ณ5.7.1. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ transcrypt
5.8. Micro Python6.1. ๊ฐ๋ฐ ํ๊ฒฝ
7. ๊ด๋ จ ํ8. ๋ฌธ๋ฒ9. ๋์10. ์ฌ๋ด6.1.1. ํ
์คํธ ์๋ํฐ6.1.2. ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE)6.1.3. Notebook6.1.4. ํจํค์ง ๊ด๋ฆฌ6.1.5. ์ฝ๋ ๊ฒ์ฌ
6.2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ6.2.1. ์ํ6.2.2. ๋ฐ์ดํฐ6.2.3. ๊ทธ๋ํ (์ฐจํธ) ๊ทธ๋ฆฌ๊ธฐ6.2.4. ๋จธ์ ๋ฌ๋6.2.5. GUI ํ๋ก๊ทธ๋๋ฐ
6.3. ํ๋ ์์ํฌ1. ๊ฐ์[ํธ์ง]
# 1
print("Hello, world!")
# 2
import __hello__
# ๋์ค ํ๋๋ฅผ ์ ํํด์ ์ฌ์ฉ์์ ๋ฌธ๋ฒ์ ํ์ด์ฌ 3 ๊ธฐ์ค์ด๋ค. ํ์ด์ฌ 2์์๋ print "Hello, world!"๋ง ํด๋ ์ถฉ๋ถํ๋ค.
- Bruce Eckel
1991๋
์ ๋ฐํ๋, MATLAB๊ณผ ์ ์ฌํ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด. ๊ณต์ ํํ์ด์ง ๊ณต์ ๊นํ ์ ์ฅ์
์ต์ ๋ฒ์ ์ 2020๋ 12์ 07์ผ์ ๋์จ 3.9.1 ๋ฒ์ ์ด๋ฉฐ 0.1๋ฒ์ ๋ง๋ค for๋ฌธ ๋ฑ์ ๋ฃจํ์์ ์ฐ์ฐ ํจ์จ์ด ์ฝ 2๋ฐฐ ๋นจ๋ผ์ง๋ ๊ฐ์ ์ด ์กด์ฌํ๋ฏ๋ก, ์ต์ ๋ฒ์ ์ด 3๊ฐ์ ์ด์ ์ง๋ ์์ ํ๊ฐ ๋ ํ์๋ ๊ท์ฐฎ๋๋ผ๋ ๋ฒ์ ์ ๋ฐ๋์ ์ ๋ฐ์ดํธ ํ๊ธฐ๋ฅผ ์ถ์ฒํ๋ค.
์จ๋ผ์ธ ์์ผ๋ก ์ฝ๋๋ฅผ ์คํ์์ผ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ก.[2]
์ฐฝ์์๋ ๊ท๋ ๋ฐ ๋ก์ฌ(Guido van Rossum). 1989๋ ํฌ๋ฆฌ์ค๋ง์ค ์ฃผ์, ์ฐ๊ตฌ์ค์ด ๋ซํ์์ด์ ์ฌ์ฌํ ๊น์ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋๋ด์ด ์๋๊ณ ๋ฐ ๋ก์ฌ์ ์ ๋ฝ์์๋ ์ ๋ค ์ค๋ฏธ์ค์ ๋น๊ตํ ์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ ๊ณ์ ๊ฒฝ์ ํ์๋ผ๋... ์ฌ์ฌํด์ ๋ง๋ค์๋ค๋ ๊ฒ์ ํ์ด์ฌ ์๋ฌธ๊ณผ ๋ง์ดํฌ๋ก์ํํธ์จ์ด์ ํ ์ธํฐ๋ทฐ๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ์ฌ์ค์ด๋ค. ๊ธฐ์ ์๋ค์ ๋๋ถ๋ถ ์ฌ์ฌํ ๋, ํน์ ์ค์๋ก ๊ฑธ์์ ๋ง๋ ๋ค. 2000๋ ์๋ Python 2, 2008๋ ์๋ Python 3๊ฐ ๋์๋ค.
์ด๋ฆ์ ๊ท๋๊ฐ ์ฆ๊ฒจ ๋ณด๋ ์๊ตญ์ 6์ธ์กฐ ์ฝ๋ฏธ๋ ๊ทธ๋ฃน ๋ชฌํฐ ํ์ด์ ์์ ๋ฐ์๋ค๊ณ ํ๋ค. ์ง๊ธ CPython์ ๊ณต์ GitHub ์ ์ฅ์๋ฅผ ๋ณด๋ฉด ํ์ ๋ณด์กฐ์ฉ ๋ด ์ด๋ฆ๋ค์ด the-knights-who-say-ni(๋๋ผ๊ณ ๋งํ๋ ๊ธฐ์ฌ)๋ bedevere(๋ฒ ๋๋น์ด) ๊ฐ์ด ์ฃ๋ค ๋ชฌํฐ ํ์ด์ ๊ณผ ์ฑ๋ฐฐ์ ๋ฐฐ์ญ๋ค์ด๋ค. ๋ง์ ํ์ด์ฌ ๊ต์ฌ๋ค์์ ๋ณ์ ์ด๋ฆ์ spam, eggs๋ก ์ง๋ ๋ฑ ๋๋ฆฝ์ ์น๋ค. ์ง์ ์ ๊ด๊ณ๋ ์์ง๋ง 42๋ ํ์์์. ๋ํ ์์ ํ๋ก๊ทธ๋จ ์ค ํ๋์ ์ด๋ฆ์ด ์์ด๋ค(Idle)์ธ๋ฐ, ํ์๋ฐฐ๊ฒฝ์ ์๊ฐํด ๋ณธ๋ค๋ฉด ๋ชฌํฐ ํ์ด์ ์ ๋ฉค๋ฒ ์๋ฆญ ์์ด๋ค(Eric Idle)์ ์ด๋ฆ์์ ์ ๋ํ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๋ฌผ๋ก ์ฌ์ ์ ์๋ฏธ๋ฅผ ์๊ฐ ์ ํ๋ ๊ฑด ์๋๋ผ์ ์ฌ๋ณผ๋งํฌ๊ฐ ๋ฑ ๋ชจ์์ด๋ค.
๋ฌธ๋ฒ์ด ๋งค์ฐ ์ฌ์์ ์ด๋ณด์๋ค์ด ์ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ ๋ ์ถ์ฒ๋๋ ์ธ์ด์ด๋ค. ์ค์ฃฝํ๋ฉด Python์ ๋ณ๋ช ์ด '์คํํ ์ ์๋ ์์ฌ ์ฝ๋(Executable pseudocode)'์ผ ์ ๋. ์ค์ ๋ก๋ ๋ฏธ๊ตญ ๊ณต๊ณผ ๋ํ๊ต์์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์์ ์ผ๋ก Python์ ๋ง์ด ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ํ์ต์ฉ์ผ๋ก ์ข์ ์ธ์ด์ธ ๋์์ ์ค์ฌ์ฉ๋ฅ ๊ณผ ์์ฐ์ฑ๋ ๋์ ๊ฐ๋ ฅํ ์ธ์ด์ธ ์ . ์ฆ ์ ๊ทผ์ฑ๊ณผ ์์ฉ๋ ฅ์ด ์ข๋ค๋ ๊ฒ ๊ต์ฅํ ์ค์ํ๋ค.๋ฐฐ์ฐ๊ธฐ๋ ์ฝ๊ณ ์จ๋จน๊ธฐ๋ ์ฝ๊ณ Python์ ์ด๋ฐ ๋ ๋ง๋ฆฌ ํ ๋ผ๋ ๊ต์ก์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ BASIC์ด ๋งํ์ด์ ๋ฃจํธ๋ฅผ ํ๊ฒ ๋ ๊ฒฐ์ ์ ์ธ ์ด์ ์ด๋ค. Python์ BASIC๊ณผ ๋ฌ๋ฆฌ ํ๊ต์์ ๋ฐฐ์ฐ๊ณ ๋๋๋ ๊ฒ ์๋๋ผ ํ์
์์๋ ์์ฃผ ์ฐ์ด๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ด์ด ์๋๊ณ ํ์ด์ฌ์ด ๊ต์ก์ฉ ์ธ์ด๋ก ์๋ฆฌ์ก์ผ๋ฉด์ ๋ฒ ์ด์ง์ ๋ง์ดํฌ๋ก์ํํธ์ ์ํด ์ฐ์ํธํก๊ธฐ๋ฅผ ๋ฌ๊ณ ์ฐ๋ช
๋ง ํ๋ ์ ์ธ๊ฐ ๋๋ค. MS๊ฐ ์์ผ๋ฉด BASIC์...
2010๋ ํ๋ฐ๋์ ์ด๋ฅด๋ฌ์๋ ํ๋ถํ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์์ผ๋ก ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋๋ฑ ์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์ ์ํ ์ธ์ด๋ก์ ๊ฐ๊ด์ ๋ฐ๊ณ ์๋ค. ์ฌ์ดํท-๋ฐ(Scikit-learn), ํ ์ํ๋ก์ฐ(TensorFlow), CNTK, ์ํ์น ์คํํฌ MLlib(Apache Spark MLlib), ํ์ดํ ์น(PyTorch)๋ฑ ์ฑ๋ฅ๋ ๋ฐ์ด๋๋ฉฐ ๋ง์ด ์ฌ์ฉ๋๋ ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋ ํ๋ ์์๋ค์ด ํ์ด์ฌ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
ํ์ด์ ์ ๋ง์ ๋ธ๋ก์ฝ๋ฉ์ ์ฌ์ฉ๋๋ค.
์๋ฌธ๋ณด๊ธฐ: #
์ต์ ๋ฒ์ ์ 2020๋ 12์ 07์ผ์ ๋์จ 3.9.1 ๋ฒ์ ์ด๋ฉฐ 0.1๋ฒ์ ๋ง๋ค for๋ฌธ ๋ฑ์ ๋ฃจํ์์ ์ฐ์ฐ ํจ์จ์ด ์ฝ 2๋ฐฐ ๋นจ๋ผ์ง๋ ๊ฐ์ ์ด ์กด์ฌํ๋ฏ๋ก, ์ต์ ๋ฒ์ ์ด 3๊ฐ์ ์ด์ ์ง๋ ์์ ํ๊ฐ ๋ ํ์๋ ๊ท์ฐฎ๋๋ผ๋ ๋ฒ์ ์ ๋ฐ๋์ ์ ๋ฐ์ดํธ ํ๊ธฐ๋ฅผ ์ถ์ฒํ๋ค.
์จ๋ผ์ธ ์์ผ๋ก ์ฝ๋๋ฅผ ์คํ์์ผ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ก.[2]
์ฐฝ์์๋ ๊ท๋ ๋ฐ ๋ก์ฌ(Guido van Rossum). 1989๋ ํฌ๋ฆฌ์ค๋ง์ค ์ฃผ์, ์ฐ๊ตฌ์ค์ด ๋ซํ์์ด์ ์ฌ์ฌํ ๊น์ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋๋ด์ด ์๋๊ณ ๋ฐ ๋ก์ฌ์ ์ ๋ฝ์์๋ ์ ๋ค ์ค๋ฏธ์ค์ ๋น๊ตํ ์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ ๊ณ์ ๊ฒฝ์ ํ์๋ผ๋... ์ฌ์ฌํด์ ๋ง๋ค์๋ค๋ ๊ฒ์ ํ์ด์ฌ ์๋ฌธ๊ณผ ๋ง์ดํฌ๋ก์ํํธ์จ์ด์ ํ ์ธํฐ๋ทฐ๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ์ฌ์ค์ด๋ค. ๊ธฐ์ ์๋ค์ ๋๋ถ๋ถ ์ฌ์ฌํ ๋, ํน์ ์ค์๋ก ๊ฑธ์์ ๋ง๋ ๋ค. 2000๋ ์๋ Python 2, 2008๋ ์๋ Python 3๊ฐ ๋์๋ค.
์ด๋ฆ์ ๊ท๋๊ฐ ์ฆ๊ฒจ ๋ณด๋ ์๊ตญ์ 6์ธ์กฐ ์ฝ๋ฏธ๋ ๊ทธ๋ฃน ๋ชฌํฐ ํ์ด์ ์์ ๋ฐ์๋ค๊ณ ํ๋ค. ์ง๊ธ CPython์ ๊ณต์ GitHub ์ ์ฅ์๋ฅผ ๋ณด๋ฉด ํ์ ๋ณด์กฐ์ฉ ๋ด ์ด๋ฆ๋ค์ด the-knights-who-say-ni(๋๋ผ๊ณ ๋งํ๋ ๊ธฐ์ฌ)๋ bedevere(๋ฒ ๋๋น์ด) ๊ฐ์ด ์ฃ๋ค ๋ชฌํฐ ํ์ด์ ๊ณผ ์ฑ๋ฐฐ์ ๋ฐฐ์ญ๋ค์ด๋ค. ๋ง์ ํ์ด์ฌ ๊ต์ฌ๋ค์์ ๋ณ์ ์ด๋ฆ์ spam, eggs๋ก ์ง๋ ๋ฑ ๋๋ฆฝ์ ์น๋ค. ์ง์ ์ ๊ด๊ณ๋ ์์ง๋ง 42๋ ํ์์์. ๋ํ ์์ ํ๋ก๊ทธ๋จ ์ค ํ๋์ ์ด๋ฆ์ด ์์ด๋ค(Idle)์ธ๋ฐ, ํ์๋ฐฐ๊ฒฝ์ ์๊ฐํด ๋ณธ๋ค๋ฉด ๋ชฌํฐ ํ์ด์ ์ ๋ฉค๋ฒ ์๋ฆญ ์์ด๋ค(Eric Idle)์ ์ด๋ฆ์์ ์ ๋ํ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๋ฌผ๋ก ์ฌ์ ์ ์๋ฏธ๋ฅผ ์๊ฐ ์ ํ๋ ๊ฑด ์๋๋ผ์ ์ฌ๋ณผ๋งํฌ๊ฐ ๋ฑ ๋ชจ์์ด๋ค.
๋ฌธ๋ฒ์ด ๋งค์ฐ ์ฌ์์ ์ด๋ณด์๋ค์ด ์ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ ๋ ์ถ์ฒ๋๋ ์ธ์ด์ด๋ค. ์ค์ฃฝํ๋ฉด Python์ ๋ณ๋ช ์ด '์คํํ ์ ์๋ ์์ฌ ์ฝ๋(Executable pseudocode)'์ผ ์ ๋. ์ค์ ๋ก๋ ๋ฏธ๊ตญ ๊ณต๊ณผ ๋ํ๊ต์์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ ์์ ์ผ๋ก Python์ ๋ง์ด ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ํ์ต์ฉ์ผ๋ก ์ข์ ์ธ์ด์ธ ๋์์ ์ค์ฌ์ฉ๋ฅ ๊ณผ ์์ฐ์ฑ๋ ๋์ ๊ฐ๋ ฅํ ์ธ์ด์ธ ์ . ์ฆ ์ ๊ทผ์ฑ๊ณผ ์์ฉ๋ ฅ์ด ์ข๋ค๋ ๊ฒ ๊ต์ฅํ ์ค์ํ๋ค.
2010๋ ํ๋ฐ๋์ ์ด๋ฅด๋ฌ์๋ ํ๋ถํ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์์ผ๋ก ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋๋ฑ ์ธ๊ณต์ง๋ฅ ๊ฐ๋ฐ์ ์ํ ์ธ์ด๋ก์ ๊ฐ๊ด์ ๋ฐ๊ณ ์๋ค. ์ฌ์ดํท-๋ฐ(Scikit-learn), ํ ์ํ๋ก์ฐ(TensorFlow), CNTK, ์ํ์น ์คํํฌ MLlib(Apache Spark MLlib), ํ์ดํ ์น(PyTorch)๋ฑ ์ฑ๋ฅ๋ ๋ฐ์ด๋๋ฉฐ ๋ง์ด ์ฌ์ฉ๋๋ ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋ ํ๋ ์์๋ค์ด ํ์ด์ฌ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
ํ์ด์ ์ ๋ง์ ๋ธ๋ก์ฝ๋ฉ์ ์ฌ์ฉ๋๋ค.
์๋ฌธ๋ณด๊ธฐ: #
2. ํน์ง[ํธ์ง]
2.1. ๋์์ธ ์ฒ ํ[ํธ์ง]
Perl์ 'ํ๋ ์ด์์ ํด๊ฒฐ๋ฒ์ด ์กด์ฌํ๋ค' ์ ๋๋น๋๋ '๊ฐ์ฅ ์๋ฆ๋ค์ด ํ๋์ ๋ต์ด ์กด์ฌํ๋ค' ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ ์๋ค. ์ด๊ฒ์ ๋จ์ด ์์ฑํ ์ฝ๋๋ฅผ ๋ด๊ฐ ์ฝ๊ณ ์ดํดํด์ผ ํ๋ ๊ฒฝ์ฐ ์์ฃผ ์ ์คํ ๋๋ ์ ์๋ค. ์ด ์ ์ Tim Peters๊ฐ ์์ฑํ ํ์ด์ฌ ๊ธฐ๋ณธ ์ฒ ํ(The Zen of Python)์์ ๋ ์์ธํ ๋์ด๋์ด ์๋๋ฐ, 20๊ฐ์ง ํญ๋ชฉ์ด๋ผ๊ณ ํํํ๊ณ ์์ง๋ง ์ค์ 19๊ฐ์ง ํญ๋ชฉ๋ง ์๋ ๋ฑ '๊ท์น'๋ณด๋ค๋ ๋๋ด๋ ์์ธ '์กฐ์ธ'์ ๊ฐ๊น์ด ๋ฌธํญ๋ค์ด๋ค. # ์ฝ์์์ "import this"๋ฅผ ์
๋ ฅํ๋ฉด ์ด์คํฐ ์๊ทธ๋ก์จ ํ์ด์ฌ์ ํตํด ๋ณผ ์ ์๋ค. dir(this)๋ฅผ ํ๋ฉด ROT13์ผ๋ก ์ธ์ฝ๋ฉ๋ this.s๋ฅผ ํ์ธํ ์ ์๋ค. this.d๋ก dictionary( {} )๋ฅผ ์ฌ์ฉํด ํด๋
ํ๋ฉด ์๋ฌธ์ด ๋์จ๋ค.
ํ์ด์ฌ์ ์ด๋ฐ ์ฒ ํ์ ์ดํ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์๋ ์์ถ๋์ด, 2010๋ ๋ ๋ค์ด์๋ ๊ธฐ์กด ์ธ์ด๋ค๋ ํ์ด์ฌ์ฒ๋ผ ์ต๋ํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ๋จ์ํ์ํค๊ณ ํต์ผํ๋ ค๋ ๋ฌธ๋ฒ ๋ํต์ผ ์ด๋์ด ์ผ์ด๋๊ธฐ ์์ํ๋ค. ์ด๋ ํ๋ก๊ทธ๋๋จธ๋ค์ด ํ๋ก๊ทธ๋จ์ ๋๋ ค๋ณด๊ธฐ ์ข๊ฒ ํ๋ค๋ ๋งค์ฐ ์ข์ ์ํฅ์ด ์์ผ๋๊น...
๋ฐ๋ผ์ ๋ค๋ฅธ ์ธ์ด๋ค์ ์ฝ๋ฉ ์คํ์ผ์ ๊ฐ์์ ์ทจํฅ์ ๋ง๊ฒ ๋ฐ์ฐ ์งํํ๋ ๋ฐ๋ฉด, ํ์ด์ฌ์ ์์ ์ฒ ํ๋ค์ ๋ง์กฑ ์ํค๋ ํ๋์ ์คํ์ผ๋ก ์๋ ด ์งํํ๋ ์ฑํฅ์ด ์๋ค. ์ค์ ๋ก C ๊ณ์ด์ ์ธ์ด์์ ์ค๊ดํธ์ ์์น์ ๋ํ ๋ ผ์์ ๊ฑฐ์ ์ข ๊ต์ ๋ ผ์์ ๊ฐ๊น๋ค. ํ์ฌ ํ๊ตญ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ์์ C์ธ์ด์ ์ฐฝ์์ Kernighan๊ณผ Ritchie์ K&R ์คํ์ผ์ด๋ค. ๊ทธ๋ฌ๋ Eric Allman์ ๋ฐฉ์์ ๊ณ ์ํ๋ ์ฌ๋๋ค๋ ์ ๋ฒ ๋ง๋ค. ์ด์ธ์๋ ์ค๊ดํธ ์์น๋ฅผ ์ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ด ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ http://gyumee.egloos.com/1306012์์ ํ์ธ ๊ฐ๋ฅํ๋ค.๊ทธ๋ฆฌ๊ณ ํ์น๋ ์์ง๋ง ๋ช๋ช ์ฌ๋๋ค์ ๊ทธ๋ฅ ๋ค์ฌ์ฐ๊ธฐ๊ณ ๋ญ๊ณ ๋ค ๋ฌด์ํ๊ณ ์ญ ์์ฑํด๋๊ธฐ๋ ํ๋ค. ์ด๋ฐ ์ฑํฅ์ ๋ค๋ฅธ ์ธ์ด์๋ ์๋ ํ์ด์ฌ์ค๋ฌ์(pythonic)์ด๋ผ๋ ๋
ํนํ ๊ฐ๋
์ ๋ณ๊ฒ ๋์๋๋ฐ, ๋ณต์กํ์ง ์์ผ๋ฉด์ ์๋ฏธ๊ฐ ๋ช
ํํ๊ณ , ์ฝ๋์ ์ถ์ฝ๋ณด๋ค ๋๋ ทํ๊ฒ ๋ณด์ด๋ ํ๋ฆ์ ์ค์ํ๋ ํ์ด์ฌ์ ์ฒ ํ์ ์ง์นญํ๋ ๊ฐ๋
์ด๋ค.
์ด๋ฐ ์ฒ ํ ๋๋ฌธ์ ๋ฌธ๋ฒ์ด ๊ต์ฅํ ์๊ฒฉํ ํธ์ด๋ค. ์๋ฅผ ๋ค์๋ฉด, ๋ค๋ฅธ ์ธ์ด์์๋ ํด๋ ๋๊ณ ์ ํด๋ ๋๋ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์ด ์ธ์ด์์๋ ์๋ฌด๋ก, ๋ค์ฌ์ฐ๊ธฐ ์์ฒด๋ก ํ๋์ ์ฝ๋ ๋ธ๋ญ์ด ๋๋ค. ์ฝ๋ ๋ธ๋ญ์ ๋ช ์์ ์ผ๋ก ํ์ํ์ง ์์๋ ๋ผ์ ๋น์ฃผ์ผ ์ ์ผ๋ก๋ ๊ต์ฅํ ๊น๋ํ ๋ฐ๋ฉด ์์ ๋๋ฅผ ์ ์ฝํ๋ค๋ ํ๋ ์๋ค.๊ทผ๋ฐ ์ด์ฐจํผ ๋ค์ฌ์ฐ๊ธฐ๋ ํ๊ฒ ๋๋ค.
์ฝ๋์์ ์ค๊ดํธ๋ ๋ชจ์๋๊ณ ๋ณด๋ฉด ๊ต์ฅํ ์ง์ ๋ถํ ๋ฟ๋๋ฌ, ๋น์ฅ ์ ๋ ฅํด์ผ ํ๋ ๊ดํธ๊ฐ 2๊ฐ๋ ๋๊ณ ,[4] ๊ดํธ ํ๋๋ผ๋ ์๋ชป ๋ฃ์ผ๋ฉด ๋ธ๋ญ์ด ๋ค ๊ผฌ์ฌ๋ฒ๋ฆฌ๋ ๊ท์ฐฎ์ ์กด์ฌ์ด์ง๋ง(begin๊ณผ end ํน์ end.์ผ๋ก ๊ตฌ๋ถํด์ผ ํ๋ ํ์ค์นผ์์ ๋ณด๋ฉด ์ค๊ดํธ๋ง ํด๋ ์์ฒญ๋๊ฒ ๊ฐ๊ฒฐํด ๋ณด์ด์ง๋ง), ๋์ ๋ธ๋ญ๋ค์ ์ด๋ฆฌ์ ๋ฆฌ ๋ง์ง๋๋ ๋งค์ฐ ํธ๋ฆฌํ ์กด์ฌ์ด๋ค. ํนํ C ์ฝ๋๋ฅผ ์ข ์ด์ ์ถ๋ ฅํด๋ณด๋ฉด ์ค๊ดํธ ์๊ณ ์๊ณ ์ ๊ฐ๋ ์ฑ ์ฐจ์ด๊ฐ ์์ธ๋ก ํฌ๋ค. ํ์ด์ฌ์์๋ ์ด ์ค๊ดํธ๋ฅผ ๋ค์ฌ์ฐ๊ธฐ๋ก ๋์ฒดํ๋๋ฐ, ์ด๊ฒ ๋ธ๋ญ์ ์์๊ณผ ๋ ์ง์ ์ ์ฐพ๋ ๋ถ๋ถ์์ ๊ฝค ๋ถํธํ๋ค. ๋์ ๊ดํธ๋ฅผ 2๊ฐ๋ ์ผ์ผ์ด ๋ค ๋ฃ๊ณ , ์๋ชป ๋ฃ์ง ์๊ฒ ์ ๊ฒ๋ ํด ์ค์ผํ๋ ์๊ณ ๊ฐ ์๋ค๋ ์์ฒญ๋ ์ฅ์ ์ด ์๋ค.
์๊ธด๊ฑด Python 2๋ Tab ํค๋ฅผ ๊ถ์ฅํ๋ค. ํญ ํค๋ฅผ ์ฌ์ฉํ์ง ๋ง ๊ฒ์ ์๊ตฌํ๋ ๊ฑด Python 3์์ ํด๋นํ๋ ์ด์ผ๊ธฐ. ๋ฌผ๋ก Python 2์์๋ "Tab ํค๋ฅผ ์ธ ๊ฒฝ์ฐ์๋ ์์ด๋ฒ๋ฆฌ์ง ๋ง ๊ฒ"์ ์ด์ผ๊ธฐํ๊ธด ํ๋, ๊ทธ๋ ๋ค๋ฉด ์ฒ์๋ถํฐ Tab ํค๋ฅผ ๋ง์์ด์ผ ๋ง์ด ๋๋ค.์ฒจ์๋ ํญ์ด ๊ทธ๋ ๊ฒ ๋ฅ์ธ์ค ๋ชฐ๋์ด.... PyCharm ๋ฑ์ ์ฃผ์ ์๋ํฐ์๋ ํญ ํค๋ฅผ ์ผ๋์ง ์คํ์ด์ค ๋ฐ๋ฅผ ์ผ๋์ง ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก ์ฐธ๊ณ ํ์.
์ฐธ๊ณ ๋ก ์์ ์์์ธ ํฉํ ๋ฆฌ์ผ ํจ์๋ (๋๋ค์๊ณผ ternary operator๋ฅผ ์ด์ฉํด) ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๊ฒฐํ ๋ํ๋ผ ์ ์๋ค.์ฌ์ค ์ด ์ฝ๋๋ PEP-8 ์๋ฐ์ด๋ค.
- ใPEP 20 -- The Zen of Python ํผ์น๊ธฐ ยท ์ ๊ธฐใ
- ์๋ฆ๋ค์ด ๊ฒ์ด ์ถํ ๊ฒ๋ณด๋ค ๋ซ๋ค. (Beautiful is better than ugly.)
- ๋ช ์์ ์ธ ๊ฒ์ด ์์์ ์ธ ๊ฒ๋ณด๋ค ๋ซ๋ค. (Explicit is better than implicit.)
- ๊ฐ๊ฒฐํ ๊ฒ์ด ๋ณตํฉ์ ์ธ ๊ฒ๋ณด๋ค ๋ซ๋ค. (Simple is better than complex.)
- ๋ณตํฉ์ ์ธ ๊ฒ์ด ๋ณต์กํ ๊ฒ๋ณด๋ค ๋ซ๋ค. (Complex is better than complicated.)
- ์ํ์ ์ธ ๊ฒ์ด ๋ดํฌ๋ ๊ฒ๋ณด๋ค ๋ซ๋ค. (Flat is better than nested.)
- ์ฌ์ ๋ก์ด ๊ฒ์ด ๋ฐ์งํ ๊ฒ๋ณด๋ค ๋ซ๋ค. (Sparse is better than dense.)
- ๊ฐ๋ ์ฑ์ ์ค์ํ๋ค. (Readability counts.)
- ํน๋ณํ ๊ฒฝ์ฐ๋ค์ ๊ท์น์ ์ด๊ธธ์ ๋๋ก ํน๋ณํ์ง ์๋ค. (Special cases aren't special enough to break the rules.)
- ํ๋ ์ค์ฉ์ฑ์ ์์์ฑ์ ์ด๊ธด๋ค. (Although practicality beats purity.)
- ์ค๋ฅ๋ ์ ๋๋ก ์กฐ์ฉํ ์ง๋๊ฐ์ง ์๋๋ค. (Errors should never pass silently.)
- ๋ช ์์ ์ผ๋ก ์ค๋ฅ๋ฅผ ๊ฐ์ถ๋ ค๋ ์๋๊ฐ ์๋๋ผ๋ฉด. (Unless explicitly silenced.)
- ๋ชจํธํจ์ ๋ํ ๋, ์ด๋ฅผ ์ถ์ธกํ๋ ค๋ ์ ํน์ ๊ฑฐ๋ถํ๋ผ. (In the face of ambiguity, refuse the temptation to guess.)
- ๋ช ํํ-- ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ธ์ ์ด๋ฉด ์ ์ผํ -- ํ๋์ ๋ฐฉ๋ฒ์ ํญ์ ์กด์ฌํ๋ค. (There should be one-- and preferably only one --obvious way to do it.)
- ๋น๋ก ๊ทธ ๋ฐฉ๋ฒ์ด ์ฒ์์๋ ๋ช ํํด ๋ณด์ด์ง ์์์ง๋ผ๋[3]. (Although that way may not be obvious at first unless you're Dutch.)
- ์ง๊ธ ํ๋์ ์ฎ๊ธฐ๋ ๊ฒ์ด ์์ ์ํ๋ ๊ฒ๋ณด๋ค๋ ๋ซ๋ค. (Now is better than never.)
- ๋น๋ก ์์ ์ํ๋ ๊ฒ์ด ์ง๊ธ *๋น์ฅ* ํ๋ ๊ฒ๋ณด๋ค ๋์๋๋ ๋ง์ง๋ง. (Although never is often better than *right* now.)
- ๊ตฌํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ๊ธฐ ์ฝ์ง ์๋ค๋ฉด, ๊ทธ๊ฒ์ ๋์ ์์ด๋์ด์ด๋ค. (If the implementation is hard to explain, it's a bad idea.)
- ๊ตฌํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ๊ธฐ ์ฝ๋ค๋ฉด, ๊ทธ๊ฒ์ ์ข์ ์์ด๋์ด์ผ์ง๋ ๋ชจ๋ฅธ๋ค. (If the implementation is easy to explain, it may be a good idea.)
- ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ ์ข์ ์๊ฐ์ด๋ค! (Namespaces are one honking great idea -- let's do more of those!)
ํ์ด์ฌ์ ์ด๋ฐ ์ฒ ํ์ ์ดํ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์๋ ์์ถ๋์ด, 2010๋ ๋ ๋ค์ด์๋ ๊ธฐ์กด ์ธ์ด๋ค๋ ํ์ด์ฌ์ฒ๋ผ ์ต๋ํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ๋จ์ํ์ํค๊ณ ํต์ผํ๋ ค๋ ๋ฌธ๋ฒ ๋ํต์ผ ์ด๋์ด ์ผ์ด๋๊ธฐ ์์ํ๋ค. ์ด๋ ํ๋ก๊ทธ๋๋จธ๋ค์ด ํ๋ก๊ทธ๋จ์ ๋๋ ค๋ณด๊ธฐ ์ข๊ฒ ํ๋ค๋ ๋งค์ฐ ์ข์ ์ํฅ์ด ์์ผ๋๊น...
๋ฐ๋ผ์ ๋ค๋ฅธ ์ธ์ด๋ค์ ์ฝ๋ฉ ์คํ์ผ์ ๊ฐ์์ ์ทจํฅ์ ๋ง๊ฒ ๋ฐ์ฐ ์งํํ๋ ๋ฐ๋ฉด, ํ์ด์ฌ์ ์์ ์ฒ ํ๋ค์ ๋ง์กฑ ์ํค๋ ํ๋์ ์คํ์ผ๋ก ์๋ ด ์งํํ๋ ์ฑํฅ์ด ์๋ค. ์ค์ ๋ก C ๊ณ์ด์ ์ธ์ด์์ ์ค๊ดํธ์ ์์น์ ๋ํ ๋ ผ์์ ๊ฑฐ์ ์ข ๊ต์ ๋ ผ์์ ๊ฐ๊น๋ค. ํ์ฌ ํ๊ตญ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ์์ C์ธ์ด์ ์ฐฝ์์ Kernighan๊ณผ Ritchie์ K&R ์คํ์ผ์ด๋ค. ๊ทธ๋ฌ๋ Eric Allman์ ๋ฐฉ์์ ๊ณ ์ํ๋ ์ฌ๋๋ค๋ ์ ๋ฒ ๋ง๋ค. ์ด์ธ์๋ ์ค๊ดํธ ์์น๋ฅผ ์ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ด ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ http://gyumee.egloos.com/1306012์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
์ด๋ฐ ์ฒ ํ ๋๋ฌธ์ ๋ฌธ๋ฒ์ด ๊ต์ฅํ ์๊ฒฉํ ํธ์ด๋ค. ์๋ฅผ ๋ค์๋ฉด, ๋ค๋ฅธ ์ธ์ด์์๋ ํด๋ ๋๊ณ ์ ํด๋ ๋๋ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์ด ์ธ์ด์์๋ ์๋ฌด๋ก, ๋ค์ฌ์ฐ๊ธฐ ์์ฒด๋ก ํ๋์ ์ฝ๋ ๋ธ๋ญ์ด ๋๋ค. ์ฝ๋ ๋ธ๋ญ์ ๋ช ์์ ์ผ๋ก ํ์ํ์ง ์์๋ ๋ผ์ ๋น์ฃผ์ผ ์ ์ผ๋ก๋ ๊ต์ฅํ ๊น๋ํ ๋ฐ๋ฉด ์์ ๋๋ฅผ ์ ์ฝํ๋ค๋ ํ๋ ์๋ค.
์ฝ๋์์ ์ค๊ดํธ๋ ๋ชจ์๋๊ณ ๋ณด๋ฉด ๊ต์ฅํ ์ง์ ๋ถํ ๋ฟ๋๋ฌ, ๋น์ฅ ์ ๋ ฅํด์ผ ํ๋ ๊ดํธ๊ฐ 2๊ฐ๋ ๋๊ณ ,[4] ๊ดํธ ํ๋๋ผ๋ ์๋ชป ๋ฃ์ผ๋ฉด ๋ธ๋ญ์ด ๋ค ๊ผฌ์ฌ๋ฒ๋ฆฌ๋ ๊ท์ฐฎ์ ์กด์ฌ์ด์ง๋ง(begin๊ณผ end ํน์ end.์ผ๋ก ๊ตฌ๋ถํด์ผ ํ๋ ํ์ค์นผ์์ ๋ณด๋ฉด ์ค๊ดํธ๋ง ํด๋ ์์ฒญ๋๊ฒ ๊ฐ๊ฒฐํด ๋ณด์ด์ง๋ง), ๋์ ๋ธ๋ญ๋ค์ ์ด๋ฆฌ์ ๋ฆฌ ๋ง์ง๋๋ ๋งค์ฐ ํธ๋ฆฌํ ์กด์ฌ์ด๋ค. ํนํ C ์ฝ๋๋ฅผ ์ข ์ด์ ์ถ๋ ฅํด๋ณด๋ฉด ์ค๊ดํธ ์๊ณ ์๊ณ ์ ๊ฐ๋ ์ฑ ์ฐจ์ด๊ฐ ์์ธ๋ก ํฌ๋ค. ํ์ด์ฌ์์๋ ์ด ์ค๊ดํธ๋ฅผ ๋ค์ฌ์ฐ๊ธฐ๋ก ๋์ฒดํ๋๋ฐ, ์ด๊ฒ ๋ธ๋ญ์ ์์๊ณผ ๋ ์ง์ ์ ์ฐพ๋ ๋ถ๋ถ์์ ๊ฝค ๋ถํธํ๋ค. ๋์ ๊ดํธ๋ฅผ 2๊ฐ๋ ์ผ์ผ์ด ๋ค ๋ฃ๊ณ , ์๋ชป ๋ฃ์ง ์๊ฒ ์ ๊ฒ๋ ํด ์ค์ผํ๋ ์๊ณ ๊ฐ ์๋ค๋ ์์ฒญ๋ ์ฅ์ ์ด ์๋ค.
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x - 1)์ด ๋ค์ฌ์ฐ๊ธฐ ์๋ฌด ๊ท์น ๋๋ฌธ์ ์์ค ์ฝ๋ ๋ค์ฌ์ฐ๊ธฐ์ ํญ(Tab) ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋งค์ฐ ๊ฐ๋ ฅํ ์๊ตฌํ๋ค.[5](๋ค์ฌ์ฐ๊ธฐ์ ์ต์ ํ๋ python์ ์ฐ๊ธฐ์ซ์ผ๋ฉด ์ธ๋ฏธ์ฝ๋ก ๊ณผ ์ค๊ดํธ, int/char ๋ฑ์ ์์๋ก ๋ง์ด ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ค.) ํญ ๋ฌธ์๋ ์ฌ์ฉ์๋ ์์คํ
์ ์ค์ ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ํญ์ ๊ณต๋ฐฑ์ด ์๊ธด๋ค. ๋ฌธ์ ๋ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๊ฐ ํญ ๋ฌธ์ ํ๋๋ฅผ ๊ณต๋ฐฑ 1๋ฌธ์๋ก ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค. ํญ ๋ฌธ์๋ก ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์์ ๊ณผ ๋ค๋ฅธ ํญ ์ค์ ์ ๊ฐ์ง ์๋ํฐ์์ ์ฝ๋๋ฅผ ์ด์ด ๋ณผ ๊ฒฝ์ฐ ์ฝ๋ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋์ ํ๋ฅ ๋ก ๋ง๊ฐ์ ธ ๋ฒ๋ฆฌ๊ณ , ๊ทธ๊ฑธ ๊ต์ ํด๋ณด๊ฒ ๋ค๊ณ ๋ค์ฌ์ฐ๊ธฐ์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ํผ์ฉํ๋ ์๊ฐ ํด๋น ์์ค ์ฝ๋๋ ์ฌ๋์ด ๊ณ ์น ์ ์๋ ํํ๋ก(์๊ฐ์ ์ผ๋ก๋ ๋ธ๋ก์ด ๋ง์ง๋ง ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ ๋ค๋ฅธ ๋ธ๋ก์ผ๋ก ์ธ์) ๋ง๊ฐ์ ธ ๋ฒ๋ฆฐ๋ค. PEP-8์ ๋ช
์๋ ๊ณต์ ์ฝ๋ฉ ๊ฐ์ด๋์์๋ ์คํ์ด์ค ๋ฐ๋ก ๊ณต๋ฐฑ 4๋ฌธ์๋ฅผ ๋ฃ๊ธฐ๋ฅผ ๊ถ์ฅํ๊ณ ์๋ค. ๋ฌผ๋ก ์ด๋ ๊ฒ ์คํ์ด์ค ๋ฐ๋ฅผ ๋ค ๋ฒ์ด๋ ์น๋ ๊ท์ฐฎ์ ํ์๋ฅผ ํ๋ก๊ทธ๋๋จธ๋ค์ด ๊ฐ๋ง ๋๋ ๋ฆฌ๊ฐ ์๋ค. PyCharm, VSCode ๋ฑ Python ๊ฐ๋ฐ์๋ค์ด ์ ์ฉํ๋ ์ต์ ์๋ํฐ๋ Tab์ ๋๋ฅด๋ฉด ๊ณต๋ฐฑ 4๊ฐ๋ก ์๋ ๋ณํํ์ฌ ์
๋ ฅ๋๋ ๊ธฐ๋ฅ์ด ์ง์๋๋ฏ๋ก ์ด๋ค ์๋ํฐ๋ฅผ ์ด์ฉํ๋ฉด ๊ณต๋ฐฑ 4๊ฐ๋ฅผ ๋ฒ๊ฑฐ๋กญ๊ฒ ์น ํ์๊ฐ ์์ด์ง๋ค.์๊ธด๊ฑด Python 2๋ Tab ํค๋ฅผ ๊ถ์ฅํ๋ค. ํญ ํค๋ฅผ ์ฌ์ฉํ์ง ๋ง ๊ฒ์ ์๊ตฌํ๋ ๊ฑด Python 3์์ ํด๋นํ๋ ์ด์ผ๊ธฐ. ๋ฌผ๋ก Python 2์์๋ "Tab ํค๋ฅผ ์ธ ๊ฒฝ์ฐ์๋ ์์ด๋ฒ๋ฆฌ์ง ๋ง ๊ฒ"์ ์ด์ผ๊ธฐํ๊ธด ํ๋, ๊ทธ๋ ๋ค๋ฉด ์ฒ์๋ถํฐ Tab ํค๋ฅผ ๋ง์์ด์ผ ๋ง์ด ๋๋ค.
์ฐธ๊ณ ๋ก ์์ ์์์ธ ํฉํ ๋ฆฌ์ผ ํจ์๋ (๋๋ค์๊ณผ ternary operator๋ฅผ ์ด์ฉํด) ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๊ฒฐํ ๋ํ๋ผ ์ ์๋ค.
factorial = lambda x: 1 if x == 0 else x * factorial(x - 1)C์ Java์์ ์ฐ์ด๋ ternary operator ?:์ ๋นํด ํจ์ฌ ์ง๊ด์ ์ผ๋ก ์ฝํ, '์คํํ ์ ์๋ ์์ฌ์ฝ๋'๋ผ๋ ๋ณ๋ช
์ ์ฌ๊ธฐ์๋ ๋๋ ์ ์๋ค. ๋ฌผ๋ก ์ณ์ผ ํ ๋ฌธ์ ์ซ์๊ฐ ๋ช ๋ฐฐ๋ก ๋์ด๋๊ธฐ ๋๋ฌธ์ ์ซ์ดํ๋ ์ฌ๋์ ์์ฒญ๋๊ฒ ๊ทนํํ๋ค.2.2. ์์ ๊ฐ์ฒด์งํฅ[ํธ์ง]
ํ์ด์ฌ์๋ ์์ ํ์
(Primitive Type)์ด ์กด์ฌํ์ง ์์ผ๋ฉฐ, ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด๋ก ์ทจ๊ธ๋๋ค. ๋์๊ฐ ํด๋์ค, ํจ์ ์ญ์ ๊ฐ์ฒด๋ก ์ทจ๊ธํ ์ ์๋ค. ์์ ์ญ์ ์์๊ฐ ์ ์ฅ๋ ๊ฐ์ฒด๋ผ๊ณ ๋ณธ๋ค. ๋ค์๊ณผ ๊ฐ์ ์์ ํ ๋น๋ฌธ์ด ์์ ๋,
์ด๋ ๋ณ์ x ์์ฒด์ 10์ด ํ ๋น๋ ๊ฒ์ด ์๋๋ผ x๊ฐ 10์ด ์ ์ฅ๋ ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ด๋ถ์ ์ผ๋ก๋ C์ ํฌ์ธํฐ ์ฐ์ฐ๊ณผ ๊ฐ์ ๋์์ด ํํด์ง๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ x์ ๋์ ๋๋ ๊ฐ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ,
x๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ด 10์ด ์ ์ฅ๋ ์์ ๊ฐ์ฒด์์ 20์ด ์ ์ฅ๋ ์์ ๊ฐ์ฒด๋ก ๋ฐ๋ ๊ฒ์ด๋ค. x ์์ฒด์ ๊ฐ์ด 10์์ 20์ผ๋ก ๋ฐ๋ ๊ฒ ์๋๋ค.
x = 10์ด๋ ๋ณ์ x ์์ฒด์ 10์ด ํ ๋น๋ ๊ฒ์ด ์๋๋ผ x๊ฐ 10์ด ์ ์ฅ๋ ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ด๋ถ์ ์ผ๋ก๋ C์ ํฌ์ธํฐ ์ฐ์ฐ๊ณผ ๊ฐ์ ๋์์ด ํํด์ง๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ x์ ๋์ ๋๋ ๊ฐ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ,
x = 10
x = 20x๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ด 10์ด ์ ์ฅ๋ ์์ ๊ฐ์ฒด์์ 20์ด ์ ์ฅ๋ ์์ ๊ฐ์ฒด๋ก ๋ฐ๋ ๊ฒ์ด๋ค. x ์์ฒด์ ๊ฐ์ด 10์์ 20์ผ๋ก ๋ฐ๋ ๊ฒ ์๋๋ค.
<ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ> p.107, ์ฑ
๋ง, 2020 |
ํ์ด์ฌ ๋ฒ์ 3์ ํ์ค ํ์ ๊ณ์ธต ๊ตฌ์กฐ์์ ์ฃผ์ ์๋ฃํ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค. ์ด ์ค์์๋ ํฌ๊ฒ ๋ถ๋ณ ๊ฐ์ฒด(Immutable Object)์ ๊ฐ๋ณ ๊ฐ์ฒด(Mutable Object)๋ก ๋๋ ์ ์๋ค. ๋ถ๋ณ ๊ฐ์ฒด์๋ ์์(์ซ์), ๋ฌธ์์ด, ๋ฐ์ดํธ, ๊ทธ๋ฆฌ๊ณ ํํ[6]์ด ์๋ค. ์ด ๋ค ๊ฐ์ง๋ฅผ ์ ์ธํ ๋๋จธ์ง ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฐ๋ณ ๊ฐ์ฒด์ด๋ฉฐ, ๊ฐ์ ์์ ํ ์ ์๋ค. ๋ถ๋ณ ๊ฐ์ฒด์ ๊ฐ์ ์์ ํ ๋๋ ๋ฐ๋ ๊ฐ์ด ์ ์ฅ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐธ์กฐ ๋์์ ์ ๊ฐ์ฒด๋ฅผ ์ฎ๊ธฐ๋ ์์ผ๋ก ๋์ํ๋ค. ์ด์ ๊ฐ์ ํน์ง ๋๋ฌธ์ ํ์ด์ฌ์ ์์ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ผ๊ณ ํ ์ ์๊ณ , ์ด์ ๊ฐ์ ์์ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ๋๋ค๋ฅธ ์๋ก๋ Ruby๊ฐ ์๋ค.
ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋๊ฒผ๋ ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ๋๊ฒผ๋์ ๋ฐ๋ผ์ ํจ์ ๋ฐ๊นฅ์ ์๋ ์ธ์์ ๊ฐ๋ ์์ ํ ์ ์๋์ง ์๋์ง๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ถ๋ณ๊ฐ์ฒด๋ฅผ ๋๊ฒผ์ผ๋ฉด ๊ฐ์ ๋ณต์ฌ๋ง ์ผ์ด๋๊ณ ํจ์ ๋ฐ๊นฅ์๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ฏ๋ก[7] '๊ฐ์ ์ํ ํธ์ถ(Call by Value)'์ด ๋ ๊ฒ์ด๋ฉฐ, ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ๋๊ฒผ์ผ๋ฉด ํจ์ ๋ฐ๊นฅ์๊น์ง ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก '์ฐธ์กฐ์ ์ํ ํธ์ถ(Call by Reference)'์ด ๋ ๊ฒ์ด๋ค. ํ์ด์ฌ ๊ณต์ ๋ฌธ์์์๋ ํ์ด์ฌ์ ์ธ์ ์ ๋ฌ ๋ฐฉ์์ 'ํ ๋น์ ์ํ ํธ์ถ(Call by Assignment)', ๋๋ '๊ฐ์ฒด ์ฐธ์กฐ์ ์ํ ํธ์ถ(Call by Object Reference)'์ด๋ผ๊ณ ๋ช ์ํ๊ณ ์๋ค.
2.3. ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด[ํธ์ง]
ํ์ด์ฌ์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋. ํ์ด์ฌ์ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(iterable)๋ผ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด ๊ฐ์ฒด๋ ์งํฉ, ๋ฌธ์์ด, ๋ฆฌ์คํธ, ํํ, ๋์
๋๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ํจ์[8]๊น์ง๋ ๋ฐ๋ณต์ด ๊ฐ๋ฅํ๋ฉฐ, ์ด๊ฒ์ for ๊ตฌ๋ฌธ์์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ๋ฆฌ์คํธ์ ํํ ๋ฑ์ ์ข ํธํด์ง๋ ์ ๋๋ผ ํ ์ ์์ง๋ง, ํจ์์ ๊ฐ์ ๋ฐ๋ณตํ ์ ์๋ค๋ ๊ฒ์ ํฐ ์ฅ์ ์ด๋ค. ๊ทธ ์๋ก n์ ๋ฐฐ์๋ฅผ ๊ตฌํ๋ f(n) ํจ์๊ฐ ์์ ๋,
์ ๊ฐ์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ํจ์๋ฅผ ํธ์ถํ๊ณ ๋์๋ ํจ์๊ฐ ์์ ํ ๋๋๊ธฐ ์ ๊น์ง๋ ์ง์ญ ๋ณ์๊ฐ ๋จ์์์ผ๋ฉฐ, ํจ์๊ฐ ๋๋์ผ ์ง์ญ๋ณ์๊ฐ ์ญ์ ๋๋ค. ๋ฐ๋ผ์ ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค x์ ๊ฐ์ด ์ฆ๊ฐํ๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ __next__ ํจ์๋ next(๊ฐ์ฒด) ํจ์, ๋๋ for ... in ๊ฐ์ฒด ์ ๊ฐ์ ๋ฌธ๋ฒ๋ค์ ์ด์ฉํ์ฌ ์์๋๋ก ๊ฐ์ ํธ์ถํ ์ ์๋ค. ํนํ ์ ๋๋ ์ดํฐ์ ๊ฒฝ์ฐ, ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋๊ฒ ์๋๋ผ, ํธ์ถ ๋ ๋ ๋ฐํ๊ฐ์ ์๋ก ๋ง๋ค์ด ๋ฐํํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฉด์์๋ ์ด์ ์ด ์๋ค.
def f(n):
x = 1
while 1:
yield n*x
x += 1
ot = f(2)
print ot
print next(ot)
print next(ot)์ ๊ฐ์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ํจ์๋ฅผ ํธ์ถํ๊ณ ๋์๋ ํจ์๊ฐ ์์ ํ ๋๋๊ธฐ ์ ๊น์ง๋ ์ง์ญ ๋ณ์๊ฐ ๋จ์์์ผ๋ฉฐ, ํจ์๊ฐ ๋๋์ผ ์ง์ญ๋ณ์๊ฐ ์ญ์ ๋๋ค. ๋ฐ๋ผ์ ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค x์ ๊ฐ์ด ์ฆ๊ฐํ๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ __next__ ํจ์๋ next(๊ฐ์ฒด) ํจ์, ๋๋ for ... in ๊ฐ์ฒด ์ ๊ฐ์ ๋ฌธ๋ฒ๋ค์ ์ด์ฉํ์ฌ ์์๋๋ก ๊ฐ์ ํธ์ถํ ์ ์๋ค. ํนํ ์ ๋๋ ์ดํฐ์ ๊ฒฝ์ฐ, ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋๊ฒ ์๋๋ผ, ํธ์ถ ๋ ๋ ๋ฐํ๊ฐ์ ์๋ก ๋ง๋ค์ด ๋ฐํํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฉด์์๋ ์ด์ ์ด ์๋ค.
3. ์ฅ์ [ํธ์ง]
3.1. ๋์ ์์ฐ์ฑ[ํธ์ง]
ํ์ด์ฌ์ ์์ด๋ดํฐํฐ. ๊ทธ ๋ฌด์๊ณผ๋ ๋ฐ๊ฟ ์ ์๋ ํ์ด์ฌ๋ง์ ํน์ง์ด๋ค. ์ ์ธ๊ณ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค์์ ํ์ด์ฌ ์ ๋์ ๋ฎ์ ๋์ด๋๋ฅผ ๊ฐ์ง๋ฉด์, ๋ฒ์ฉ์ฑ์ ๊ฐ์ถ๊ณ , ํ์ด์ฌ ์์ค์ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์๋๋ฅผ ๋ฐ๋ผ์ก๋ ์ธ์ด๊ฐ ์๋ค. ํ์ด์ฌ์ผ๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Java๋ C++๋ก ๋ง๋ ๋ค๊ณ ํ๋ ์๊ฐ ์จ์ด ํฑ ๋งํ ์ ๋. ์ด๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ค๊ณ๋ถํฐ ๋๊ฐํด์ง๋ค.
์ธํฐํ๋ฆฌํฐ ์ธ์ด์ด๋ฉด์ ์ฐ์ํ ์๋ฃํ๊ณผ ๋ค์ํ ๋ชจ๋ ๋ฑ์ ์ ๊ณตํด ๊ฐ๋ฐ๊ธฐ๊ฐ์ด ๋จ์ถ๋๋ ๊ฒ์ด ํน์ง. 'C์ธ์ด๋ก 2๋ ๋์ ์์ฑํ์ง ๋ชปํ ํ๋ก์ ํธ๋ฅผ ํ์ด์ฌ์ผ๋ก ํ๋ฌ๋ง์ ํด๋๋ค'๋ ๊ทน์ ์ธ ๊ฒฝํ๋ด์ด ์์ ์ ๋๋ค. ๋น์ฅ ํ์ด์ฌ์ ์งํฉ ์๋ฃํ ๊ฐ์ ๊ฒฝ์ฐ C์ธ์ด๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ฉด ๋จธ๋ฆฌ๊ฐ ์ํ์จ๋ค. C์ธ์ด์์ ์ ์ฐฉ์ฑ๋ ์ข๊ธฐ ๋๋ฌธ์, ์ผ๋จ Python์ผ๋ก ๋นจ๋ฆฌ ๊ตฌํํ๊ณ , ๋จ์ ์๊ฐ์ ์๋์ ๋ณ๋ชฉ์ด ๋๋ ๋ถ๋ถ์ C++๋ก ์ ํํ๋ ์ ๋ต์ ๋ด์ธ์ฐ๊ณ ์๋ค. ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ฉด์ Python ์์ฒด๋ ๊ทธ๋ฆฌ ๋๋ฆฌ์ง ์๊ฒ ๋์๋ค. ์ฌ์ง์ด ์ด์ ๋ธ๋ฆฌ์ด ๊ฐ์ ์ ์์ค ์ธ์ด(Low level)๋ Python์์ ํธ์ถ ํ ์์๋ค. Python์ ์ด์ง๊ฐํ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์ง์ํ๋ ํธํ์ฑ, ์์ฉํ ๊ณณ์ด ๋ฌด๊ถ๋ฌด์งํ๋ค.
์ฐธ๊ณ ๋ก ์
3.2. ๋ฌธ๋ฒ ํต์ผ์ ๋ฐ๋ฅธ ๋น ๋ฅธ ํผ๋๋ฐฑ[ํธ์ง]
๋์์ธ ์ฒ ํ ์์ฒด๊ฐ ๊ฐ์ฅ ์๋ฒฝํ ํ๋์ ์๋ฆ๋ค์ด ํด๋ต์ ์ฐพ๋ ํ์ด์ฌ ํน์ ์ ์ฒ ํ์ ์ฐพ๋ค ๋ณด๋, ๋ฌธ๋ฒ ์์ฒด๊ฐ ๋ฑ ๋จ์ด์ง๊ฒ ํํ๋๋ค. ์ด ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋์ด ์ ์ํ๊ณ ๋ง๋ ํ๋ก๊ทธ๋จ์ ์๋ง์ ์ฌ๋๋ค์ด ๋ณด๊ณ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค. Perl ๊ฐ์ ๊ฒฝ์ฐ๋ Write Once, Read Never๋ผ๊ณ ๋ถ๋ฆด ์ ๋๋ก ํผ๋๋ฐฑ๊ณผ๋ ๋ด์ ์์๋๋ฐ, ํ์ด์ฌ์ ๋ฌธ๋ฒ์ด ํต์ผ๋์ด ์๋ค ๋ณด๋ Write Once, Read Infinity๊ฐ ๋์ด๋ฒ๋ ธ๋ค. ๊ทธ๋์ ํ๋ก๊ทธ๋จ ํ๋ ๋ง๋ค๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ค์ ์ํด ์์ฒญ๋ ์์ ํผ๋๋ฐฑ์ด ๋ค์ด์ค๊ฒ ๋์๊ณ , ์ด๋ ๊ณง ์์ฐ์ฑ ํฅ์์ผ๋ก๋ ์ด์ด์ก๋ค. ๊ดํ ํ์ด์ฌ์ด ์๊ฐ์ด ๊ฐ์๋ก ์ ์ ์จ์ด ์์นํ๋ ์ธ์ด๊ฐ ์๋ ๊ฒ์ด๋ค.
3.3. ๊ณผํ/๊ณตํ ์นํ[ํธ์ง]
Python์ ๊ณผํ๊ณผ ๊ณตํ ๋ถ์ผ์์ ํ์ํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค. ์ฐ์ ์ธ์ด ์์ฒด์ ์ผ๋ก 64๋นํธ๋ฅผ ๋์ด๊ฐ๋ ๋งค์ฐ ํฐ ์ ์๋ฅผ ์ง์ํ๋ค.[9][10] ๋ํ ํ์๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ decimal, fractions ๋ชจ๋์ ์ฌ์ฉํด ์์ซ์ ๊ณผ ์ ๋ฆฌ์๋ฅผ ์ ๋ฐํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ค๋ฃจ๋ ์ํธํ๊ณผ ํต๊ณ ๋ถ์ผ์์ ์ฐ๊ธฐ์ ์๋ง๋ค.
Python ์ํ๊ณ ๋ํ ๊ณตํ ๋ฐ ๊ณผํ ๋ถ์ผ๋ฅผ ๋นต๋นตํ๊ฒ ์ง์ํ๋ค. ๋ณต์กํ ์์น์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฐ์ฐ์ ์๋ง์ NumPy, SciPy, pandas, ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ๋ก ์๊ฐํํ๋ Matplotlib, ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ค๋ฃฐ ์ ์๋ Jupyter Notebook ๋ฑ์ ๊ฐ๋ ฅํ ํจํค์ง์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Python ๊ฐ๋ฐ์๋ค๋ ์ด๋ฌํ ์ฌ์ค์ ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ์ด ์ฐจ์์์ ๊ด๋ จ ํจํค์ง๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ฐ๋ น Ellipsis (
Python ์ํ๊ณ ๋ํ ๊ณตํ ๋ฐ ๊ณผํ ๋ถ์ผ๋ฅผ ๋นต๋นตํ๊ฒ ์ง์ํ๋ค. ๋ณต์กํ ์์น์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฐ์ฐ์ ์๋ง์ NumPy, SciPy, pandas, ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ๋ก ์๊ฐํํ๋ Matplotlib, ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ค๋ฃฐ ์ ์๋ Jupyter Notebook ๋ฑ์ ๊ฐ๋ ฅํ ํจํค์ง์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Python ๊ฐ๋ฐ์๋ค๋ ์ด๋ฌํ ์ฌ์ค์ ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ์ด ์ฐจ์์์ ๊ด๋ จ ํจํค์ง๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ฐ๋ น Ellipsis (
...) ์์๋ ์ฌ์ค์ NumPy ์ ์ฉ์ ์ฌ๋ผ์ด์ค ๊ฐ์ฒด๋ก ์ ๊ณตํ๋ค.[11] ๋ํ 3.5๋ถํฐ๋ ํ๋ ฌ๊ณฑ์ ์ํ @ ์ฐ์ฐ์๊ฐ ์ถ๊ฐ๋์๋ค.3.4. ๋ง๋ฅ ์ธ์ด[ํธ์ง]
PyPI#๋ผ๋ ํจํค์ง ์ ์ฅ์๊ฐ 2012๋
๊ตฌ์ถ๋์๋ค. 2018๋
10์ ๊ธฐ์ค 155,800 ์ฌ๊ฐ์ ํจํค์ง๋ฅผ ์ ๊ณตํ๋ค. ์ฌ๊ธฐ์ ๋ฑ๋ก๋ ํจํค์ง๋ค์ pip#๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ๋ด๋ ค๋ฐ์ ์ ์๋ค. ๋ค๋ง, PyPI๊ฐ ์ต์ด, ์ต๋์ ํจํค์ง ์ ์ฅ์๋ ์๋๋ค.
Python์ผ๋ก ์ง์ ๋ง๋ค์๊ฑฐ๋ ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ Wrapper๊ฐ ๊ผญ ์กด์ฌํ๋ค. ์ฌ์ค์ ๋ชปํ๋ ๊ฒ์ด ์๋ค. ์น ์ฌ์ดํธ ์๋ฒ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ฉด Python Web Framework๋ฅผ ์ณ๋ณด์(Django, Flask, Bottle ๋ฑ). ๊ธฐ๊ณํ์ต ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๊ณ ์ถ๋ค๋ฉด python machine learning์ด๋ผ ๊ฒ์ํ์(scikit-learn). ์ผ๊ตด์ธ์์ ์ฝ๋ ๋ช ์ค๋ก ํ ์๋ ์๋ค(OpenCV). ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ ๋ชจ๋์ธ tkinter ๋ชจ๋์ ์ด์ฉํ๋ฉด ๊ฐ๋จํ GUI ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค. ๊ฒ์๋ ๋ง๋ค ์ ์๋ค(Pygame). ๋น์ฃผ์ผ ๋ ธ๋ฒจ๋ ๋ง๋ค ์ ์๋ค(Ren'Py).
Python ๊ฐ์ง๊ณ ์คํ๋ ๋์ํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ๋ง๋๋ ๊ดด์๋ค๋ ์๋ค. Python์ผ๋ก SQL์ ๊ตฌํํ๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๋ ์๋ฆฌ๊ฐ ์์์ง๋ง ์ฐ๋ฆฌ์ Nerd๋ค์ ํด๋ด๊ณ ๋ง์๋ค. 2013๋ Python์ผ๋ก ๊ด๋ฆฌํ๋ DB ๊ฐ๋ ์ด ์กํ ์ดํ ์๋ง์ ํผ๋๋ฐฑ ๋์ 2015๋ ๋์ ์ฑ๊ณต. ์ฌ์ง์ด 2017๋ ํ๋์ค์ ์ค๊ฒฌ๊ธฐ์ ์์ Python DB ํ๋ก์ ํธ๋ฅผ ๋ณด๋๋ ์ ๋ง๋ก ํ์ฌ์ DB๋ฅผ ํ์ด์ฌ์ผ๋ก ๊ด๋ฆฌํ๋ ์ฌ์ ์ ๋ฒ๋ ค์ DBํ๋์ง ๋ชปํ๊ณ ์ ์ฅ๋๋ ํ์ฌ ๋ด๋ถ์ ํ์ผํ ์๋ฃ๋ค๊ณผ ๊ธฐ์กด์ DB์ ์ ์ฅ๋ ์๋ฃ๋ฅผ ์ ํฉ์ํค๋ ์ฌ์ ๊น์ง ํ๋ค ํ๋ค.
๋ฌผ๋ก ๊ทธ๋ ๋ค๊ณ Python๋ง ์ฐ๋ ๊ฒ์ด ๋ต์ ์๋๋ค. ์คํ ์๋(์ ํํ๋ CPython์ ์คํ ์๋)๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฐ ํธ์ด๋ผ, ๋น ๋ฅธ ์๋๊ฐ ํ์ํ ํ๋ก๊ทธ๋จ ์์ฑ์๋ ํ๊ณ๊ฐ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผํ์ฌ ์ฌ์ฉํ๋ C, C++๋ณด๋ค๋ ๋น์ฐํ ๋๋ฆฌ๊ณ , Lua, JavaScript, LISP ๊ณ์ด ์ธ์ด ๋ฑ ๋์ ์ธ์ด๋ค์ ์ ์ฒด๋ฅผ ์ฃผ์ฑ ๋๊ณ ๋น๊ตํด ๋ด๋ ์๋๊ฐ ๋น ๋ฅธ ํธ์ ์๋๋ค. Python์ฒ๋ผ ๊ฐ์ ๋จธ์ ์์์ ์คํ๋๋ Java, JavaScript ๋ฑ์ ์ธ์ด๋ค์ ๊ฒฝ์ฐ, ์๋ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ๋์ ํ๋ค. Python์ ์ฌ์ค์์ ํ์ค ๊ตฌํ์ฒด์ธ CPython์ JIT ์ปดํ์ผ์ ๋์ ํ์ง ์์๊ณ , JIT ์ปดํ์ผ์ ๋์ ํ ๋ณ๋์ ๊ตฌํ์ฒด์ธ PyPy๊ฐ ๋ฑ์ฅํ๋ค. ํต๊ณ ๋ถ์ผ ๋ฑ ํน์ ๋ถ์ผ์์๋ R๊ณผ ๊ฐ์ด ๊ทธ ๋ถ์ผ์ ํนํ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ ์๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ํ์ ์ธ์ด(dynamically typed language)๋ผ๋ ์ ์ด ํฐ ํ๋ก์ ํธ์์๋ ๋จ์ ์ผ๋ก ์์ฉํ์ฌ ์๋ฃ๊ตฌ์กฐ ์ค๊ณ๋ ๋๋ฒ๊น ์ด ์ด๋ ต๋ค๋ ์ง์ ๋ ์๋ค. ๋ค๋ง "์ ์ ํ์ vs. ๋์ ํ์ " ๋ ผ์์ ์๋ก์ ์ฅ๋จ์ ์ด ์์ผ๋ฉฐ ์ผ์ข ์ ์ข ๊ต ๋ ผ์์ผ๋ก ์ทจ๊ธ ๋ฐ๋๋ค. ์ผ๋ก๋ก OCaml ๊ฐ์ ๊ฐ๋ ฅํ ํ์ ์ธํฐํ์ด์ค(Hindley-Milner, System F ๋ฑ)๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ, ๋ชจ๋ ํ์ ์๋ฌ(!)๋ฅผ ์ปดํ์ผ ํ์์ ์ก์๋ผ ์ ์๋ ๋ฐ๋ฉด์, ๋ชจ๋ ๋ฒ๊ทธ๊ฐ ํ์ ์๋ฌ๋ ์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํ ์คํธ ๋ฐ ๋๋ฒ๊น ๊ณผ์ ์ ํ์ํ๋ฉฐ, ํ์ ์์คํ ์ผ๋ก ์ธํ ๋ถ๋ด ๋๋ฌธ์ ๋น ๋ฅธ ๊ตฌํ์๋ ๋ถ๋ด์ด ๋ ์ ์๋ค. ๋ฐ๋ฉด์ ๋์ ์ธ์ด๋ ๋น ๋ฅธ ๊ตฌํ์ ์ด์ ์ด ์์ง๋ง ํ์ ์๋ฌ๊ฐ ๋ง์ด ๋๋ ํน์ง์ด ์๋ค. ํ ๋ง๋๋ก, ์ปดํ์ผ ์ธ์ด์ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ ์๊ฐ์ ์ก์๋ผ ์ ์๋ ์ค๋ฅ๋ฅผ ๋ฒํ๊ฒ ๋๋ค๋ ์๋ฆฌ. Python์ผ๋ก parser๋ฅผ ๋ง์ด ์์ฑํด๋ดค๋ค๋ฉด, ์ญ์คํ๊ตฌ ์ฝ์ ์ซ์๋ฅผ string์ผ๋ก ์ ์ฅํ๋ค๊ฐ ๋์ค์ ์ฐ์ฐ์ ํ๋๋ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด์ ์๋ฌ๊ฐ ๋๊ฑฐ๋ ์ด์ํ ๊ฒฐ๊ณผ๊ฐ ๋์จ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ์ด๋ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์ ํ ์คํธ ์ธํธ๋ก ์ด๋ ์ ๋ ์ปค๋ฒํ ์ ์์ผ๋ฉฐ ์ต๊ทผ์ ์ถ์ธ์ ๋ถํฉํ๋ ๋ฐฉ์์ด๊ธฐ๋ ํ๋ค. ๋ํ Python 3.5๋ถํฐ๋ Type Hints๋ฅผ ์ด์ฉํด์ ๋ณ์๊ฐ ๊ฐ์ง ์ ์๋ ํ์ ์ ์ง์ ํ ์ ์๊ฒ ๋์๋ค. ์ฑ๋ฅ ํฅ์์ ๋์์ ์๋์ง๋ง ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ์ฐพ์๋ผ ์ ์์ผ๋ฉฐ PyCharm๊ณผ ๊ฐ์ IDE ํ๋ก๊ทธ๋จ์ ์ด์ฉํ๋ฉด ๋์์ ๋ฐ์ ์ ์๋ค.
๋น ๋ฅธ ์์ด๋์ด ๊ตฌํ์ด ์๋ช ์ธ ์ฐ๊ตฌ์์์ ๊ฐ๊ด์ ๋ฐ๊ณ ์๊ณ , ํ๊ตญ ๋ฐ์์๋ ๋น๋นํ ์ฃผ๋ฅ ์ธ์ด๋ก ๋์ฐ๋ฐ๊ณ ์๋ค. ์ธ์คํ๊ทธ๋จ, ์ ํ๋ธ, reddit ๋ฑ์ด Python์ ์ฃผ๋ก ์ฐ๊ณ ์๋ค๊ณ ์๋ ค์ ธ ์์ผ๋ฉฐ, ์ธ๊ตญ์ ๊ตฌ์ธ ์ฌ์ดํธ์๋ Python์ ํ ์ค ์๋ ์ฌ๋์ ๋ํ ์์๊ฐ ๋ง๋ค. ์ปดํจํฐ ๊ด๋ จ์ด ์๋ ์ด๊ณต๊ณ ์ ๋ฐ์์ ๋ง์ด ์ฐ์ด๋ MATLAB์ ์คํ์์ค๊ฐ ์๋๋ผ๋ ์ ์ด ์ต๊ทผ ์ถ์ธ์ ๋ง์ง ์์ ์ ์ง๊ฐ ์ข์์ง๊ณ ์๋ค.[12] CG ์ ๊ณ์์๋ ์ฌ์ค์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. MEL, MAXScript ๋ฑ ํด๋ณ๋ก ์์ฒด ์คํฌ๋ฆฝํธ ์ธ์ด๋ค์ด ๋๋ฆฝํ๊ณ ์์๋๋ฐ, ํ์ฌ๋ Python ์คํฌ๋ฆฝํ ์ ์ฃผ๋ ฅ์ผ๋ก ๋ฐ๊ณ ์๋ค.
์์ฆ์ ๊ฐํ ์ถ์ถ์ ๊ตญ์๋๋ผ๊ณ ํ ์ ์์ ๋งํผ ์๋ก์ด ์ธ์ด์ ํ๋ ์์ํฌ๊ฐ ๊ณ์ ๋ฑ์ฅํ๊ณ ์์ผ๋ฉฐ, ์์ ํด๋ฆฌ๊ธ๋กฏ(Polyglot[13]) ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ์ฉ์ด๊ฐ ๋ฑ์ฅํ๋ ์๋๋ค. ๋น์ฅ ๊ตฌ๊ธ๋ง ํด๋ C++, Java, Python์ ๊ณจ๊ณ ๋ฃจ ์์ด์ ์ด๋ค๊ณ ์๋ ค์ ธ ์์ผ๋ฉฐ, ๊ฒ์๋ ๋ฉ์ธ์ C++๋ก ์์ฑ๋์์ง๋ง ์คํฌ๋ฆฝํ ์ Python์ด๋ Lua๋ก ๋ ๊ฒฝ์ฐ(์๋ ๋ง์ด์ด์ ๋ฌธ๋ช , WOW ๋ฑ)๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ์ฐพ์๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ ํ์ํ๋ค๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ฐ๋ฆฌ์ง ์๊ณ ๋งค์ฐ ๋ฅ์ํ ์ ์๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๋ถํด์ผ ํ๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ, ๋์์ธ ํจํด, ํ ์คํธ ๊ธฐ๋ฒ, ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ(๋ฉํฐ์ค๋ ๋, ๋ฉํฐํ๋ก์ธ์ค) ๋ฑ์ ํ์ํ ์ง์์ ํคํ๊ฒ ๊ฟฐ๊ณ ์์ด์ผ ์ ๋๋ก ๋ ํ๋ก๊ทธ๋๋จธ/๊ฐ๋ฐ์๊ฐ ๋ ์ ์๋ค.
Python์ผ๋ก ํ ์ ์๋ ๊ฒ๋ค์ ๋ชจ์ ๋์ ๊ณณ๋ ์๋ค! Awesome Python
Python์ผ๋ก ์ง์ ๋ง๋ค์๊ฑฐ๋ ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ Wrapper๊ฐ ๊ผญ ์กด์ฌํ๋ค. ์ฌ์ค์ ๋ชปํ๋ ๊ฒ์ด ์๋ค. ์น ์ฌ์ดํธ ์๋ฒ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ฉด Python Web Framework๋ฅผ ์ณ๋ณด์(Django, Flask, Bottle ๋ฑ). ๊ธฐ๊ณํ์ต ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๊ณ ์ถ๋ค๋ฉด python machine learning์ด๋ผ ๊ฒ์ํ์(scikit-learn). ์ผ๊ตด์ธ์์ ์ฝ๋ ๋ช ์ค๋ก ํ ์๋ ์๋ค(OpenCV). ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ ๋ชจ๋์ธ tkinter ๋ชจ๋์ ์ด์ฉํ๋ฉด ๊ฐ๋จํ GUI ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค. ๊ฒ์๋ ๋ง๋ค ์ ์๋ค(Pygame). ๋น์ฃผ์ผ ๋ ธ๋ฒจ๋ ๋ง๋ค ์ ์๋ค(Ren'Py).
Python ๊ฐ์ง๊ณ ์คํ๋ ๋์ํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ๋ง๋๋ ๊ดด์๋ค๋ ์๋ค. Python์ผ๋ก SQL์ ๊ตฌํํ๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๋ ์๋ฆฌ๊ฐ ์์์ง๋ง ์ฐ๋ฆฌ์ Nerd๋ค์ ํด๋ด๊ณ ๋ง์๋ค. 2013๋ Python์ผ๋ก ๊ด๋ฆฌํ๋ DB ๊ฐ๋ ์ด ์กํ ์ดํ ์๋ง์ ํผ๋๋ฐฑ ๋์ 2015๋ ๋์ ์ฑ๊ณต. ์ฌ์ง์ด 2017๋ ํ๋์ค์ ์ค๊ฒฌ๊ธฐ์ ์์ Python DB ํ๋ก์ ํธ๋ฅผ ๋ณด๋๋ ์ ๋ง๋ก ํ์ฌ์ DB๋ฅผ ํ์ด์ฌ์ผ๋ก ๊ด๋ฆฌํ๋ ์ฌ์ ์ ๋ฒ๋ ค์ DBํ๋์ง ๋ชปํ๊ณ ์ ์ฅ๋๋ ํ์ฌ ๋ด๋ถ์ ํ์ผํ ์๋ฃ๋ค๊ณผ ๊ธฐ์กด์ DB์ ์ ์ฅ๋ ์๋ฃ๋ฅผ ์ ํฉ์ํค๋ ์ฌ์ ๊น์ง ํ๋ค ํ๋ค.
๋ฌผ๋ก ๊ทธ๋ ๋ค๊ณ Python๋ง ์ฐ๋ ๊ฒ์ด ๋ต์ ์๋๋ค. ์คํ ์๋(์ ํํ๋ CPython์ ์คํ ์๋)๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฐ ํธ์ด๋ผ, ๋น ๋ฅธ ์๋๊ฐ ํ์ํ ํ๋ก๊ทธ๋จ ์์ฑ์๋ ํ๊ณ๊ฐ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผํ์ฌ ์ฌ์ฉํ๋ C, C++๋ณด๋ค๋ ๋น์ฐํ ๋๋ฆฌ๊ณ , Lua, JavaScript, LISP ๊ณ์ด ์ธ์ด ๋ฑ ๋์ ์ธ์ด๋ค์ ์ ์ฒด๋ฅผ ์ฃผ์ฑ ๋๊ณ ๋น๊ตํด ๋ด๋ ์๋๊ฐ ๋น ๋ฅธ ํธ์ ์๋๋ค. Python์ฒ๋ผ ๊ฐ์ ๋จธ์ ์์์ ์คํ๋๋ Java, JavaScript ๋ฑ์ ์ธ์ด๋ค์ ๊ฒฝ์ฐ, ์๋ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ๋์ ํ๋ค. Python์ ์ฌ์ค์์ ํ์ค ๊ตฌํ์ฒด์ธ CPython์ JIT ์ปดํ์ผ์ ๋์ ํ์ง ์์๊ณ , JIT ์ปดํ์ผ์ ๋์ ํ ๋ณ๋์ ๊ตฌํ์ฒด์ธ PyPy๊ฐ ๋ฑ์ฅํ๋ค. ํต๊ณ ๋ถ์ผ ๋ฑ ํน์ ๋ถ์ผ์์๋ R๊ณผ ๊ฐ์ด ๊ทธ ๋ถ์ผ์ ํนํ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ ์๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ํ์ ์ธ์ด(dynamically typed language)๋ผ๋ ์ ์ด ํฐ ํ๋ก์ ํธ์์๋ ๋จ์ ์ผ๋ก ์์ฉํ์ฌ ์๋ฃ๊ตฌ์กฐ ์ค๊ณ๋ ๋๋ฒ๊น ์ด ์ด๋ ต๋ค๋ ์ง์ ๋ ์๋ค. ๋ค๋ง "์ ์ ํ์ vs. ๋์ ํ์ " ๋ ผ์์ ์๋ก์ ์ฅ๋จ์ ์ด ์์ผ๋ฉฐ ์ผ์ข ์ ์ข ๊ต ๋ ผ์์ผ๋ก ์ทจ๊ธ ๋ฐ๋๋ค. ์ผ๋ก๋ก OCaml ๊ฐ์ ๊ฐ๋ ฅํ ํ์ ์ธํฐํ์ด์ค(Hindley-Milner, System F ๋ฑ)๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ, ๋ชจ๋ ํ์ ์๋ฌ(!)๋ฅผ ์ปดํ์ผ ํ์์ ์ก์๋ผ ์ ์๋ ๋ฐ๋ฉด์, ๋ชจ๋ ๋ฒ๊ทธ๊ฐ ํ์ ์๋ฌ๋ ์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํ ์คํธ ๋ฐ ๋๋ฒ๊น ๊ณผ์ ์ ํ์ํ๋ฉฐ, ํ์ ์์คํ ์ผ๋ก ์ธํ ๋ถ๋ด ๋๋ฌธ์ ๋น ๋ฅธ ๊ตฌํ์๋ ๋ถ๋ด์ด ๋ ์ ์๋ค. ๋ฐ๋ฉด์ ๋์ ์ธ์ด๋ ๋น ๋ฅธ ๊ตฌํ์ ์ด์ ์ด ์์ง๋ง ํ์ ์๋ฌ๊ฐ ๋ง์ด ๋๋ ํน์ง์ด ์๋ค. ํ ๋ง๋๋ก, ์ปดํ์ผ ์ธ์ด์ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ ์๊ฐ์ ์ก์๋ผ ์ ์๋ ์ค๋ฅ๋ฅผ ๋ฒํ๊ฒ ๋๋ค๋ ์๋ฆฌ. Python์ผ๋ก parser๋ฅผ ๋ง์ด ์์ฑํด๋ดค๋ค๋ฉด, ์ญ์คํ๊ตฌ ์ฝ์ ์ซ์๋ฅผ string์ผ๋ก ์ ์ฅํ๋ค๊ฐ ๋์ค์ ์ฐ์ฐ์ ํ๋๋ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด์ ์๋ฌ๊ฐ ๋๊ฑฐ๋ ์ด์ํ ๊ฒฐ๊ณผ๊ฐ ๋์จ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ์ด๋ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋์ ํ ์คํธ ์ธํธ๋ก ์ด๋ ์ ๋ ์ปค๋ฒํ ์ ์์ผ๋ฉฐ ์ต๊ทผ์ ์ถ์ธ์ ๋ถํฉํ๋ ๋ฐฉ์์ด๊ธฐ๋ ํ๋ค. ๋ํ Python 3.5๋ถํฐ๋ Type Hints๋ฅผ ์ด์ฉํด์ ๋ณ์๊ฐ ๊ฐ์ง ์ ์๋ ํ์ ์ ์ง์ ํ ์ ์๊ฒ ๋์๋ค. ์ฑ๋ฅ ํฅ์์ ๋์์ ์๋์ง๋ง ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ์ฐพ์๋ผ ์ ์์ผ๋ฉฐ PyCharm๊ณผ ๊ฐ์ IDE ํ๋ก๊ทธ๋จ์ ์ด์ฉํ๋ฉด ๋์์ ๋ฐ์ ์ ์๋ค.
๋น ๋ฅธ ์์ด๋์ด ๊ตฌํ์ด ์๋ช ์ธ ์ฐ๊ตฌ์์์ ๊ฐ๊ด์ ๋ฐ๊ณ ์๊ณ , ํ๊ตญ ๋ฐ์์๋ ๋น๋นํ ์ฃผ๋ฅ ์ธ์ด๋ก ๋์ฐ๋ฐ๊ณ ์๋ค. ์ธ์คํ๊ทธ๋จ, ์ ํ๋ธ, reddit ๋ฑ์ด Python์ ์ฃผ๋ก ์ฐ๊ณ ์๋ค๊ณ ์๋ ค์ ธ ์์ผ๋ฉฐ, ์ธ๊ตญ์ ๊ตฌ์ธ ์ฌ์ดํธ์๋ Python์ ํ ์ค ์๋ ์ฌ๋์ ๋ํ ์์๊ฐ ๋ง๋ค. ์ปดํจํฐ ๊ด๋ จ์ด ์๋ ์ด๊ณต๊ณ ์ ๋ฐ์์ ๋ง์ด ์ฐ์ด๋ MATLAB์ ์คํ์์ค๊ฐ ์๋๋ผ๋ ์ ์ด ์ต๊ทผ ์ถ์ธ์ ๋ง์ง ์์ ์ ์ง๊ฐ ์ข์์ง๊ณ ์๋ค.[12] CG ์ ๊ณ์์๋ ์ฌ์ค์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. MEL, MAXScript ๋ฑ ํด๋ณ๋ก ์์ฒด ์คํฌ๋ฆฝํธ ์ธ์ด๋ค์ด ๋๋ฆฝํ๊ณ ์์๋๋ฐ, ํ์ฌ๋ Python ์คํฌ๋ฆฝํ ์ ์ฃผ๋ ฅ์ผ๋ก ๋ฐ๊ณ ์๋ค.
์์ฆ์ ๊ฐํ ์ถ์ถ์ ๊ตญ์๋๋ผ๊ณ ํ ์ ์์ ๋งํผ ์๋ก์ด ์ธ์ด์ ํ๋ ์์ํฌ๊ฐ ๊ณ์ ๋ฑ์ฅํ๊ณ ์์ผ๋ฉฐ, ์์ ํด๋ฆฌ๊ธ๋กฏ(Polyglot[13]) ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ์ฉ์ด๊ฐ ๋ฑ์ฅํ๋ ์๋๋ค. ๋น์ฅ ๊ตฌ๊ธ๋ง ํด๋ C++, Java, Python์ ๊ณจ๊ณ ๋ฃจ ์์ด์ ์ด๋ค๊ณ ์๋ ค์ ธ ์์ผ๋ฉฐ, ๊ฒ์๋ ๋ฉ์ธ์ C++๋ก ์์ฑ๋์์ง๋ง ์คํฌ๋ฆฝํ ์ Python์ด๋ Lua๋ก ๋ ๊ฒฝ์ฐ(์๋ ๋ง์ด์ด์ ๋ฌธ๋ช , WOW ๋ฑ)๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ์ฐพ์๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ ํ์ํ๋ค๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ฐ๋ฆฌ์ง ์๊ณ ๋งค์ฐ ๋ฅ์ํ ์ ์๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๋ถํด์ผ ํ๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ, ๋์์ธ ํจํด, ํ ์คํธ ๊ธฐ๋ฒ, ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ(๋ฉํฐ์ค๋ ๋, ๋ฉํฐํ๋ก์ธ์ค) ๋ฑ์ ํ์ํ ์ง์์ ํคํ๊ฒ ๊ฟฐ๊ณ ์์ด์ผ ์ ๋๋ก ๋ ํ๋ก๊ทธ๋๋จธ/๊ฐ๋ฐ์๊ฐ ๋ ์ ์๋ค.
Python์ผ๋ก ํ ์ ์๋ ๊ฒ๋ค์ ๋ชจ์ ๋์ ๊ณณ๋ ์๋ค! Awesome Python
3.5. ๊ต์ก[ํธ์ง]
ํ์ด์ฌ์ ์์ ํน์ง ๋๋ฌธ์ ๊ต์ก์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๊ฐ๊ด๋ฐ๊ณ ์๋ค. ํ๊ตญ, ๋ฏธ๊ตญ์ ์ฌ๋ฌ ๋ํ๊ต ํ๋ก๊ทธ๋๋ฐ ๊ต์ก๋ค์ ๊ฐ๋ก ์์
์ธ์ด๋ฅผ C, C++๋ Java์์ Python์ผ๋ก ์ฎ๊ฒจ๊ฐ๋ ์ถ์ธ๋ค.
์ฃผ์ํ ์ ์ Python์ด ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค๋ ๊ฑด ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์ ๋์จ ๋ง์ด๋ผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ง์ ๋ ๋ค๋ฅธ ์ธ์ด์ ๋นํด ๋น๊ต์ ์ผ๋ก ์ฝ๋ค๋ ๋ป์ด์ง, ๊น๊ฒ ํ๊ณ ๋ค์ด๊ฐ๊ฑฐ๋ ํน์ ์ 'ํ์ด์ฌ์ค๋ฌ์(pythonic)'ํ ์ฝ๋ฉ์ ํ๋ ค๋ฉด ์๊ฐ๋ณด๋ค ์ ๊ฒฝ์ธ ๊ฒ๋ ๋ง๊ณ ๋์ ์ธ์ด์ ์ต์ํด์ ธ ์์ด์ผ ํ๋ค. ๋์ฑ์ด ์ปดํ์ผ๋ฌ ์์ด ํ๋ก๊ทธ๋๋ฐ ํ๋ ๊ฒ์ ๊นก์ด๋ณด์๊ฒ ๊ถ์ฅํ ๋งํ ๊ฒ์ด ์๋๊ฒ, ์ ์ ์ธ์ด์ ๋ํ ๊ฐ๋ ๋ ์์ด ๋์ ์ธ์ด๋ฅผ ์ก์๋ค๊ฐ๋ ์คํ๋ ค ๋ ํท๊ฐ๋ฆด ์ ์๋ค. ์ ๋ง์ดํฌ๋ก์ํํธ๊ฐ TypeScript๋ฅผ ๋ง๋ค์๋์ง ์ ์ ์๊ฐํด ๋ณด๊ธฐ ๋ฐ๋๋ค. ๋์ฑ์ด ํ์ด์ฌ์ ํธ์ง์ฆ์ด ์์ฌ๋ ์ ๋๋ก ๊ฐ์ฒด ์์ฃผ๋ก ๋์๊ฐ๊ธด ํ์ง๋ง, ์ธ์ด์ ํจ๋ฌ๋ค์์ ๋ณด๋ฉด ์ ์ฐจ์งํฅ, ๊ฐ์ฒด์งํฅ, ํจ์ํ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ์ธ์ด๋ค. ๊ทน๋จ์ ์ผ๋ก OOP๋ฅผ ์งํฅํ๋ Java๋ C#๋ณด๋ค[14] ๋ ์ ๊ฒฝ์จ์ผ ํ ๊ฒ์ด ๋ง๋ค๋ ์ด์ผ๊ธฐ. ํ์ฌํผ ํ๋ก๊ทธ๋๋ฐ ์์ฒด๋ฅผ ๋ง๋ฅ ์ฌ์ด ๊ฒ์ผ๋ก ์๊ฐํ๋ค๋ฉด ํฐ ์ฝ ๋ค์น๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๊ฒ ํ ์ ์๋ ๊ฒ๊ณผ ์ข๊ฒ ํ๋ ๊ฒ์๋ ํฐ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ, '์ข์' ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ์ ์ญ๋์ ํฌ๊ฒ ์ข์ฐ๋๋ค.
์ฃผ์ํ ์ ์ Python์ด ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค๋ ๊ฑด ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์ ๋์จ ๋ง์ด๋ผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ง์ ๋ ๋ค๋ฅธ ์ธ์ด์ ๋นํด ๋น๊ต์ ์ผ๋ก ์ฝ๋ค๋ ๋ป์ด์ง, ๊น๊ฒ ํ๊ณ ๋ค์ด๊ฐ๊ฑฐ๋ ํน์ ์ 'ํ์ด์ฌ์ค๋ฌ์(pythonic)'ํ ์ฝ๋ฉ์ ํ๋ ค๋ฉด ์๊ฐ๋ณด๋ค ์ ๊ฒฝ์ธ ๊ฒ๋ ๋ง๊ณ ๋์ ์ธ์ด์ ์ต์ํด์ ธ ์์ด์ผ ํ๋ค. ๋์ฑ์ด ์ปดํ์ผ๋ฌ ์์ด ํ๋ก๊ทธ๋๋ฐ ํ๋ ๊ฒ์ ๊นก์ด๋ณด์๊ฒ ๊ถ์ฅํ ๋งํ ๊ฒ์ด ์๋๊ฒ, ์ ์ ์ธ์ด์ ๋ํ ๊ฐ๋ ๋ ์์ด ๋์ ์ธ์ด๋ฅผ ์ก์๋ค๊ฐ๋ ์คํ๋ ค ๋ ํท๊ฐ๋ฆด ์ ์๋ค. ์ ๋ง์ดํฌ๋ก์ํํธ๊ฐ TypeScript๋ฅผ ๋ง๋ค์๋์ง ์ ์ ์๊ฐํด ๋ณด๊ธฐ ๋ฐ๋๋ค. ๋์ฑ์ด ํ์ด์ฌ์ ํธ์ง์ฆ์ด ์์ฌ๋ ์ ๋๋ก ๊ฐ์ฒด ์์ฃผ๋ก ๋์๊ฐ๊ธด ํ์ง๋ง, ์ธ์ด์ ํจ๋ฌ๋ค์์ ๋ณด๋ฉด ์ ์ฐจ์งํฅ, ๊ฐ์ฒด์งํฅ, ํจ์ํ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ์ธ์ด๋ค. ๊ทน๋จ์ ์ผ๋ก OOP๋ฅผ ์งํฅํ๋ Java๋ C#๋ณด๋ค[14] ๋ ์ ๊ฒฝ์จ์ผ ํ ๊ฒ์ด ๋ง๋ค๋ ์ด์ผ๊ธฐ. ํ์ฌํผ ํ๋ก๊ทธ๋๋ฐ ์์ฒด๋ฅผ ๋ง๋ฅ ์ฌ์ด ๊ฒ์ผ๋ก ์๊ฐํ๋ค๋ฉด ํฐ ์ฝ ๋ค์น๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๊ฒ ํ ์ ์๋ ๊ฒ๊ณผ ์ข๊ฒ ํ๋ ๊ฒ์๋ ํฐ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ, '์ข์' ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ์ ์ญ๋์ ํฌ๊ฒ ์ข์ฐ๋๋ค.
4. ๋ฌธ์ ์ [ํธ์ง]
ํ์ด์ฌ์ ์์คํ
์ ๊ฑด๋๋ฆฌ๊ฑฐ๋ ๋ฐ๋ณต์ฐ์ฐ์ด ๋ง์ ๊ฒ์ ํ๊ธฐ ์ด๋ ต์ง๋ง python num ์ฒ๋ผ ๋ฐ๋ก ๋ชจ๋์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ๊ฑฑ์ ํ ํ์๋ ์๋ค(๊ทธ๋๋ python num์ ์ฌ์ฉํด๋ ๋๋ฆฐ๊ฑด ๋๋ฆฌ๋ค;;).
์ด ๋จ์ ์ ๋ฐ๋ณต ์ฐ์ฐ์ด ์๋ C๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ฉด ์ฌ๋ผ์ง๋ค.
์ด ๋จ์ ์ ๋ฐ๋ณต ์ฐ์ฐ์ด ์๋ C๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ฉด ์ฌ๋ผ์ง๋ค.
4.1. ๋ฉํฐ์ค๋ ๋ฉ ๋ถ๊ฐ ๋ฌธ์ [ํธ์ง]
ํ์ด์ฌ์ ๋ฉํฐ์ค๋ ๋ฉ์ ์ง์ํ๊ธฐ ์ํ์ฌ GIL(Global Interpreter Lock), ์ฆ ์ ์ญ ์ธํฐํ๋ฆฌํฐ ๋ฝ์ ๋์
ํ์ฌ ์ฌ์ฉํ๊ฒ ๋์๋ค. ๋ฐ๋ผ์, python ์ค๋ ๋ 10๊ฐ๋ฅผ ๋ง๋ค์ด๋ ์ค์ Pthread/์๋์ฐ ์ค๋ ๋๊ฐ 10๊ฐ๊ฐ ๋ง๋ค์ด์ง๊ธด ํ๋๋ฐ, GIL๋๋ฌธ์ ๊ฐ์ค ๋์์ ํ๋๋ฐ์ ์๋์๊ฐ๋ ๊ธฐ์ดํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค. ๋ฌผ๋ก , ๋ด๋ถ์ ์ผ๋ก IO์์
์ด ์์ ์ ๋ฐ๋ก ๋ค๋ฅธ ์ค๋ ๋๋ก ๋ฌธ๋งฅ ๊ตํ์ ํด์ฃผ๊ณ , ๋ฐ์ดํธ ์ฝํธ๋ฅผ 100๋ฒ ์คํํ ๋ค์์๋ ์ธํฐํ๋ฆฌํฐ ์ฐจ์์์ ๋ค๋ฅธ ์ค๋ ๋๋ก ๊ต์ฒด ํด์ฃผ๋ฏ๋ก ๋์ ์์
๋น์ทํ ํจ๊ณผ๊ฐ ๋๋ค. ์ด๊ฒ์ ๊ตฌํ์ด ๋งค์ฐ ์ฌ์์ง๊ณ ๋น ๋ฅธ ๊ฐ๋ฐ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ผ๋, ๋ค์ค ์ฝ์ด CPU๊ฐ ๋ณดํธํ๋ 2006๋
์ดํ์๋ ๋ค์ค ์ฝ์ด๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๋ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๋๋ฌธ์ ์ฑ๋ฅ์์ ๋ฐ๋ฆฐ๋ค๋ ํ๊ฐ๋ฅผ ๋ฐ๊ฒ ๋์๋ค. ๋ง์ผ ํน์ ํ๋ก๊ทธ๋จ์ ์์งํ๊ฒ CPU ์ฝ์ด๋ฅผ 2๊ฐ ์ด์ ๋์ํ๋ ค๊ณ ํ ๊ฒฝ์ฐ, ๋ฎคํ
์ค(MutEx), ์ฆ ํ ์ค๋ ๋์ ์ฌ๋ฌ ๊ฐ์ CPU๊ฐ ์ฐ์ฐ์ ํํ์ฌ ๋ด๋ถ ์ ๋ณด๋ฅผ ์ค์ผ ์ํค๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ญํ ์ ๋งก๋ GIL์ด ๋ณ๋ชฉ ํ์์ ์ผ์ผ์ผ ์ฝ์ด ํ๋๋ฅผ ์ธ ๋๋ณด๋ค ์คํ๋ ค ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋๋ค๋ ๊ฒ. ๊ตฌ๊ธ ๋ด๋ถ์์ ์ด๋ฏธ ๊ฐ๋ฃจ๊ฐ ๋๋๋ก ๊น์ธ ๋ถ๋ถ์ด๋ค.
๋๋ถ์ด, ์์ ์ Python์๋ CPU-boundํ ์ค๋ ๋๊ฐ I/O-boundํ ์ค๋ ๋์ ํจ๊ป ๋์๊ฐ ๋, I/O-boundํ ์ค๋ ๋๊ฐ ์คํ๋์ด์ผ ํ ์ํฉ์์๋ context switch๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค. ์ด ๋๋ฌธ์ CPU-bound ์ค๋ ๋๊ฐ GIL์ ์ง๋์น๊ฒ ์ค๋ ์ ์ ํ๊ฒ ๋๋ฉด์ I/O ๋ฐ์ ์๋๊ฐ ๋๋ ค์ง๊ณ , ๋ค๋ฅธ ์ค๋ ๋๋ GIL์ ํ๋ํ๋ ค๊ณ ๊ณ์ ์๋ํ๋๋ผ CPU ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋์๋ค. ์ด์ ๋ํด ํ์ด์ฌ ์ ๋ฌธ๊ฐ์ธ David Beazley๊ฐ 2009๋ ์ Mindblowing Python GIL์ด๋ผ๋ ๊ฐ์ฐ์์ ์ง์ ํ์๋ค.[15] ์ดํ Antoine Pitrou๋ผ๋ ๊ฐ๋ฐ์๊ฐ GIL์ ๋ฏ์ด๊ณ ์ณ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๊ณ , Python 3.2๋ถํฐ๋ ์๋ก์ด GIL์ด ์ ์ฉ๋์ด์ ์ฑ๋ฅ์ด ์ด๋ ์ ๋ ๊ฐ์ ๋์๋ค.
์ด๋ฐ ๋ฌธ์ ์ ๋๋ฌธ์ ํ์ด์ฌ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋๋ ๋ค์ค ์ค๋ ๋๊ฐ ์๋ ๋ค์ค ํ๋ก์ธ์ค๋ก GIL์ ์ฐํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. 2008๋ ์ดํ์ multiprocessing์ด๋ผ๋ ๋ชจ๋์ ์ ๊ณตํ๋๋ฐ ์ด ๋ชจ๋์ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๋ค์ค ์ฝ์ด ์ฌ์ฉ ์ ์ฑ๋ฅ์ ํฅ์์ ๊พํ๊ณ ์๋ค.
๋จ, CPU ๋ถํ๊ฐ ํฐ ์์ ์ ๋๋ฆฌ๋ ๊ฒ์ด ์๋๋ฉด GIL์ ์ฒด๊ฐํ๊ธฐ๋ ์๊ฐ๋ณด๋ค ์ฝ์ง ์๋ค. ๋ค์ค ์ค๋ ๋ฉ์ผ๋ก CPU์ ์ฌ๋ฌ ์ฝ์ด๋ฅผ ์ต๋ํ ์ด์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ GIL๊ฐ ๊ต์ฅํ ์์ฌ์ด ์ด์์ง๋ง, CPU๋ฅผ ๋ณ๋ก ์ฐ์ง ์๊ฑฐ๋ I/O๊ฐ ์ฃผ๊ฐ ๋๋ ์์ ์ ์ ์๋ฏธํ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์๋ค. ๊ฒ๋ค๊ฐ ์ด์คํ๊ฒ ์ฝ์ด ๋ช๊ฐ ๊น์ง๊น์ง ์ด์ฉํด์ ๊ณ์ฐํ๋ ๊ฒ๋ณด๋ค๋ ๊ทธ๋ฅ C์ธ์ด๋ก ๋ชจ๋์ ์ง์ ๋ถ์ด๋ ๊ฒ ๋ ๋น ๋ฅด๋ค. ์ฆ, python์์ CPU๋ฅผ ๋ง์ด ๋จน๋ ๋ถ๋ถ์ C ๋ชจ๋์ ์ง์ ๋ถ์ด๊ฑฐ๋, ์ด๋ฏธ C ๋ชจ๋๋ก ์ง์ฌ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋(Numpy, Scipy ๋ฑ), ํ์ํ๋ค๋ฉด multiprocessing ๋ชจ๋์ ์ด์ฉํ์ฌ ๋ฉํฐ์ฝ์ด๋ฅผ ํ์ฉํ๋ ํธ. ๊ทธ ์ด์์ CPU-heavyํ ์์ ์ ์ฒ์๋ถํฐ C, C++๋ก ์ง๋ ๊ฒ ๋ง๋ค.
์์ธํ ์๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋งํฌ๋ค์ ์ฐธ์กฐ.(๋๋ฌด ์ค๋๋ ๋งํฌ๋ค์ด๋ผ ์ฐจ๋ผ๋ฆฌ ์ธํฐ๋ท ๊ฒ์ํด์ ์ต๊ทผ ๊ธ๋ค์ ๋ณด๊ธฐ ๋ฐ๋๋ค.)
๋๋ถ์ด, ์์ ์ Python์๋ CPU-boundํ ์ค๋ ๋๊ฐ I/O-boundํ ์ค๋ ๋์ ํจ๊ป ๋์๊ฐ ๋, I/O-boundํ ์ค๋ ๋๊ฐ ์คํ๋์ด์ผ ํ ์ํฉ์์๋ context switch๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค. ์ด ๋๋ฌธ์ CPU-bound ์ค๋ ๋๊ฐ GIL์ ์ง๋์น๊ฒ ์ค๋ ์ ์ ํ๊ฒ ๋๋ฉด์ I/O ๋ฐ์ ์๋๊ฐ ๋๋ ค์ง๊ณ , ๋ค๋ฅธ ์ค๋ ๋๋ GIL์ ํ๋ํ๋ ค๊ณ ๊ณ์ ์๋ํ๋๋ผ CPU ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋์๋ค. ์ด์ ๋ํด ํ์ด์ฌ ์ ๋ฌธ๊ฐ์ธ David Beazley๊ฐ 2009๋ ์ Mindblowing Python GIL์ด๋ผ๋ ๊ฐ์ฐ์์ ์ง์ ํ์๋ค.[15] ์ดํ Antoine Pitrou๋ผ๋ ๊ฐ๋ฐ์๊ฐ GIL์ ๋ฏ์ด๊ณ ์ณ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๊ณ , Python 3.2๋ถํฐ๋ ์๋ก์ด GIL์ด ์ ์ฉ๋์ด์ ์ฑ๋ฅ์ด ์ด๋ ์ ๋ ๊ฐ์ ๋์๋ค.
์ด๋ฐ ๋ฌธ์ ์ ๋๋ฌธ์ ํ์ด์ฌ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋๋ ๋ค์ค ์ค๋ ๋๊ฐ ์๋ ๋ค์ค ํ๋ก์ธ์ค๋ก GIL์ ์ฐํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. 2008๋ ์ดํ์ multiprocessing์ด๋ผ๋ ๋ชจ๋์ ์ ๊ณตํ๋๋ฐ ์ด ๋ชจ๋์ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๋ค์ค ์ฝ์ด ์ฌ์ฉ ์ ์ฑ๋ฅ์ ํฅ์์ ๊พํ๊ณ ์๋ค.
๋จ, CPU ๋ถํ๊ฐ ํฐ ์์ ์ ๋๋ฆฌ๋ ๊ฒ์ด ์๋๋ฉด GIL์ ์ฒด๊ฐํ๊ธฐ๋ ์๊ฐ๋ณด๋ค ์ฝ์ง ์๋ค. ๋ค์ค ์ค๋ ๋ฉ์ผ๋ก CPU์ ์ฌ๋ฌ ์ฝ์ด๋ฅผ ์ต๋ํ ์ด์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ GIL๊ฐ ๊ต์ฅํ ์์ฌ์ด ์ด์์ง๋ง, CPU๋ฅผ ๋ณ๋ก ์ฐ์ง ์๊ฑฐ๋ I/O๊ฐ ์ฃผ๊ฐ ๋๋ ์์ ์ ์ ์๋ฏธํ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์๋ค. ๊ฒ๋ค๊ฐ ์ด์คํ๊ฒ ์ฝ์ด ๋ช๊ฐ ๊น์ง๊น์ง ์ด์ฉํด์ ๊ณ์ฐํ๋ ๊ฒ๋ณด๋ค๋ ๊ทธ๋ฅ C์ธ์ด๋ก ๋ชจ๋์ ์ง์ ๋ถ์ด๋ ๊ฒ ๋ ๋น ๋ฅด๋ค. ์ฆ, python์์ CPU๋ฅผ ๋ง์ด ๋จน๋ ๋ถ๋ถ์ C ๋ชจ๋์ ์ง์ ๋ถ์ด๊ฑฐ๋, ์ด๋ฏธ C ๋ชจ๋๋ก ์ง์ฌ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋(Numpy, Scipy ๋ฑ), ํ์ํ๋ค๋ฉด multiprocessing ๋ชจ๋์ ์ด์ฉํ์ฌ ๋ฉํฐ์ฝ์ด๋ฅผ ํ์ฉํ๋ ํธ. ๊ทธ ์ด์์ CPU-heavyํ ์์ ์ ์ฒ์๋ถํฐ C, C++๋ก ์ง๋ ๊ฒ ๋ง๋ค.
์์ธํ ์๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋งํฌ๋ค์ ์ฐธ์กฐ.(๋๋ฌด ์ค๋๋ ๋งํฌ๋ค์ด๋ผ ์ฐจ๋ผ๋ฆฌ ์ธํฐ๋ท ๊ฒ์ํด์ ์ต๊ทผ ๊ธ๋ค์ ๋ณด๊ธฐ ๋ฐ๋๋ค.)
ํ์ง๋ง ๋๊ท๋ชจ ์ฐ์ฐ์ ๋ฉํฐ์ฝ์ด์ ์ฑ๋ฅ ํฅ์์ ๋ณด๊ธฐ ์ํ ๊ฒ ๋ง๊ณ ๋, I/O๊ฐ ์ฃผ๊ฐ ๋๋ ์์ (์ฆ, ์ฌ๋ฌ ๊ฐ์ I/O ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ)์ ์ํด์ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ ,[16] ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ณต์กํ ๋๊ธฐํ๋ฅผ ํด์ผ ํ๋ ๋ฉํฐ์ฐ๋ ๋ฉ์ ์ฌ์ฉํ๋ ๊ฑด ๋ญ๋น์ด๋ค. ์๋ํ๋ฉด ๋๋ฒ๊น ๋ ํ๋ค ๋ฟ๋ง ์๋๋ผ, ์ค์ ๋ก๋ I/O๋ฅผ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ์ค์ I/O๊ฐ ๋ฐ์ํ์ ๋ ํ์ํ ์ฒ๋ฆฌ ์์ ์ ์ํํ๋ ์๊ฐ๋ณด๋ค ์๋ฑํ ๊ธด ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์์๋ง ๋ญ๋นํ๋ ๊ผด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ Go๋ Erlang ๊ฐ์ ์ต๊ทผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์ฝ๋ฃจํด์ด๋ ๊ฐ๋ ์ ๋์ ํด[17] ์ด๋ฌํ "event multiplexing"์ ์ฑ๊ธ์ค๋ ๋๋ก๋ ๊ตฌํํ ์ ์๊ฒ ํ๊ณ ์๋ค. ํนํ ๋ฉํฐ์ฐ๋ ๋ฉํ ๋ ํ์ํ ๊ฐ์ข ๋๊ธฐํ ๋ฌธ์ ์์ด ๋ง์น ์ฑ๊ธ ์ค๋ ๋ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉด์๋ ๊ทธ๋ฌํ ์ฝ๋๋ค์ด "๋์์" ๋์ํ๋ ๊ฒ์ฒ๋ผ ์คํํด์ฃผ๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์ ๋งค์ฐ ํธํ๋ค. ์ค์ ๋ก๋ ๊ฐ ์ด๋ฒคํธ์ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ๋ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ ์ ๊น์ง ๋น๋ ์๊ฐ์ ๋ค๋ฅธ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์คํ์์ผ์ฃผ๋ ๋ฐฉ์์ผ๋ก, ์๋ถํ ๊ณผ ๋น์ทํ์ง๋ง ๋ฌธ๋งฅ ์ ํ์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋์์ ๋ช ์์ ์ผ๋ก ๋ค์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ ํ์๊ฐ ์์ ๋ ํ๋ ฅ์ ์ผ๋ก ๋ฐ์ํ๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
C๊ฐ์ ์ธ์ด์์ ์ด๋ฌํ ์ฝ๋ฃจํด ์ง์์ด ์ ์ ๋๋ ์ด์ ๋, ์ธ์ด์ ์ฐจ์์์ ํจ์ ์ค๊ฐ์ ์คํ์ ๋ฉ์ถ๊ณ ๋ค๋ฅธ ํจ์๋ฅผ ์คํํ ์ ์๊ฒ ํด์ค์ผ ํ๋๋ฐ ์ค๋ ๋ ๋ณ๋ก stack์ด 1๊ฐ๋ฐ์ ์๋ ๊ตฌ์กฐ์์๋ ๊ตฌํ์ด ์ด๋ ต๊ณ ํ๋์ ํจ์๋ก ์ง์ผ ํ ๋ด์ฉ์ ์ฌ๋ฌ ๊ฐ์ callback ํจ์๋ก ์ชผ๊ฐ๋ฉด ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๋ค๋ ๋จ์ ์ด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฐ callbackํํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ค. ํ์ฌ๋ก์จ๋ ์ด๋ฐ ์ฝ๋ฐฑ ๋ฐฉ์์ด ์ ์ฐํ๋ฉด์ ํผํฌ๋จผ์ค๊ฐ ์ข์ ๋ฐฉ์์ด์ง๋ง ์ธ์ด์ ์ผ๋ก ์ฝ๊ฐ ๋๋ฝ๋ค. ์์์ ๊ธฐ์ ํ Stackless Python์์ ์ฝ๋ฃจํด์ ๋จผ์ ์ง์ํ ์ ์์๋ ๊ฒ๋ ์ด๋ฐ ๋ฐฐ๊ฒฝ์ด ์๋ค.
๋คํํ Python์ (stackless๊ฐ ์๋๋๋ผ๋) yield ํค์๋๋ฅผ ํตํด ํจ์ ์คํ ํ๋ฆ์ ์ ์ดํ ์ ์๋ค. Python 3.4 ๋ฒ์ ๋ถํฐ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ข ํ์ผ ์ ์ถ๋ ฅ, subprocess, socket ํต์ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ ์ฝ๋ฃจํดํ ํด์ฃผ๋ asyncio ํจํค์ง๊ฐ ๊ธฐ๋ณธ ํ์ฌ๋์๋ค. Python 3.5 ๋ถํฐ๋ C#๋ฅผ ๋ณธ๋ด async ํจ์ ์ ์ธ์์ await ํค์๋๊ฐ ํฌํจ๋์ด asyncio ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ ์๋ฐ์ ์๋ ์ฝ๋ฃจํด ๊ธฐ๋ฅ์ ๋ค๋ฅธ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณด๋ค ์ฝ๊ฒ ์ง์ํ ์ ์๋๋ก ๋ฐ๋๊ณ , ์ฝ๋ฃจํด ๋ด๋ถ์์์ ์์ธ์ฒ๋ฆฌ ๊ณผ์ ์ด ๊ฐ์ ๋์๋ค.
4.1.1. ๋ฉํฐ์ฝ์ด๋ก ํ๋ก๊ทธ๋จ ๋๋ฆฌ๊ธฐ[ํธ์ง]
์ ๋์ค, ๋ฆฌ๋
์ค, macOS์ ํ์ด์ฌ์์ ๋ฉํฐ์ฝ์ด๋ฅผ ์ฐ๋ ค๋ฉด ์๋์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์์ค ์ฝ๋๋ฅผ ์ ์ผ๋ฉด ๋๋ค.
์๋์ฐ์ฆ๋ ํฌํฌ(fork) ํจ์๊ฐ ์์ด ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
[python] ํ์ด์ฌ์ผ๋ก ์๋ํด๋ณด๋ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์ฑ, ์๊ณ ์๋ ์ฝ์ด๋ค์ ๊นจ์ฐ๊ธฐ 2015. 11. 24.
import multiprocessing as mp
def work(job_list):
return job_list + 1
p = mp.Pool(4)
p.map_async(work, job_list).get()์๋์ฐ์ฆ๋ ํฌํฌ(fork) ํจ์๊ฐ ์์ด ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
if __name__ == '__main__':
mp.freeze_support()[python] ํ์ด์ฌ์ผ๋ก ์๋ํด๋ณด๋ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์ฑ, ์๊ณ ์๋ ์ฝ์ด๋ค์ ๊นจ์ฐ๊ธฐ 2015. 11. 24.
4.2. ๋์กํ ํจํค์ง ๊ด๋ฆฌ ๋ฐ ํ์ ํธํ ์๋ฌ[ํธ์ง]
์ต์ ์ธ์ด์ ๋นํด ํจํค์ง๋ฅผ ์ค์นํ๊ฑฐ๋ ๋ง๋ค์ด ๋ฐฐํฌํ๋ ๋ฐฉ์์ด ๋ณต์กํ๋ค. ์ด๋ ์ญ์ฌ๊ฐ ์ค๋๋ ์ธ์ด์ด๋ค ๋ณด๋ ํจํค์ง๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์์ด ์ฌ๋ฌ ์ฐจ๋ก ๋ฐ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
4.2.1. ํจํค์ง ์ค์น ๋ฐ ๊ด๋ฆฌ[ํธ์ง]
์ค๋๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ๋๋ ์ฃผ๋ก pip์ ์ด์ฉํ๋ค.
์ฐ์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋์์ ์์ ํ ๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค. ๊ฐ๋ น ํ๋ก์ ํธ A๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ X์ 1.1 ๋ฒ์ ์ ์ฌ์ฉํ๋๋ฐ, ๋ค๋ฅธ ํ๋ก์ ํธ B๋ ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ์ X์ 1.0 ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ X์ 1.1 ๋ฒ์ ๊ณผ 1.0 ๋ฒ์ ์ ๋์์ ์ค์นํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ ํ๊ฒฝ์ด๋ผ๋ ๊ฒ์ ๋ง๋ค์ด ํ๋ก์ ํธ A์ B์์ ์ฌ์ฉํ๋ ํจํค์ง๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค. ๊ฐ์ ํ๊ฒฝ์ virtualenv๋ผ๋ ๋๊ตฌ๋ฅผ ์ด์ฉํด ๋ง๋ค ์ ์์ผ๋ฉฐ, Python 3.3๋ถํฐ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ venv ๋ชจ๋์ ์ง์ ํธ์ถํ์ฌ ๋ง๋ค ์ ์๋ค.
๋ํ pip์ ํจํค์ง ๊ฐ์ ํธํ์ฑ์ ๊ผผ๊ผผํ๊ฒ ๋ฐ์ง์ง ์๋๋ค. ๊ฐ๋ น ์์ ํ๋ก์ ํธ A์ B๋ฅผ ๋จ๋ค์ด ์ฌ์ฉํ ์ ์๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์๋ค๊ณ ํ์. ๋ค๋ฅธ ์ปดํจํฐ์์ pip์ ์ฌ์ฉํด A๋ฅผ ์ค์นํ๋ฉด A๊ฐ ํ์ํ X์ 1.1 ๋ฒ์ ์ด ์ค์น๋๋ค. ์ดํ B๋ฅผ ์ค์นํ๋ฉด X์ 1.1 ๋ฒ์ ์ ์ญ์ ํ๊ณ 1.0 ๋ฒ์ ์ ์ค์นํ๊ธฐ ๋๋ฌธ์ A๋ฅผ ์ธ ์ ์๊ฒ ๋๋ค.[19] npm๊ณผ ๊ฐ์ ํ๋์ ์ธ ํจํค์ง ๊ด๋ฆฌ์๋ค์ ํจํค์ง ํธํ์ฑ์ ๊ผผ๊ผผํ๊ฒ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ํฉ์์๋ B๋ฅผ ์ค์นํ๋ ค ํ๋ฉด ๊ฑฐ๋ถํ์ง๋ง, pip์ ๊ทธ๋ฐ ๊ฑฐ ์๋ค.
๋ฆฌ๋ ์ค์ ๊ฐ์ด ์์ฒด์ ์ผ๋ก ํ์ด์ฌ์ ํ์ฌํ ์ด์์ฒด์ ์์๋ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํนํ ์ ๊ฒฝ์จ์ผ ํ๋ค. ์์คํ ์ ๋ด์ฅ๋ ํต์ฌ ๋๊ตฌ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ํจํค์ง๋ฅผ ์ค์นํ๋ค๊ฐ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ต์ ์ ๊ฒฝ์ฐ OS๋ฅผ ์ฌ์ค์นํด์ผ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฐ OS์์๋ ์์คํ ๋ด์ฅ ํ์ด์ฌ์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ์ ๋๋ฉฐ, ๋์
ํน์ฌ๋ ํ๋ก๊ทธ๋จ ๊ฐ ์ ํฉ ๋ฑ์ ์ด์ ๋ก ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค ํด๋น ๊ธฐ๋ฅ์ ์ธ๋ถ ๋ชจ๋(.msi, .exe, .pkg๋ฑ์ ์ค์นํ์ผ)์ ์ด์ฉํด ์๋ฒ์ ๋ด์ฅํ์ฌ ๋๋ฆฌ๋ ค๋ ๋์๋ ์ ๋ง ์ง์ฅ์ ๋ง๋ณผ ์ ์๋ค. ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ถ๋ฌ์ค๋ ์ฝ์ด์ ์๋ฒ์ ์ค์น๋๋ ๋ชจ๋์ด ๋ถ๋ฌ์ค๋ ์ฝ์ด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ. (--๋ค๋ฅธ ๊ฒ์ด ์ฝ์ด ๊ฒฝ๋ก๋ฟ์ด๋ผ๋ฉด ๊ทธ๋๋ง ๋ซ์ง๋ง ๋ด๋ถ ๋ก์ง๋ง์ ๋ค๋ฅด๋ค๋ฉด...?--์ด๋ฐ ๊ฒฝ์ฐ๋ ์์ํ๋ฉด ์๋ช ๋ง ์ค์ด๋ค ๋ฟ์ด๋ค.) ์ด๋ฅผ ๊ณ ์น๋ ค๋ฉด ์๋ฌ์ ์ฝ์คํ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ด๋์ ๋ฌธ์ ๊ฐ ์๊ฒผ์์ง ๋จธ๋ฆฌ๋ฅผ ์ฅ์ด์ง๊ณ ๋ชจ๋ ๋ด์ ์ฝ๋๋ฅผ ๋ฏ์ด ๊ณ ์น๋ ์๋ฐ์ ์๋ค.
์ฌ์ค ์ด ๋ฌธ์ ๋ ๋ค๋ฅธ ์ธ์ด์์๋ ์์ ์ ์๋ ์ผ์ด๋ค. ๋ค๋ง ํ์ด์ฌ์ ๊ฒฝ์ฐ ํจํค์ง ๋ฒ์ ์ ํต์ผ์ฑ ๋ถ์กฑ๊ณผ ๋ง๋๋ฒ๋ฆฌ๋๋ฐ, ๋ฒ์ ์ ๋ฐ๋ผ ์ฒ์ฐจ๋ง๋ณ๋ก ๋ค๋ฅผ ์ด ๋์ฒ๋ฒ๋ค์ด ์ธํฐ๋ท ์จ๊ฐ ๊ตฌ์์ ๋ค ๋ค์ ธ๋ ๋์ค์ง ์์ ์์คํธ๋ํ ๋์ด๋๋ฅผ ์ ์ฌํ๋ค. (๋์ค๊ธด ํ์ง๋ง, ํด๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฌผ๋ก ์ง์ ์ง๋ฌธ์ ์ฌ๋ ค๋ ๋๋ถ๋ถ ๋ต์ ์๋์จ๋ค.) ์ฐจ๋ผ๋ฆฌ ์ฒ์ ๋ฐ๊ฒฌ๋๋ฉด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊ฟ์ ํผํด๊ฐ ์ ์์ง๋ง, ์ด๋ฏธ ์งํ๋ ๋๋ก ์งํ๋ ํ๋ก์ ํธ์ธ ๊ฒฝ์ฐ ๊ทธ์ ํ์ด์ด ํจ๊ปํ๊ธธ ๋น ๋ฟ์ด๋ค.
pip install <ํจํค์ง๋ช
>
์ด ๋ฐฉ์์ ๋ชจ๋ ํจํค์ง๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋ ํ์ด์ฌ์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๊ธด๋ค.์ฐ์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋์์ ์์ ํ ๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค. ๊ฐ๋ น ํ๋ก์ ํธ A๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ X์ 1.1 ๋ฒ์ ์ ์ฌ์ฉํ๋๋ฐ, ๋ค๋ฅธ ํ๋ก์ ํธ B๋ ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ์ X์ 1.0 ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ X์ 1.1 ๋ฒ์ ๊ณผ 1.0 ๋ฒ์ ์ ๋์์ ์ค์นํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ ํ๊ฒฝ์ด๋ผ๋ ๊ฒ์ ๋ง๋ค์ด ํ๋ก์ ํธ A์ B์์ ์ฌ์ฉํ๋ ํจํค์ง๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค. ๊ฐ์ ํ๊ฒฝ์ virtualenv๋ผ๋ ๋๊ตฌ๋ฅผ ์ด์ฉํด ๋ง๋ค ์ ์์ผ๋ฉฐ, Python 3.3๋ถํฐ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ venv ๋ชจ๋์ ์ง์ ํธ์ถํ์ฌ ๋ง๋ค ์ ์๋ค.
# virtualenv๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
virtualenv my-venv
# venv๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
python -m venv my-venv
์์ ๋ช
๋ น์ ํ์ฌ ๋๋ ํ ๋ฆฌ์ my-venv๋ผ๋ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๋ค.[18] ์ผ๋ฐ์ ์ผ๋ก๋ ๊ฐ์ ํ๊ฒฝ ์ด๋ฆ๋ venv๋ก ํ๋ค.๋ํ pip์ ํจํค์ง ๊ฐ์ ํธํ์ฑ์ ๊ผผ๊ผผํ๊ฒ ๋ฐ์ง์ง ์๋๋ค. ๊ฐ๋ น ์์ ํ๋ก์ ํธ A์ B๋ฅผ ๋จ๋ค์ด ์ฌ์ฉํ ์ ์๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์๋ค๊ณ ํ์. ๋ค๋ฅธ ์ปดํจํฐ์์ pip์ ์ฌ์ฉํด A๋ฅผ ์ค์นํ๋ฉด A๊ฐ ํ์ํ X์ 1.1 ๋ฒ์ ์ด ์ค์น๋๋ค. ์ดํ B๋ฅผ ์ค์นํ๋ฉด X์ 1.1 ๋ฒ์ ์ ์ญ์ ํ๊ณ 1.0 ๋ฒ์ ์ ์ค์นํ๊ธฐ ๋๋ฌธ์ A๋ฅผ ์ธ ์ ์๊ฒ ๋๋ค.[19] npm๊ณผ ๊ฐ์ ํ๋์ ์ธ ํจํค์ง ๊ด๋ฆฌ์๋ค์ ํจํค์ง ํธํ์ฑ์ ๊ผผ๊ผผํ๊ฒ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ํฉ์์๋ B๋ฅผ ์ค์นํ๋ ค ํ๋ฉด ๊ฑฐ๋ถํ์ง๋ง, pip์ ๊ทธ๋ฐ ๊ฑฐ ์๋ค.
๋ฆฌ๋ ์ค์ ๊ฐ์ด ์์ฒด์ ์ผ๋ก ํ์ด์ฌ์ ํ์ฌํ ์ด์์ฒด์ ์์๋ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํนํ ์ ๊ฒฝ์จ์ผ ํ๋ค. ์์คํ ์ ๋ด์ฅ๋ ํต์ฌ ๋๊ตฌ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ํจํค์ง๋ฅผ ์ค์นํ๋ค๊ฐ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ต์ ์ ๊ฒฝ์ฐ OS๋ฅผ ์ฌ์ค์นํด์ผ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฐ OS์์๋ ์์คํ ๋ด์ฅ ํ์ด์ฌ์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ์ ๋๋ฉฐ, ๋์
#pip install --user๋ก ์ฌ์ฉ์๋ณ ๊ธฐ๋ณธ ํ๊ฒฝ์ ์ค์นํ๊ฑฐ๋ ๋ณ๋์ ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ค์ด์ผ ํ๋ค.ํน์ฌ๋ ํ๋ก๊ทธ๋จ ๊ฐ ์ ํฉ ๋ฑ์ ์ด์ ๋ก ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค ํด๋น ๊ธฐ๋ฅ์ ์ธ๋ถ ๋ชจ๋(.msi, .exe, .pkg๋ฑ์ ์ค์นํ์ผ)์ ์ด์ฉํด ์๋ฒ์ ๋ด์ฅํ์ฌ ๋๋ฆฌ๋ ค๋ ๋์๋ ์ ๋ง ์ง์ฅ์ ๋ง๋ณผ ์ ์๋ค. ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ถ๋ฌ์ค๋ ์ฝ์ด์ ์๋ฒ์ ์ค์น๋๋ ๋ชจ๋์ด ๋ถ๋ฌ์ค๋ ์ฝ์ด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ. (--๋ค๋ฅธ ๊ฒ์ด ์ฝ์ด ๊ฒฝ๋ก๋ฟ์ด๋ผ๋ฉด ๊ทธ๋๋ง ๋ซ์ง๋ง ๋ด๋ถ ๋ก์ง๋ง์ ๋ค๋ฅด๋ค๋ฉด...?--์ด๋ฐ ๊ฒฝ์ฐ๋ ์์ํ๋ฉด ์๋ช ๋ง ์ค์ด๋ค ๋ฟ์ด๋ค.) ์ด๋ฅผ ๊ณ ์น๋ ค๋ฉด ์๋ฌ์ ์ฝ์คํ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ด๋์ ๋ฌธ์ ๊ฐ ์๊ฒผ์์ง ๋จธ๋ฆฌ๋ฅผ ์ฅ์ด์ง๊ณ ๋ชจ๋ ๋ด์ ์ฝ๋๋ฅผ ๋ฏ์ด ๊ณ ์น๋ ์๋ฐ์ ์๋ค.
์ฌ์ค ์ด ๋ฌธ์ ๋ ๋ค๋ฅธ ์ธ์ด์์๋ ์์ ์ ์๋ ์ผ์ด๋ค. ๋ค๋ง ํ์ด์ฌ์ ๊ฒฝ์ฐ ํจํค์ง ๋ฒ์ ์ ํต์ผ์ฑ ๋ถ์กฑ๊ณผ ๋ง๋๋ฒ๋ฆฌ๋๋ฐ, ๋ฒ์ ์ ๋ฐ๋ผ ์ฒ์ฐจ๋ง๋ณ๋ก ๋ค๋ฅผ ์ด ๋์ฒ๋ฒ๋ค์ด ์ธํฐ๋ท ์จ๊ฐ ๊ตฌ์์ ๋ค ๋ค์ ธ๋ ๋์ค์ง ์์ ์์คํธ๋ํ ๋์ด๋๋ฅผ ์ ์ฌํ๋ค. (๋์ค๊ธด ํ์ง๋ง, ํด๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฌผ๋ก ์ง์ ์ง๋ฌธ์ ์ฌ๋ ค๋ ๋๋ถ๋ถ ๋ต์ ์๋์จ๋ค.) ์ฐจ๋ผ๋ฆฌ ์ฒ์ ๋ฐ๊ฒฌ๋๋ฉด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊ฟ์ ํผํด๊ฐ ์ ์์ง๋ง, ์ด๋ฏธ ์งํ๋ ๋๋ก ์งํ๋ ํ๋ก์ ํธ์ธ ๊ฒฝ์ฐ ๊ทธ์ ํ์ด์ด ํจ๊ปํ๊ธธ ๋น ๋ฟ์ด๋ค.
4.2.2. ํจํค์ง ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ[ํธ์ง]
ํ์ด์ฌ์ผ๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค๋ ค๋ฉด ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ ๋ฐฉ์์ ์ธ์์ด ํ๋ฆ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ฐจ๋ก ๋ฐ๋์๋ค. ํจํค์ง ๊ด๋ฆฌ์๋ผ๋ ๊ฐ๋ ์ด ์์ด์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํด ์ฐ๋ ์์ ์๋
์ธ์์ด ํ๋ฌ pip์ด๋ผ๋ ํจํค์ง ๊ด๋ฆฌ์์ PyPI๋ผ๋ ํจํค์ง ์ ์ฅ์๊ฐ ๋ฑ์ฅํ๋ฉด์,
ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ ๋ฐฉ์์ ์ธ์์ด ํ๋ฆ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ฐจ๋ก ๋ฐ๋์๋ค. ํจํค์ง ๊ด๋ฆฌ์๋ผ๋ ๊ฐ๋ ์ด ์์ด์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํด ์ฐ๋ ์์ ์๋
setup.py๋ผ๋ ์ค์น ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ ๋ง๋ค์ด์ ํ์ด์ฌ ํ๋ก๊ทธ๋จ๊ณผ ํจ๊ป ๋ฐฐํฌํ๋ ๊ฒ์ด ๊ดํ์ด์๋ค.[20] ์ด๋ฅผ ์ธ์ด ์ฐจ์์์ ์ง์ํ๊ธฐ ์ํด Python 1.6๋ถํฐ๋ distutils๋ผ๋ ๋น๋ ๋๊ตฌ๋ฅผ ๊ธฐ๋ณธ ํ์ฌํ์๋ค. ๊ทธ๋ฐ๋ฐ distutils๋ ์์ ์ ํ๋ก๊ทธ๋จ์ด ํ์๋ก ํ๋ ๋ค๋ฅธ ํจํค์ง๋ฅผ ์ค์นํ์ง ๋ชปํ๋ค๋ ์น๋ช
์ ์ธ ๋ฌธ์ ๊ฐ ์์ด์[21], ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด setuptools๋ผ๋ ๋๊ตฌ๊ฐ ๋ฑ์ฅํ์๋ค.์ธ์์ด ํ๋ฌ pip์ด๋ผ๋ ํจํค์ง ๊ด๋ฆฌ์์ PyPI๋ผ๋ ํจํค์ง ์ ์ฅ์๊ฐ ๋ฑ์ฅํ๋ฉด์,
setup.py๋ฅผ ๋ง๋๋ ๊ธฐ์กด์ ๋ฐฉ์์ ๋จ์ ์ด ๋ถ๊ฐ๋์๋ค.setup.py๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๋๊ตฌ[22]๊ฐ ์๋์ง ํ์ธํ๊ณ , ์์ผ๋ฉด ์๋์ผ๋ก ์ค์นํ๊ฑฐ๋ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ด ์๋ค.setup.py๋ ํ์ด์ฌ ์ฝ๋๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ํจํค์ง ์ด๋ฆ์ด๋ ๋ฒ์ ๊ณผ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ด ๊น๋ค๋กญ๋ค.setup.py์๋ ์๋ฌด ํ์ด์ฌ ์ฝ๋๋ ๋ฃ์ ์ ์์ผ๋ฏ๋ก ์ ์์ ์ธ ์ฝ๋๋ฅผ ์ฌ์ ์ ์๋ค.setup.py๋ setuptools๋ฅผ ์ง์ importํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๋น๋ ๋๊ตฌ๋ฅผ ์ ํํ ์ ์๋ค.
์ด ๋๋ฌธ์
setup.py๋ฅผ ์์ฑํ๋ ๋์ pyproject.toml[23]์ด๋ผ๋ ์ค์ ํ์ผ์ ์ฌ์ฉํ๋ ํ์ค์์ธ PEP-518์ด ๋ฑ์ฅํ์๋ค. pip 10.0๋ถํฐ๋ pyproject.toml์ ์ง์ํ๋ค. ๋ค๋ง ์ด์์ฒด์ ์ค์๋ ์ต์ ๋ฒ์ ์ pip์ ํ์ฌํ์ง ์์ ๊ฒฝ์ฐ๋ ๋ง๊ธฐ ๋๋ฌธ์ pip์ ์
๋ฐ์ดํธํด์ผ ํ๋ค. flit์ด๋ Poetry ๋ฑ์ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด setup.py๋ฅผ ์์ฑํ์ง ์๊ณ ํจํค์ง๋ฅผ ๋ง๋ค์ด ๋ฐฐํฌํ ์ ์๋ค. ๋ฌผ๋ก ์์ ๋ฐฉ์๋๋ก distutils/setuptools๋ฅผ ์ฌ์ฉํ๋ฉด์ setup.py๊ณผ pyproject.toml๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.Python ์ผ๋ก ๊ฐ๋ฐํ SW๋ฅผ ๊ณต๊ฐ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ ์์ค ์ฝ๋๊ฐ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค. ์๋ฅผ ๋ค์ด ์์ฉ ํ๋ก๊ทธ๋จ์ด๋, ๋ณด์์ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ํ์ด์ฌ ์ฝ๋๋ฅผ ์จ๊ฒจ์ผ ํ๋ค.
- Pyํ์ผ์ Bytecode๋ก ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ#
- PyInstaller๋ฅผ ์ฌ์ฉํด์ EXE ๋๋ ELF ํ์์ ์คํ ํ์ผ์ ๋ง๋๋ ๋ฐฉ๋ฒ ์ฌ์ฉ๋ฒ๊ณผ ์ฃผ์์ฌํญ
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ byte code์ธ pycํ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ์กฐ๊ธ๋ง ๋
ธ๋ ฅํ๋ฉด ๋์ปดํ์ผ์ด ์ฝ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์จ๊ธธ ์ ์๊ณ ๋ค๋ง ์ฝ๋ ๋ณด๊ธฐ๋ฅผ ์กฐ๊ธ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ์ผ๋ก ์ดํดํด์ผ ํ๋ค. Pyc ํ์ผ๋ณด๋ค ๋์ ๋ฐฉ๋ฒ์ PyInstaller๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. PyInstaller๋ Pyํ์ผ์ ์ข
์์ฑ์ ๋ถ์ํด์ ํ์ํ shared lib๋ฅผ ํ๋์ ํด๋์ ํจํค์งํ๊ณ , EXE๋ ELF์ ์คํ ํ์ผ์ ์์ฑํ์ฌ ์์ค ์ฝ๋๋ฅผ ์จ๊ธธ ์ ์๋ค. PyInstaller๋ก ํจํค์งํ๋ ๊ณผ์ ์์ --key ์ต์
์ ์ฌ์ฉํ๋ฉด AES256 ์ผ๋ก Bytecode๋ฅผ ์ํธํํ๋ค.
5. ๋ค์ํ python ๊ตฌํ์ฒด ์ข ๋ฅ[ํธ์ง]
๋ณดํต ๋งํ๋ Python์ C๋ก ๊ตฌํ๋์์ผ๋ฉฐ, ๋ค๋ฅธ ๊ตฌํ์ฒด์ ๊ตฌ๋ถํ์ฌ ์ธ๊ธํ ๋๋ CPython์ด๋ผ๊ณ ํ๊ธฐํ๋ค. #1 ๋๋ #2์์ ์์ค ์ฝ๋๋ฅผ ์ด๋ํด๋ณผ ์ ์๋ค.
Stackless Python์ CPython์์ C ์คํ์ ์์ค ๊ฒ์ด๋ค.
Cython์ ํ์ด์ฌ ์์ค ์ฝ๋๋ฅผ C ์ธ์ด ์ฝ๋๋ก ๋ณํํ์ฌ ์ปดํ์ผํ๋ค.
Pyston์ C++๋ก ๊ตฌํ๋์๋ค.
ํ์ด์ฌ ์์ฒด๋ก ๊ตฌํ๋ PyPy๋ ์๋ค. Pyston๊ณผ PyPy๋ JIT๊ฐ ๊ตฌํ๋์ด ์๋ค.
Java๋ก ๊ตฌํ๋์ด Java Virtual Machine ์์์ ๋์๊ฐ๋ Jython๊ณผ C#์ผ๋ก ๊ตฌํ๋ .NET Framework ์์์ ๋์ํ๋ IronPython์ด ์๋ค.
Jython๊ณผ IronPython์ ๊ฐ์๋จธ์ ์์ ๋์ํ๋ ๊ตฌํ์ฒด์ด๋ค. ์์๋ถํฐ JVM ๋๋ .NET CLR ์์์ ๋์ํ๋ Python ๊ตฌํ์ฒด๋ฅผ ๋์ ํ๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋๋ฌผ๋ค. ๊ธฐ์กด์ Java๋ .NET Framework์์ ๊ฐ๋ฐ๋์ด ์ด์๋๋ ํ๋ก๊ทธ๋จ์ด๋ ์์คํ ์ด ์กด์ฌํ๊ณ , ์ด ํ๊ฒฝ ํ์์ Python์ ๊ฐ๊ฒฐํ๊ณ ํธ๋ฆฌํ ๊ธฐ๋ฅ๊ณผ ๋์ ์์ฐ์ฑ์ ๋์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
Jython๊ณผ IronPython์ ๋ ๋ค CPython์ ๋นํ๋ฉด ์คํ ์๋๊ฐ ๋งค์ฐ ๋๋ฆฌ๋ฉฐ, Jython์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ์ฌ๊ฐํ ์ ๋๋ก ๋ง์ด ๋๋ฆฌ๋ค. ๋ฐ๋ผ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ๋ณด์กฐ ๊ธฐ๋ฅ์์ ์ฌ์ฉํ๋ฉด ๋ฒ๊ฑฐ๋ก์ด ์์ ๋ค์ ๋งค์ฐ ์์ฝ๊ฒ Python ์คํฌ๋ฆฝํธ๋ก Java, .NET Framework์ ์์์ ๊ทธ๋๋ก ๋์ด๋ค ์จ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๊ณต์์ ํธ๋ฆฌํจ์์ ํฐ ์ฅ์ ์ด ์๋ค.
JavaScript๋ก ๊ตฌํํ Brython๊ณผ Skulpt๋ ์๋ค. Pythonpad์์ Brython ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์คํํด๋ณผ ์ ์๋ค.
ํํธ ์ค๊ตญ์์๋ Chinese Python์ด๋ผ๋, ์ค๊ตญ์ด ๋ฌธ๋ฒ์ผ๋ก ํ์๋ฅผ ์ณ์ ๋์๊ฐ๋ ์ธ์ด๋ฅผ ๋ ์ ๊ฐ๋ฐํ๋ค.
Stackless Python์ CPython์์ C ์คํ์ ์์ค ๊ฒ์ด๋ค.
Cython์ ํ์ด์ฌ ์์ค ์ฝ๋๋ฅผ C ์ธ์ด ์ฝ๋๋ก ๋ณํํ์ฌ ์ปดํ์ผํ๋ค.
Pyston์ C++๋ก ๊ตฌํ๋์๋ค.
ํ์ด์ฌ ์์ฒด๋ก ๊ตฌํ๋ PyPy๋ ์๋ค. Pyston๊ณผ PyPy๋ JIT๊ฐ ๊ตฌํ๋์ด ์๋ค.
Java๋ก ๊ตฌํ๋์ด Java Virtual Machine ์์์ ๋์๊ฐ๋ Jython๊ณผ C#์ผ๋ก ๊ตฌํ๋ .NET Framework ์์์ ๋์ํ๋ IronPython์ด ์๋ค.
Jython๊ณผ IronPython์ ๊ฐ์๋จธ์ ์์ ๋์ํ๋ ๊ตฌํ์ฒด์ด๋ค. ์์๋ถํฐ JVM ๋๋ .NET CLR ์์์ ๋์ํ๋ Python ๊ตฌํ์ฒด๋ฅผ ๋์ ํ๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋๋ฌผ๋ค. ๊ธฐ์กด์ Java๋ .NET Framework์์ ๊ฐ๋ฐ๋์ด ์ด์๋๋ ํ๋ก๊ทธ๋จ์ด๋ ์์คํ ์ด ์กด์ฌํ๊ณ , ์ด ํ๊ฒฝ ํ์์ Python์ ๊ฐ๊ฒฐํ๊ณ ํธ๋ฆฌํ ๊ธฐ๋ฅ๊ณผ ๋์ ์์ฐ์ฑ์ ๋์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
Jython๊ณผ IronPython์ ๋ ๋ค CPython์ ๋นํ๋ฉด ์คํ ์๋๊ฐ ๋งค์ฐ ๋๋ฆฌ๋ฉฐ, Jython์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ์ฌ๊ฐํ ์ ๋๋ก ๋ง์ด ๋๋ฆฌ๋ค. ๋ฐ๋ผ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ๋ณด์กฐ ๊ธฐ๋ฅ์์ ์ฌ์ฉํ๋ฉด ๋ฒ๊ฑฐ๋ก์ด ์์ ๋ค์ ๋งค์ฐ ์์ฝ๊ฒ Python ์คํฌ๋ฆฝํธ๋ก Java, .NET Framework์ ์์์ ๊ทธ๋๋ก ๋์ด๋ค ์จ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๊ณต์์ ํธ๋ฆฌํจ์์ ํฐ ์ฅ์ ์ด ์๋ค.
JavaScript๋ก ๊ตฌํํ Brython๊ณผ Skulpt๋ ์๋ค. Pythonpad์์ Brython ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์คํํด๋ณผ ์ ์๋ค.
ํํธ ์ค๊ตญ์์๋ Chinese Python์ด๋ผ๋, ์ค๊ตญ์ด ๋ฌธ๋ฒ์ผ๋ก ํ์๋ฅผ ์ณ์ ๋์๊ฐ๋ ์ธ์ด๋ฅผ ๋ ์ ๊ฐ๋ฐํ๋ค.
5.1. Stackless Python[ํธ์ง]
ํํ์ด์ง
ํ์ด์ฌ์ ํ์ค ๊ตฌํ์ธ CPython์ ์ด๋ฆ ๊ทธ๋๋ก C๋ก ๋ง๋ค์ด์ ธ ์๋๋ฐ, ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ํจ์ ํธ์ถ ์คํ(Call stack)์ ๊ตฌํํ ๋ ๊ทธ๋ง C์ ํธ์ถ ์คํ[24]์ ๊ทธ๋๋ก ์น์ด๊ฐ๋๋ก ๊ตฌํ๋๊ณ ๋ง์๋ค. ๋๋ฌธ์ ํ์ด์ฌ์์ ์ผ๋ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ธ ์ ์๋๋์ ๊ด๊ณ์์ด C ํธ์ถ ์คํ์ ๊ฝ ์ฑ์ฐ๋ ์๊ฐ ๊ทธ๋๋ก ์คํ ์ค๋ฒํ๋ก์ฐ ์๋ฌ๊ฐ ๋จ๊ฒ ๋์ด๋ฒ๋ ธ๊ณ [25], ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ํธ์ถ ์คํ, ์ฆ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ CPython ์ค์ค๋ก ์ ์ดํ ์๊ฐ ์๊ฒ ๋์ด ์ฝ๋ฃจํด ๋ฑ์ ์คํ ํ๋ฆ์ ์ ์ดํ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ธ ์ ์๊ฒ ๋๊ณ ๋ง์๋ค.
Christian Tismer๋ผ๋ ๊ฐ๋ฐ์๋ ์ด ๋ฌธ์ ๋ฅผ ํํํ๋ ค๋ฉด "CPython ์์ค์ฝ๋๋ฅผ ์์ ํด์[26] C ์คํ์ ์ฐ๋ ๋ถ๋ถ์ ์ ๋ถ ๋ค์ด๋ด๊ณ ์๋ก ํธ์ถ ์คํ์ ์งค ์๋ฐ์ ์๋ค"๊ณ ์๊ฐํ๊ณ , ๊ทธ๊ฒ์ ์ค์ ๋ก ์คํ์ ์ฎ๊ธด ๊ฒ์ด Stackless Python์ด๋ค. ์ด๋ฆ์ Stackless๋ ๊ทธ๋์ ์ฌ์ค C ํธ์ถ ์คํ์ด ์๋ค๋ ์๋ฏธ. Stackless Python์ ์คํ ์ค๋ฒํ๋ก์ฐ ์๋ฌ๊ฐ ๋ ๋๋ค๋ ์ฌ์ํ ์ฅ์ [27] ์ธ์๋, ์ค์ค๋ก ์ ์ดํ ์ ์๋ ์์ฒด์ ์ธ ํธ์ถ ์คํ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ง์ดํฌ๋ก์ฐ๋ ๋[28]๋ ์ฝ๋ฃจํด ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ์ธ ์ ์๊ฒ ๋๊ณ , ๋๋ถ์ ์ฐ๋ ๋๋ ๊ณ ์๊ณ ์ฝ๋ฃจํด๋ ์๋๋ CPython์ ๋นํด ๋์์ฑ ์ฒ๋ฆฌ์์ ํจ์ฌ ๊ฐ๋ ฅํ ์ด๋์ ๋ผ ์ ์๊ฒ ๋๋ค. CPython๋ 3.4 ๋ฒ์ ์ดํ๋ก ์ฝ๋ฃจํด์ ์ง์ํ๋ค. ์๋ ๋ฉํฐ์ฐ๋ ๋ฉ ์น์ ์ฐธ์กฐ.
๋ค๋ง, ์์ ๋งํ๋ฏ์ด CPython์ ๊ฐ์กฐํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ํ์ด์ฌ์ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๊ฐ์กฐํ ์ฝ๋๊ฐ ์ด์์์ด ๋์ํ๋์ง ํญ์ ํ์ธํด์ผ ํ๊ณ , ์ด ๊ธฐ๋ฅ์ด ์ด์์ฒด์ ๋ ํ๋์จ์ด์๋ ์ํฅ์ ๋ฐ๋ ๊น๋ญ์ ์ฌํ๋ฉด ๊ฐ๊ฐ์ ์ด์์ฒด์ ๋ CPU๋ณ๋ก ๊ฐ๋ฐ์ ๋ฐ๋ก ํด์ผ ํ๋ ํผ๊ณคํ ์์ ์ Python์ด ๋งํ ๋๊น์ง ํด์ผ ํ๋ ์ง๊ฒจ์ด ๊ธธ์ ๊ฑท๊ฒ ๋๋ ๊ฒ์ด์๋ค. ๊ทธ๋์ ์ค์ ๋ก ํ๋์ Stackless Python์ ๊ฐ๋ฐ์ด ์ ์ ์ค๋จ๋ ์ผ๋ ์์์ ์ ๋.
๊ทธ๋ฐ ์์ค์ PyPy ๋ฆฌ๋ ๊ฐ๋ฐ์ Armin Rigo๊ฐ "C ํธ์ถ ์คํ๋ ์ด์ฐจํผ ๋ฉ๋ชจ๋ฆฌ์ ์์์? ๊ทธ๋ฌ๋ฉด ๊ทธ๊ฑธ 'memcpy()'๋ก ํต์งธ๋ก ๋ณต์ฌํ๊ณ ๋ฎ์ด ์์ฐ๋ฉด ํธ์ถ ์คํ์ ์ ์ฅํ๊ณ ๋ณต๊ตฌํ๋ ๊ฑฐ ์๋?"๋ผ๋ ์ค๋ก ๋ง๊ฐ์กฐ์ค๋ฌ์ด ์์ด๋์ด๋ฅผ ๋ด๋๋๋ฐ, Christian Tismer๊ฐ ์ฌ๊ธฐ์ ๋งค์ฐ ๊น์ ๊ฐ๋ช ์ ๋ฐ๊ณ Armin Rigo์ ํจ๊ป ๊ตฌํํ ๊ฒฐ๊ณผ greenlet์ด๋ผ๊ณ ํ๋ import๋ง ํ๋ฉด ์ฝ๋ฃจํด์ ์ธ ์ ์๋ ๋ชจ๋์ ๋ง๋ค์ด๋ด๊ธฐ์ ์ด๋ฅธ๋ค. ๊ฐ์ ๊ฑธ ๊ตฌํํ๋ ค๊ณ ์ธ์ด ์ธํฐํ๋ฆฌํฐ ์์ฒด๋ฅผ ๋ฏ์ด ๊ณ ์น๋ ์๊ณ ์ ๋นํ๋ฉด ๋๋ ๋งํผ์ ๋ ธ๋ ฅ ์ ์ฝ์ด ์๋ ์ ์๋ค. ๋ค๋ง ์ด ์ง์ ์ ๋๋ก ๊ตฌํํ Stackless Python์ ๋นํ๋ฉด ์๋ฌด๋๋ ์ฑ๋ฅ์ด ๋ธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ ์คํ๊ฒ ์ฑ๋ฅ์ด ํ์ํ EVE ์จ๋ผ์ธ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ Stackless Python์ ์ด๋ค.
ํ์ง๋ง... Armin Rigo์ Christian Tismer๋ ์ง๊ธ ๋ ๋ค PyPy๋ฅผ ๋ง๋ค๊ณ ์๊ณ , PyPy๋ ์์ฒด ์คํ์ ์ธ ์ ์๋ Stackless ๋ชจ๋์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
ํ์ด์ฌ์ ํ์ค ๊ตฌํ์ธ CPython์ ์ด๋ฆ ๊ทธ๋๋ก C๋ก ๋ง๋ค์ด์ ธ ์๋๋ฐ, ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ํจ์ ํธ์ถ ์คํ(Call stack)์ ๊ตฌํํ ๋ ๊ทธ๋ง C์ ํธ์ถ ์คํ[24]์ ๊ทธ๋๋ก ์น์ด๊ฐ๋๋ก ๊ตฌํ๋๊ณ ๋ง์๋ค. ๋๋ฌธ์ ํ์ด์ฌ์์ ์ผ๋ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ธ ์ ์๋๋์ ๊ด๊ณ์์ด C ํธ์ถ ์คํ์ ๊ฝ ์ฑ์ฐ๋ ์๊ฐ ๊ทธ๋๋ก ์คํ ์ค๋ฒํ๋ก์ฐ ์๋ฌ๊ฐ ๋จ๊ฒ ๋์ด๋ฒ๋ ธ๊ณ [25], ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ํธ์ถ ์คํ, ์ฆ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ CPython ์ค์ค๋ก ์ ์ดํ ์๊ฐ ์๊ฒ ๋์ด ์ฝ๋ฃจํด ๋ฑ์ ์คํ ํ๋ฆ์ ์ ์ดํ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ธ ์ ์๊ฒ ๋๊ณ ๋ง์๋ค.
Christian Tismer๋ผ๋ ๊ฐ๋ฐ์๋ ์ด ๋ฌธ์ ๋ฅผ ํํํ๋ ค๋ฉด "CPython ์์ค์ฝ๋๋ฅผ ์์ ํด์[26] C ์คํ์ ์ฐ๋ ๋ถ๋ถ์ ์ ๋ถ ๋ค์ด๋ด๊ณ ์๋ก ํธ์ถ ์คํ์ ์งค ์๋ฐ์ ์๋ค"๊ณ ์๊ฐํ๊ณ , ๊ทธ๊ฒ์ ์ค์ ๋ก ์คํ์ ์ฎ๊ธด ๊ฒ์ด Stackless Python์ด๋ค. ์ด๋ฆ์ Stackless๋ ๊ทธ๋์ ์ฌ์ค C ํธ์ถ ์คํ์ด ์๋ค๋ ์๋ฏธ. Stackless Python์ ์คํ ์ค๋ฒํ๋ก์ฐ ์๋ฌ๊ฐ ๋ ๋๋ค๋ ์ฌ์ํ ์ฅ์ [27] ์ธ์๋, ์ค์ค๋ก ์ ์ดํ ์ ์๋ ์์ฒด์ ์ธ ํธ์ถ ์คํ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ง์ดํฌ๋ก์ฐ๋ ๋[28]๋ ์ฝ๋ฃจํด ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ์ธ ์ ์๊ฒ ๋๊ณ , ๋๋ถ์ ์ฐ๋ ๋๋ ๊ณ ์๊ณ ์ฝ๋ฃจํด๋ ์๋๋ CPython์ ๋นํด ๋์์ฑ ์ฒ๋ฆฌ์์ ํจ์ฌ ๊ฐ๋ ฅํ ์ด๋์ ๋ผ ์ ์๊ฒ ๋๋ค. CPython๋ 3.4 ๋ฒ์ ์ดํ๋ก ์ฝ๋ฃจํด์ ์ง์ํ๋ค. ์๋ ๋ฉํฐ์ฐ๋ ๋ฉ ์น์ ์ฐธ์กฐ.
๋ค๋ง, ์์ ๋งํ๋ฏ์ด CPython์ ๊ฐ์กฐํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ํ์ด์ฌ์ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๊ฐ์กฐํ ์ฝ๋๊ฐ ์ด์์์ด ๋์ํ๋์ง ํญ์ ํ์ธํด์ผ ํ๊ณ , ์ด ๊ธฐ๋ฅ์ด ์ด์์ฒด์ ๋ ํ๋์จ์ด์๋ ์ํฅ์ ๋ฐ๋ ๊น๋ญ์ ์ฌํ๋ฉด ๊ฐ๊ฐ์ ์ด์์ฒด์ ๋ CPU๋ณ๋ก ๊ฐ๋ฐ์ ๋ฐ๋ก ํด์ผ ํ๋ ํผ๊ณคํ ์์ ์ Python์ด ๋งํ ๋๊น์ง ํด์ผ ํ๋ ์ง๊ฒจ์ด ๊ธธ์ ๊ฑท๊ฒ ๋๋ ๊ฒ์ด์๋ค. ๊ทธ๋์ ์ค์ ๋ก ํ๋์ Stackless Python์ ๊ฐ๋ฐ์ด ์ ์ ์ค๋จ๋ ์ผ๋ ์์์ ์ ๋.
๊ทธ๋ฐ ์์ค์ PyPy ๋ฆฌ๋ ๊ฐ๋ฐ์ Armin Rigo๊ฐ "C ํธ์ถ ์คํ๋ ์ด์ฐจํผ ๋ฉ๋ชจ๋ฆฌ์ ์์์? ๊ทธ๋ฌ๋ฉด ๊ทธ๊ฑธ 'memcpy()'๋ก ํต์งธ๋ก ๋ณต์ฌํ๊ณ ๋ฎ์ด ์์ฐ๋ฉด ํธ์ถ ์คํ์ ์ ์ฅํ๊ณ ๋ณต๊ตฌํ๋ ๊ฑฐ ์๋?"๋ผ๋ ์ค๋ก ๋ง๊ฐ์กฐ์ค๋ฌ์ด ์์ด๋์ด๋ฅผ ๋ด๋๋๋ฐ, Christian Tismer๊ฐ ์ฌ๊ธฐ์ ๋งค์ฐ ๊น์ ๊ฐ๋ช ์ ๋ฐ๊ณ Armin Rigo์ ํจ๊ป ๊ตฌํํ ๊ฒฐ๊ณผ greenlet์ด๋ผ๊ณ ํ๋ import๋ง ํ๋ฉด ์ฝ๋ฃจํด์ ์ธ ์ ์๋ ๋ชจ๋์ ๋ง๋ค์ด๋ด๊ธฐ์ ์ด๋ฅธ๋ค. ๊ฐ์ ๊ฑธ ๊ตฌํํ๋ ค๊ณ ์ธ์ด ์ธํฐํ๋ฆฌํฐ ์์ฒด๋ฅผ ๋ฏ์ด ๊ณ ์น๋ ์๊ณ ์ ๋นํ๋ฉด ๋๋ ๋งํผ์ ๋ ธ๋ ฅ ์ ์ฝ์ด ์๋ ์ ์๋ค. ๋ค๋ง ์ด ์ง์ ์ ๋๋ก ๊ตฌํํ Stackless Python์ ๋นํ๋ฉด ์๋ฌด๋๋ ์ฑ๋ฅ์ด ๋ธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ ์คํ๊ฒ ์ฑ๋ฅ์ด ํ์ํ EVE ์จ๋ผ์ธ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ Stackless Python์ ์ด๋ค.
ํ์ง๋ง... Armin Rigo์ Christian Tismer๋ ์ง๊ธ ๋ ๋ค PyPy๋ฅผ ๋ง๋ค๊ณ ์๊ณ , PyPy๋ ์์ฒด ์คํ์ ์ธ ์ ์๋ Stackless ๋ชจ๋์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
5.2. C ์ธ์ด ํ์ฅ, Cython[ํธ์ง]
Python์ ์๋๋ฅผ ๋์ด๊ณ ์ ์์ C์ธ์ด๋ก ๋ณํํ์ฌ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ํํ ํจํค์ง. ํ์ด์ฌ์ ๋ฌธ๋ฒ์ ํ์ฅํ์ฌ ์ ์ ํ์ ์ ์ธ ๊ธฐ๋ฅ์ ๋ฃ์ด, ๊ธฐ์กด์ C ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ ์ฐฉํ ์ ์๋๋ก ๋ง๋ค์๋ค. Python C API๋ฅผ ์ด์ฉํ์ฌ C ์ฝ๋๋ฅผ ์ง์ ์ ์ฐฉํ๋ ๊ธฐ์กด์ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , C์ธ์ด๋ก ๋ณํ๋์ด ์ปดํ์ผ ๋๋ค๋ ์ ๋๋ฌธ์ ctypes๋ก ๋ง์์ฐ๋ ๊ฒ ์์ด ๋ค์ดํฐ๋ธ ์ฝ๋(*.so, *.dll)๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ์ ์ฌ์ฉํ๋ฉด ์ ๊ฒ๋ ์ด ๋ฐฐ ์ ๋์์ ๋ง๊ฒ๋ ์ฒ ๋ฐฐ ์ด์๊น์ง ์๋ ํฅ์์ ๊ฒฝํํ ์ ์๋ค. (๋ฌผ๋ก , ํ์ด์ฌ๊ณผ C์ ๊ตฌํ ์ฐจ์ด๋ฅผ ์ ์ดํดํ๊ณ ์ปดํ์ผ์ด ์ ๋๋ก ๋์ํ ์ ์๊ฒํ๊ธฐ ์ํ ์ฝ๋ ์์ ์ด ์๊ตฌ๋๋ค. ๊ทธ๋ฅ ๋ ๋ค ๋ฃ๊ณ ๋๋ ค๋ฒ๋ฆฌ๋ฉด ์ ๊ธฐ๋ฅ์ ์ ๋๋ก ๋ฐํํ์ง ๋ชปํ๊ฑฐ๋ ์ฌ์ง์ด๋ ๊ฑฐ์ ๋ฐ์ ์ด ์๋ ๊ฒฝ์ฐ๋ ์๊ธธ ์ ์๋ค. ํ๋กํ์ผ๋ง์ ์ธ์ ์ด๋์๋ ๊ธฐ๋ณธ์ด๋ค.)
C๋ฅผ ๋ชจ๋ฅด๋ ์ํ์์ Cython์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ์๋ฏธ๊ฐ ์๋ ๊ฒ์ ์๋์ง๋ง, C์ Python ๋ ๋ชจ๋์ ์ต์ํ ๋ Cython์ ๊ฐ์ฅ ํจ๊ณผ์ ์ผ๋ก ์ธ ์ ์๋ค. ๊ณ ์ฑ๋ฅ์ด ํ์ํ๋ฉด ์ผ๋จ ์ฝ๋ ์์ ์ด ๋ถํ์ํ PyPy๋ฅผ ์๋ํ๊ณ , ๊ทธ๊ฑธ๋ก๋ ๋ง์กฑ์ค๋ฝ์ง ์์ ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํด ๋ณด๊ณ , ๊ทธ๊ฑธ๋ก๋ ๋ถ์กฑํ ๋ ๊ณ ๋ คํด๋ณด์. Cython์ ๋์์ผ๋ก๋, SWIG, CFFI(C Foreign Function Interface), pybind(C++ ์ ์ฉ) ๋ฑ์ ๋๊ตฌ๋ค์ด ์๋ค.
์ฐธ๊ณ ๋ก, PyPy๋ Cython์ ํฌ๊ฒ ๋ฐ๋ฆฌ์ง ์์ ์ ๋๋ก ์๋๊ฐ ๋น ๋ฅด๊ณ , PyPy๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ์ ๋ ์๋ ํฅ์์ด ๋ณ๋ก ์๋ค๋ฉด Cython์ ์ฌ์ฉํ์ฌ C๋ก ๋ณํํด๋ ์ํฉ์ด ๋น์ทํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. Cython์ ์ฌ์ฉํ์ฌ ์๋ ํฅ์ ํจ๊ณผ๋ฅผ ์ป๊ณ ์ ํ๋ค๋ฉด, ํ์ด์ฌ ์ฝ๋๋ฅผ ๋ฐ๋ก ์คํํ ์ ์๋ PyPy๋ฅผ ์ฌ์ฉํ์ฌ ์๋๋ฅผ ๋ฏธ๋ฆฌ ์ฒดํฌํด๋ณด๋ ๊ฒ์ด ์ ์ฉํ ๋ฐฉ๋ฒ์ด ๋ ์ ์๋ค.
5.3. C++ ๊ตฌํ, Pyston (ํ๋ก์ ํธ ์ค๋จ)[ํธ์ง]
Pyston์ LLVM ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ค. Pyston์ JIT(just-in-time) ์ปดํ์ผ๋ฌ๋ฅผ ๋ด์ฅํ์ฌ ๋ฐ๋ณต๋๋ ์์ค ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์คํํ ์ ์๋ค.
2014๋ 4์ ํ๋ก์ ํธ๊ฐ ์์๋์์ผ๋ฉฐ, Python 2.7 ํธํ, x86 64๋นํธ ํ๋ซํผ์ ๋ชฉํ๋ก ๊ฐ๋ฐ ์ค์ ์๋ค. Dropbox Tech Blog - Introducing Pyston: an upcoming, JIT-based Python implementation (April 3, 2014)
Pyston์ C++๋ก ์์ฑ๋์ด์ก๋ค. Technical overview ยท dropbox/pyston Wiki ยท GitHub (1 Sep 2016)
์ฐ๋ถํฌ์์๋ง ํ ์คํธ๋๊ณ ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ 2017๋ 1์ 31์ผ๋ถ๋ก Dropbox์์ ๊ณต์์ ์ผ๋ก ์คํฐ์ฑ์ ์ข ๋ฃํ๋ค. Pyston 0.6.1 released, and future plans (January 31, 2017) ๋ฉ์ธํ ์ด๋๊ฐ Dropbox ์ง์์ธ๋ฐ ๋ ์ด์ ์ฐธ์ฌ๋ฅผ ๋ชปํ๋ ์ฌ์ค์ ํ๋ก์ ํธ ์ค๋จ์ด๋ค. ์งํ ํ๋ก์ ํธ ๋ฆฌ๋์๋ Kevin Modzelewski๋ ํด์ฌํ์๋ค.
์ฑ๋ฅ์ ์๋นํ ํ๋ฅญํ ํธ์ด์์ผ๋, CPython๊ณผ์ ํธํ์ฑ์ ์ค๋ซ๋์ ๋ง์ถ์ง ๋ชปํ๊ณ , ํ๋ก์ ํธ๊ฐ ์์๋์ ๋์ ๋ค๋ฅด๊ฒ Dropbox์ ์ฝ๋๊ฐ Go๋ Python3๋ก ๋ง์ด ์ด์ ๋ ๊ฒ์ด ์์ธ์ผ๋ก ๋ณด์ธ๋ค(์ฆ, ๊ตณ์ด ํฌ์ํ๋ฉด์ ๊ฐ๋ฐ์ ์ง์ํ ์ด์ ๊ฐ ์๋ ์ํฉ). ๋ํ ๊ณง Python2 ๋ฒ์ ์ด ๊ณต์์ ์ผ๋ก ์ง์์ด ์ค๋จ๋ ์์ ์ด๋ผ์ ์์ ํ๊ฒ ๋์๊ฐ๊ฒ ๋๋ ์์ (์ด์กฐ์ฐจ ์๋ฌด๋ ์ ์ ์์๋ค)์์ ์ด ํ๋ก์ ํธ์ ์๋ฏธ๊ฐ ๋ง์ด ํด์๋ ์๋ฐ์ ์์๋ ๊ฒ.
Dropbox๋ Pyston์์ PyPy๋ก ์ฎ๊ฒผ๋ค๊ฐ ํ์ฌ๋ Go๋ฅผ ์ฐ๊ณ ์๋ค. Dropbox Tech Blog: Open Sourcing Our Go Libraries (July 1, 2014)
ํํ์ด์ง
2014๋ 4์ ํ๋ก์ ํธ๊ฐ ์์๋์์ผ๋ฉฐ, Python 2.7 ํธํ, x86 64๋นํธ ํ๋ซํผ์ ๋ชฉํ๋ก ๊ฐ๋ฐ ์ค์ ์๋ค. Dropbox Tech Blog - Introducing Pyston: an upcoming, JIT-based Python implementation (April 3, 2014)
Pyston์ C++๋ก ์์ฑ๋์ด์ก๋ค. Technical overview ยท dropbox/pyston Wiki ยท GitHub (1 Sep 2016)
์ฐ๋ถํฌ์์๋ง ํ ์คํธ๋๊ณ ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ 2017๋ 1์ 31์ผ๋ถ๋ก Dropbox์์ ๊ณต์์ ์ผ๋ก ์คํฐ์ฑ์ ์ข ๋ฃํ๋ค. Pyston 0.6.1 released, and future plans (January 31, 2017) ๋ฉ์ธํ ์ด๋๊ฐ Dropbox ์ง์์ธ๋ฐ ๋ ์ด์ ์ฐธ์ฌ๋ฅผ ๋ชปํ๋ ์ฌ์ค์ ํ๋ก์ ํธ ์ค๋จ์ด๋ค. ์งํ ํ๋ก์ ํธ ๋ฆฌ๋์๋ Kevin Modzelewski๋ ํด์ฌํ์๋ค.
์ฑ๋ฅ์ ์๋นํ ํ๋ฅญํ ํธ์ด์์ผ๋, CPython๊ณผ์ ํธํ์ฑ์ ์ค๋ซ๋์ ๋ง์ถ์ง ๋ชปํ๊ณ , ํ๋ก์ ํธ๊ฐ ์์๋์ ๋์ ๋ค๋ฅด๊ฒ Dropbox์ ์ฝ๋๊ฐ Go๋ Python3๋ก ๋ง์ด ์ด์ ๋ ๊ฒ์ด ์์ธ์ผ๋ก ๋ณด์ธ๋ค(์ฆ, ๊ตณ์ด ํฌ์ํ๋ฉด์ ๊ฐ๋ฐ์ ์ง์ํ ์ด์ ๊ฐ ์๋ ์ํฉ). ๋ํ ๊ณง Python2 ๋ฒ์ ์ด ๊ณต์์ ์ผ๋ก ์ง์์ด ์ค๋จ๋ ์์ ์ด๋ผ์ ์์ ํ๊ฒ ๋์๊ฐ๊ฒ ๋๋ ์์ (์ด์กฐ์ฐจ ์๋ฌด๋ ์ ์ ์์๋ค)์์ ์ด ํ๋ก์ ํธ์ ์๋ฏธ๊ฐ ๋ง์ด ํด์๋ ์๋ฐ์ ์์๋ ๊ฒ.
Dropbox๋ Pyston์์ PyPy๋ก ์ฎ๊ฒผ๋ค๊ฐ ํ์ฌ๋ Go๋ฅผ ์ฐ๊ณ ์๋ค. Dropbox Tech Blog: Open Sourcing Our Go Libraries (July 1, 2014)
ํํ์ด์ง
5.4. Python ๊ตฌํ, PyPy[ํธ์ง]
Python์ผ๋ก Python์ ๋ง๋๋ ํ๋ก์ ํธ. JIT ์ปดํ์ผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋น ๋ฅด๋ค.
5.5. Java ๊ตฌํ, Jython[ํธ์ง]
Jython์ Java๋ก ๊ตฌํ๋์ด JVM ์์์ ์คํ๋๋ค. # CPython์ด C์ธ์ด์ ๊ฒฐํฉ์ฑ, ์ ์ฐฉ์ฑ์ด ์ข์ ๊ฒ์ฒ๋ผ Jython์ Java์ ๊ฒฐํฉ์ฑ์ด ๋๋จํ ์ข์ผ๋ฉฐ, ์ค์ ๋ก Java ์ง์์ ๋ฉ์ด์ ์
์ฒด์ธ Oracle, IBM ๋ฑ์์๋ ์์ฌ ์ ํ์ Jython์ ๋ด์ฅํ์ฌ ์คํฌ๋ฆฝํ
๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ ์ ๋๋ค.
Jython์ JVM ์์์ ์คํ๋๋ฉฐ, Python Module์ด ์ ๊ณตํ๋ API๋ ๋ฌผ๋ก ์ด๊ณ , JDK๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ API๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ์คํ๋ ค pycrpyto์ ๊ฐ์ด C์ธ์ด๋ก ๊ตฌํ๋ CPython ๋ชจ๋์ Jython์์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ผ๋จ Java Class๋ผ๋ฉด, ์ค๋ น JNI๋ก ๋์ด์์ด์ C๋ก ์์ฑ๋ ๋์ ๋ชจ๋(*.dll, *.so ๋ฑ)์ ์ฌ์ฉํ๋ค๊ณ ํด๋ Jython์์ ์ฌ์ฉํ๋๋ฐ ์๋ฌด๋ฐ ์ ์ฝ์ด ์๋ค. ๋ํ JVM ์์์ ์คํ๋๋ค๋ ์ ๋๋ฌธ์ CPython์ GIL์ด ์ด์ ๋์ง ์์์ผ๋ฉฐ, CPython์ด ๋ฉํฐ์ค๋ ๋์์ ๋ณด์ด๋ ๋จ์ ์ด Jython์๋ ์กด์ฌํ์ง ์๋๋ค. threading, threadsafety ๋ฑ์ Python์์ ์ ๊ณตํ๋ ๋ฉํฐ์ค๋ ๋(๋ฝ, ๋๊ธฐํ ๊ด๋ จ) ๊ธฐ๋ฅ์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด java.util.concurrent์์ ์ ๊ณตํ๋ Java API๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค!
Jython์ JVM ์์์ ์คํ๋๋ฉฐ, Python Module์ด ์ ๊ณตํ๋ API๋ ๋ฌผ๋ก ์ด๊ณ , JDK๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ API๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ์คํ๋ ค pycrpyto์ ๊ฐ์ด C์ธ์ด๋ก ๊ตฌํ๋ CPython ๋ชจ๋์ Jython์์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ผ๋จ Java Class๋ผ๋ฉด, ์ค๋ น JNI๋ก ๋์ด์์ด์ C๋ก ์์ฑ๋ ๋์ ๋ชจ๋(*.dll, *.so ๋ฑ)์ ์ฌ์ฉํ๋ค๊ณ ํด๋ Jython์์ ์ฌ์ฉํ๋๋ฐ ์๋ฌด๋ฐ ์ ์ฝ์ด ์๋ค. ๋ํ JVM ์์์ ์คํ๋๋ค๋ ์ ๋๋ฌธ์ CPython์ GIL์ด ์ด์ ๋์ง ์์์ผ๋ฉฐ, CPython์ด ๋ฉํฐ์ค๋ ๋์์ ๋ณด์ด๋ ๋จ์ ์ด Jython์๋ ์กด์ฌํ์ง ์๋๋ค. threading, threadsafety ๋ฑ์ Python์์ ์ ๊ณตํ๋ ๋ฉํฐ์ค๋ ๋(๋ฝ, ๋๊ธฐํ ๊ด๋ จ) ๊ธฐ๋ฅ์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด java.util.concurrent์์ ์ ๊ณตํ๋ Java API๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค!
5.6. .NET Framework ๊ตฌํ, IronPython[ํธ์ง]
Microsoft .NET Framework์ ๊ฐ์๋จธ์ ์ธ CLR ์์์ ๊ตฌํ๋๊ณ ์ด ์์์ ๋์ํ๋ Python์ด๋ค. ์ ํํ ๋งํ๋ฉด ์ด๋ค ๋์ ์ธ์ด๋ฅผ CLR ์์์ ๊ตฌํํ๊ธฐ ์ํ DLR์ด๋ผ๋ ํ๋ ์์ํฌ ๊ธฐ๋ฐ์ด๋ค. ์ ์์ Jim Hugunin#์ Jython์ ์ ์์์ด๋ฉฐ, NumPy์ ์ ์ ์ธ Numeric ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์์์ด๊ธฐ๋ ํ๋ค. ๋ฐ๋ผ์ ๋น์ฐํ .NET Framework ํ๊ฒฝ์์ ์ ์๋ DLL๊ณผ ๊ฒฐํฉ์ฑ์ด ๋งค์ฐ ์ข๋ค. Jython๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์ GIL ๋๋ฌธ์ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค.
์๋งคํ์ผ๋ก๋ C#๋ก ์์ฑ๋ ๋ชจ๋์ ๋ง์น ํ์ด์ฌ ๋ชจ๋์ฒ๋ผ ์ํฌํธํด์ ์ธ ์ ์๋ Python for .NET์ด ์์ผ๋ฉฐ ์ด ๊ฒฝ์ฐ์๋ CPython ์์์ ๋์๊ฐ๋ค.
์๋งคํ์ผ๋ก๋ C#๋ก ์์ฑ๋ ๋ชจ๋์ ๋ง์น ํ์ด์ฌ ๋ชจ๋์ฒ๋ผ ์ํฌํธํด์ ์ธ ์ ์๋ Python for .NET์ด ์์ผ๋ฉฐ ์ด ๊ฒฝ์ฐ์๋ CPython ์์์ ๋์๊ฐ๋ค.
5.7. JavaScript ๊ตฌํ, Brython[ํธ์ง]
JavaScript๋ก ๊ตฌํ๋์๊ณ , JavaScript๋ฅผ ๋์ ํ์ฌ ์น ๋ธ๋ผ์ฐ์ ์์ ์คํฌ๋ฆฝํธ ํํ๋ก Python์ ์คํํ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ 'Brython'์ด ์๋ค. Python3๋ฅผ ๊ตฌํํ์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด script ํ๊ทธ์ type์ text/python์ผ๋ก ์ง์ ํ์ฌ ์คํํ ์ ์๋ค.
<!DOCTYPE html>
<html>
<head>
<title>Brython</title>
<script src="brython.js"></script>
</head>
<body onload="brython()">
<input id="zone"><button id="mybutton">click!</button>
<script type="text/python">
from browser import document, alert
def echo(ev):
alert(document['zone'].value)
document['mybutton'].bind('click', echo)
</script>
</body>
</html>5.7.1. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ transcrypt[ํธ์ง]
ํํ์ด์ง
ํ์ ์คํฌ๋ฆฝํธ์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ํ์ด์ฌ ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํด์ ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ์ ํผํฉํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. (Ex. ํ์ด์ฌ + jQuery)
ํ์ ์คํฌ๋ฆฝํธ์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ํ์ด์ฌ ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํด์ ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ์ ํผํฉํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. (Ex. ํ์ด์ฌ + jQuery)
5.8. Micro Python[ํธ์ง]
ํํ์ด์ง
๊ณตํ์์ ์ ๊ณตํ๋ ์น์๋ฎฌ๋ ์ดํฐ
ํ์ด์ฌ3์ ๊ธฐ๋ฅ์ ์๋ฒ ๋๋ ๋ณด๋์ ์ต์ ํ ํ์ฌ ๊ตฌํํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. Windows OS์ Windows Embeded OS์์ ๊ด๊ณ๋ฅผ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค. ๊ตญ๋ด์์๋ ์ฃผ๋ก ๋ง์ดํฌ๋ก๋นํธ๋ณด๋์์ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ค. ์นด์์ค FX-9860 GIII์ ํ์ ๋์ด ์๊ธฐ๋ ํ๋ค.
๊ณตํ์์ ์ ๊ณตํ๋ ์น์๋ฎฌ๋ ์ดํฐ
ํ์ด์ฌ3์ ๊ธฐ๋ฅ์ ์๋ฒ ๋๋ ๋ณด๋์ ์ต์ ํ ํ์ฌ ๊ตฌํํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. Windows OS์ Windows Embeded OS์์ ๊ด๊ณ๋ฅผ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค. ๊ตญ๋ด์์๋ ์ฃผ๋ก ๋ง์ดํฌ๋ก๋นํธ๋ณด๋์์ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ค. ์นด์์ค FX-9860 GIII์ ํ์ ๋์ด ์๊ธฐ๋ ํ๋ค.
6. ์ํ๊ณ[ํธ์ง]
6.1. ๊ฐ๋ฐ ํ๊ฒฝ[ํธ์ง]
- ์ฝ์
์๋์ฐ ๋ช ๋ น ํ๋กฌํํธ๋ ๋ฆฌ๋ ์ค Bash ๊ฐ์ ๊ณณ์์ ์คํํ๋ ์ฝ์ํ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ค. ์ฌ๊ธฐ์๋ ์ถฉ๋ถํ ๊ฐ๋จํ ์ฝ๋ฉ์ ํ ์ ์๊ณ , ์ฝ์ ์์์๋ pretty printer๋ฅผ ์ด์ฉํด ๋ค์ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ASCII Art๋ก ์ถ๋ ฅํด ์ฃผ๋ ๊ธฐ๋ฅ๊น์ง ์ด์ฉํด๋ณผ ์ ์๋ค.- IDLE
ํ์ด์ฌ ๊ธฐ๋ณธ ํ์ฌ ์ฝ์๋ก, ์์ ํ์ด์ฌ์ผ๋ก ์์ฑ๋์๋ค. ์ฝ์๊ณผ ๊ฐ์ด ์ง์ ๋ช ๋ น์ ์ ๋ ฅํ๋ ๊ฒ ์ธ์๋ ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ํธ์งํ ์ ์์ผ๋ฉฐ, ๋ฌธ๋ฒ ๊ฐ์กฐ์ ๋๋ฒ๊น ๋ฑ์ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ํ์ด์ฌ์ ์ ๋ฌธํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก ํ ์คํธ ์๋ํฐ๋ฅผ ์ค์นํ ํ์ ์์ด IDLE๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค. - IPython
์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ํ์ด์ฌ IDLE์ ๋ฌ๋ฆฌ LaTeX๋ svg, Matplotlib์ ํ๋กฏ ๊ฐ์ ๊ฒ๋ค๋ ์ถ๋ ฅํด์ค๋ค._repr_์ด๋ผ๋ ํน์ prefix๊ฐ ๋ถ์ ๋ฉ์๋๋ค์ ํด๋์ค์ ์ ์ํด ๋์ผ๋ฉด IPython์ ์ถ๋ ฅ ๊ธฐ๋ฅ๊ณผ ์ฝ๊ฒ ํตํฉ์ํฌ ์ ์๋ค. ํ์ ํ Jupyter์ ๋ฐฑ์๋๋ก๋ ์ฐ์ธ๋ค.
6.1.1. ํ ์คํธ ์๋ํฐ[ํธ์ง]
๋ฌธ๋ฒ ๊ฐ์กฐ์ ์๋ ๋ค์ฌ์ฐ๊ธฐ ๋ฑ์ ํธ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋จ. ๋ฉ๋ชจ์ฅ๋ณด๋ค๋ ๊ธฐ๋ฅ์ด ๋ง๊ณ IDE๋ณด๋ค๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ, ์ค๊ฐ ์ ๋์ ์๋ํฐ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
IDE๋ณด๋ค ๊ธฐ๋ฅ์ ๋ถ์กฑํ ๋์ ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฅด๊ณ , ์์ํ ๋ฒ๊ทธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ ์ทจํฅ์ด๋ ํ๋ก์ ํธ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ์ด์ชฝ์ ๋ ์ ํธํ๊ธฐ๋ ํ๋ค. ํ์ด์ฌ ๋ฌธ๋ฒ์ C๋ Java์ฒ๋ผ Boilerplating์ด ๋ณ๋ก ์๊ธฐ ๋๋ฌธ์ IDE์ ์๋ ์์ฑ ๊ธฐ๋ฅ์ด ์๋์ ์ผ๋ก ๋ ์ค์ํ๋ค. ๊ฐ์ค์๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ฌ IDE ๋ชป์ง์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
IDE๋ณด๋ค ๊ธฐ๋ฅ์ ๋ถ์กฑํ ๋์ ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฅด๊ณ , ์์ํ ๋ฒ๊ทธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ ์ทจํฅ์ด๋ ํ๋ก์ ํธ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ์ด์ชฝ์ ๋ ์ ํธํ๊ธฐ๋ ํ๋ค. ํ์ด์ฌ ๋ฌธ๋ฒ์ C๋ Java์ฒ๋ผ Boilerplating์ด ๋ณ๋ก ์๊ธฐ ๋๋ฌธ์ IDE์ ์๋ ์์ฑ ๊ธฐ๋ฅ์ด ์๋์ ์ผ๋ก ๋ ์ค์ํ๋ค. ๊ฐ์ค์๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ฌ IDE ๋ชป์ง์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
- Visual Studio Code: Python ์ ์ฉ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋ค.
6.1.2. ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE)[ํธ์ง]
- PyCharm
JetBrains ์ฌ์์ ๊ฐ๋ฐํ IDE๋ก, ์ฝ๋ ์ปดํ๋ฆฌ์ ๊ธฐ๋ฅ์ด ์ฐ์ํ๊ณ ๊ฐ์ข ํ๋ ์์ํฌ ์ง์์ด ๊ฐ์ฅ ๋ฐ์ด๋๋ค. ์ปค๋ฎค๋ํฐ ์๋์ ์ ๋ฌด๋ฃ์ด์ง๋ง Django ๊ฐ์ ์น ๊ฐ๋ฐ์ ๋์์ด ๋๋ ํด์ ์ฐ๋ ค๋ฉด ํ๋กํ์ ๋ ์๋์ ์ ์ฌ์ฉํด์ผ ํ๋ค. ํ๋กํ์ ๋ ์๋์ ์ด ์๋๋ผ๋ ํ๋ฌ๊ทธ์ธ ๋ฑ์ ํตํด ๊ธฐ๋ณธ์ ์ธ html/javascript ๋ฌธ๋ฒ์ง์๊ณผ ๊ธฐ๋ณธ์ ์ธ ์๋์์ฑ์ ๊ฐ๋ฅํ์ง๋ง, Django ์ ์ฉ ์๋์์ฑ(์๋ฅผ ๋ค์ด ํ ํ๋ฆฟ์์ ํ์ด์ฌ ๋ณ์๋ช ์ ์๋์์ฑํด ์ค๋ค๋์ง), ์ค์๊ฐ ๋ ๋๋ง ๋ฑ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. - Visual Studio
๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ๊ฐ๋ฐ ํด์ด์ง๋ง Breakpoint๋ฅผ ์ค์ ํด ๋๋ฒ๊น ์ ํ ์ ์๊ฑฐ๋, Variable Explorer์ ๊ฐ์ง๊ณ ์๊ฑฐ๋, Profiler๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฑ ๊ธฐ๋ฅ์ด ๋ค์ํด์ ์ถฉ๋ถํ ๊ฐ์ด์น๋ฅผ ํ ์ ์์ผ๋ฉด ์ฐ๋ ๊ฒ์ด ์ข๋ค. ๊ทธ ์ธ์๋ ํ์ด์ฌ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ฌธํ๋ ์ฌ๋๋ค์๊ฒ๋ ์ค์น๊ฐ ์ฝ๋ค๋ ์ ์์ ์ถ์ฒํ๋ ํธ์ด๋ค.
6.1.3. Notebook[ํธ์ง]
๋ค์ ํน์ดํ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก, ์คํ์ผ ์๋ ๋ฌธ์ ์์์ ์ฝ๋ฉ์ ์ ๋ชฉ์ํฌ ์ ์๋ค. ๋ธ๋ก๊ทธ๋ ๋
ธํธ๋ฅผ ์ฐ๋ฏ์ด ๋จ๋ฝ์ ๋ง๋ค๊ณ , ๊ทธ ์์ Cell์ ๋ง๋ค์ด์ ์ฝ๋๋ฅผ ์ ์ด๋๊ณ , ์คํ์ํค๋ฉด Plot ๊ฐ์ ๊ฒ์ ๋ณด์ฌ์ค ์ ์๋ค.
๋ฌผ๋ก ์ด๋ฐ ๊ฒ์ด ๋ฌด์จ ํ๋ก๊ทธ๋๋ฐ์ธ๊ฐ ์ถ๊ธด ํ์ง๋ง, ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค๋ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๊ฐ์ ๋ถ์ผ๋ ์์ฑ๋ ์์คํ ์ ๋ง๋ค๊ธฐ๋ณด๋ค, ํ์ด์ฌ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ฉด ๋๋์ง ํ๋กํ ํ์ ์ ๋ง๋ค๊ณ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ๋ฆฌํฌํธ๋ฅผ ์ฐ๊ฑฐ๋ ํ๋ฆฌ์ ํ ์ด์ ์ ํ๋ ์ผ์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค. ์ฆ ์ด๋ค์๊ฒ๋ ํ๋์ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฆฌ์ ๋ฆฌ ๋๋ ค๋ณด๋ฉฐ ์ฝ๋ฉ โ ๊ฒฐ๊ณผ ํ์ธ โ ์ฝ๋ ์์ โ ๊ฒฐ๊ณผ ํ์ธ ๋ฑ์ ๋ฐ๋ณต์ ์ธ ์์ ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ๋ฐ์ดํฐ ์๊ฐํ์ ๊ฐ์ ๋ถ์ผ์์๋ ์ฝ๋๋ฅผ ์ ๋จ์๋ก ๋๋์ด ๋ฐ๋ณต ์์ ํ๋ ์์ ์ ํ๋ ๋ฐ์ ์์ด์ ๋งค์ฐ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. SymPy, NumPy, SciPy, Matplotlib ๊ฐ์ ์ํ, ๊ณผํ, ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฃผ ์ด์ฉํ๋ ํ๊ฒฝ์์ ๊ฐ๋ฐํ ๋ ์ ์ฉํ ํธ์ด๋ฉฐ, pandas ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถ์์ ํ๋ ๋ฐ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
์ฌ์ค์ ๋ฐ์ดํฐ ๋ถ์ผ์์ Notebook์ ์ ๊ณ ํ์ค๊ณผ ๊ฐ์ ์ทจ๊ธ์ด๋ฉฐ, ์ด ๋๋ฌธ์ Google์ Colaboratory๋ MS์ Azure Notebook๊ณผ ๊ฐ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ ์ญ์ jupyter notebook์ ๋ชจ๋ฐฉํ๊ฑฐ๋ ํ์ฌํ๊ณ ์๋ค.
๋ฌผ๋ก ์ด๋ฐ ๊ฒ์ด ๋ฌด์จ ํ๋ก๊ทธ๋๋ฐ์ธ๊ฐ ์ถ๊ธด ํ์ง๋ง, ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค๋ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๊ฐ์ ๋ถ์ผ๋ ์์ฑ๋ ์์คํ ์ ๋ง๋ค๊ธฐ๋ณด๋ค, ํ์ด์ฌ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ฉด ๋๋์ง ํ๋กํ ํ์ ์ ๋ง๋ค๊ณ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ๋ฆฌํฌํธ๋ฅผ ์ฐ๊ฑฐ๋ ํ๋ฆฌ์ ํ ์ด์ ์ ํ๋ ์ผ์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค. ์ฆ ์ด๋ค์๊ฒ๋ ํ๋์ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฆฌ์ ๋ฆฌ ๋๋ ค๋ณด๋ฉฐ ์ฝ๋ฉ โ ๊ฒฐ๊ณผ ํ์ธ โ ์ฝ๋ ์์ โ ๊ฒฐ๊ณผ ํ์ธ ๋ฑ์ ๋ฐ๋ณต์ ์ธ ์์ ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ๋ฐ์ดํฐ ์๊ฐํ์ ๊ฐ์ ๋ถ์ผ์์๋ ์ฝ๋๋ฅผ ์ ๋จ์๋ก ๋๋์ด ๋ฐ๋ณต ์์ ํ๋ ์์ ์ ํ๋ ๋ฐ์ ์์ด์ ๋งค์ฐ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. SymPy, NumPy, SciPy, Matplotlib ๊ฐ์ ์ํ, ๊ณผํ, ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฃผ ์ด์ฉํ๋ ํ๊ฒฝ์์ ๊ฐ๋ฐํ ๋ ์ ์ฉํ ํธ์ด๋ฉฐ, pandas ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถ์์ ํ๋ ๋ฐ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
์ฌ์ค์ ๋ฐ์ดํฐ ๋ถ์ผ์์ Notebook์ ์ ๊ณ ํ์ค๊ณผ ๊ฐ์ ์ทจ๊ธ์ด๋ฉฐ, ์ด ๋๋ฌธ์ Google์ Colaboratory๋ MS์ Azure Notebook๊ณผ ๊ฐ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ ์ญ์ jupyter notebook์ ๋ชจ๋ฐฉํ๊ฑฐ๋ ํ์ฌํ๊ณ ์๋ค.
๊ณต๋ถํ๋ ์
์ฅ์์ ์คํฌ๋ฆฝํธ ํ์ผ์ ์ผ์ผ์ด ๋ง๋ค์ด์ผ ํ๋ ํต์์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์์ด ๋ฒ๊ฑฐ๋กญ๊ฒ ๋๊ปด์ง๋ค๋ฉด ์ฐจ๋ผ๋ฆฌ Notebook์ ์ด์ฉํด ๊ฐ์ข
์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ตํด ๋ณด๋ ๊ฒ์ด ์ข๋ค. ๋ค๋ง ํ์ผ์ด ๋จ์ํ ์คํฌ๋ฆฝํธ ํ์ผ์ด ์๋๋ผ ๊ฑฐ์ง ์๋ ๋ฌธ์ ๊ฐ์ ์์ค์ด ๋์ด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ (Plot ๊ฐ์ ๊ฒ์ ๋ฐ์ด๋๋ฆฌ ํํ๋ก ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค) ์ฉ๋์ด ์ปค์ง๊ณ Git๊ณผ ๊ถํฉ์ด ๋ง์ง ์๊ฒ ๋๋ค๋ ์ ์ ๋จ์ ์ด๋ค. ๋ํ ์ต์ ์ฒ ์ค์ด ๋์ด๊ฐ๋ ํ๋ก์ ํธ๋ ๋
ธํธ๋ถ์ผ๋ก ํ๋ฉด ์ ๋๋ค. ๋
ธํธ๋ถ์ ํ๋กํ ํ์ดํ์ด๋ ๋ฆฌํฌํธ๋ฅผ ์ฐ๋๋ฐ์๋ ํ์ฉํ๊ณ ์ง์ง ๊ฐ๋ฐ์ ํ์ด์ฌ ์คํฌ๋ฆฝํธ ํ์ผ์ ์์ฑํด ํ๋๋ก ํ์.
6.1.4. ํจํค์ง ๊ด๋ฆฌ[ํธ์ง]
๊ฐ์ข
ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ด๋ค. ๋ช๋ช ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฆฌ๋
์ค์ ํจํค์ง ๊ด๋ฆฌ์๋ก๋ ์ค์นํ ์ ์์ง๋ง, ํ์ด์ฌ ํจํค์ง ๊ด๋ฆฌ์ ํนํ๋ Pip์ด๋ Conda๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ดํ ํจํค์ง๋ฅผ ๊ด๋ฆฌํ ๋ ํธ๋ฆฌํ๋ค. ์ธ๋ฐ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํจ๊ป ์ค์น๋๊ฑฐ๋ ํจํค์ง ์์กด ๊ด๊ณ๊ฐ ๊ผฌ์ด๋ ๊ฒ์ ๋ง์ผ๋ ค๋ฉด ํ๋์ ํจํค์ง ๊ด๋ฆฌ์๋ง ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค.[34]
- Pip
ํ์ด์ฌ์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํจํค์ง๋ฅผ ๋ชจ๋ ํ ๊ณณ์ ์ค์นํ๊ธฐ ๋๋ฌธ์ ์์คํ ์ ๋ด์ฅ๋ ํ์ด์ฌ์ ์ํฅ์ ์ฃผ๋ฉฐ, ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ๊ด๋ฆฌํ ๊ฒฝ์ฐ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ๋ฐ๋ผ์ virtualenv๋ venv์ ๊ฐ์ด ๊ฐ์ ํ๊ฒฝ์ ๋ค๋ฃจ๋ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. - virtualenv
ํ์ด์ฌ ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ์๋ก, ํจํค์ง๋ฅผ ๋ง์๋๋ก ์ค์นํ ์ ์๋ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๋ค. ๊ฐ ํ๋ก์ ํธ๋ง๋ค ์์ ์ด ์ฌ์ฉํ ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ค์ด์ฃผ๋ฉด ํ๋ก์ ํธ๋ง๋ค ํ์ํ ํจํค์ง๋ฅผ ๋ฐ๋ก ์ค์ ํด์ฃผ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. - Anaconda
Conda๋ผ๋ ํจํค์ง ๊ด๋ฆฌ์ + ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ํ/๊ณผํ/๊ณตํ ์ ๋ฌด์ ํ์ํ NumPy, SciPy, Jupyter Notebook ๋ฑ์ ์๋ฐฑ ๊ฐ์ ํจํค์ง์ ๋๊ตฌ๋ฅผ ํ๋ฒ์ ๊น์์ค ๋ฟ๋ง ์๋๋ผ GUI๋ ์ ๊ณตํ๋ค. ๊ทธ๋์ ํต๊ณ๋ ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค, ์ธ๊ณต์ง๋ฅ ๋ฑ์ ๋ถ์ผ ์ชฝ ํ์ด์ฌ ์ ๋ฌธ์๋ค์๊ฒ ์ถ์ฒํ๋ ํธ์ด๋ค. ๋ค๋ง ์ค์น์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ์ด์ฐจํผ ๋ช๋ฐฑ ๊ฐ๋ ๋๋ ํจํค์ง๋ฅผ ๋ค ์ธ ์ผ์ ์๊ธฐ ๋๋ฌธ์ Conda ์ฌ์ฉ์ ์๋ จ๋๋ฉด ์๋์ ๋์จ Miniconda๋ฅผ ์ฐ๋ ๊ฒ๋ ์ข๋ค. 2020๋ ๋ถํฐ ์ ๋ถ ๋ฐ 200์ธ ์ด์ ๊ธฐ์ ์๊ฒ๋ ์ ๋ฃ๋ก ๋ฐ๋์๋ค.
- Miniconda
์์ Anaconda์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋์ผํ์ง๋ง, ํจํค์ง๋ ์๊ธฐ๊ฐ ์ง์ ์ฐพ์์ ๊น์์ผ ํ๋ค. ํ์ง๋ง ์ด์ฐจํผ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ ๊ฒ์#conda install <ํจํค์ง๋ช >๋ช๋ฒ๋ง ๋๋๋ ค ๋ณด๋ฉด ๊ฐ๋จํ ํด๊ฒฐ๋๋ค. ์ด๊ฒ๋ ์๋์ฝ๋ค์ ๋ณํ์ด๋ผ์ ์ ๋ถ ๋ฐ 200์ธ ์ด์ ๊ธฐ์ ์๊ฒ๋ ์ ๋ฃ.
6.1.5. ์ฝ๋ ๊ฒ์ฌ[ํธ์ง]
๋ด๊ฐ ์์ฑํ ํ์ด์ฌ ์ฝ๋๊ฐ ์ ์ฐ์๋์ง ๊ฒ์ฌํ๋ ๋๊ตฌ. ํ์ด์ฌ์ ๋ค๋ฅธ ์ธ์ด์ ๋นํด ๋ฌธ๋ฒ ๊ท์น์ด ์ผ๊ด์ ์ด์ง๋ง, ํ ์ค์ ๊ธธ์ด๋ ๋ฌธ์์ด์ ๊ฐ์ธ๋ ๋ฐ์ดํ(
์ฝ๋ ๊ฒ์ฌ ๋๊ตฌ์ ํ ๊ฐ๋๋ก ์๋ฃํ ๊ฒ์ฌ ๋๊ตฌ(type checker)๊ฐ ์๋ค. ๋์ ์ธ์ด๋ผ์ ๋ณ์์ ์๋ฃํ์ ๋ฐ๋ก ์ฒดํฌํ์ง ์๋ ํ์ด์ฌ์ ์ํด, ์ฝ๋๋ฅผ ์ง์ ๋ถ์ํ์ฌ ๋ณ์๋ฅผ ์ฌ๋ฐ๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ๋์ง, ํน์ ํจ์์ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ ๋ฌํ๋์ง์ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฒ์ฌํ๋ค. ๋น์ทํ ๋์ ์ธ์ด์ธ JavaScript์ ์๋ฃํ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํ๋ TypeScript์ ์ ์ฌํ์ง๋ง, ์ปดํ์ผ์ด ํ์ํ TypeScript์ ๋ฌ๋ฆฌ Python์ ์ธ์ด ์ฐจ์์์ type hint๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์[35] type hint๋ฅผ ์ถ๊ฐํ ์ฝ๋๋ ๊ทธ๋๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค.
""/'') ๋ฑ ๊ฐ๋ฐ์ ์
์ฅ์์ ๋
ผ์๊ฑฐ๋ฆฌ๊ฐ ๋ ๋งํ ์์๋ ๋ง๋ค. ๋ฐ๋ผ์ ์ฝ๋ฉ ์คํ์ผ์ ํต์ผํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ฌ๋์ด ํ์
ํ๋ฉด์ ์๊ธฐ๋ ์ฝ๋์ ๊ฐ๋
์ฑ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ ์ ์๋ค. ๋ํ ์ฝ๋ฉํ๋ ์ค์๋ ์ค๋ฅ๋ ๋ฐ๋์งํ์ง ์์ ์ฝ๋๋ฅผ ์ก์๋ผ ์ ์๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๊ทธ๋ฅผ ์ผ์ฐ ์ก์๋ด๊ณ ํ
์คํธ์ ๋๋ ๋
ธ๋ ฅ์ ์ค์ผ ์ ์๋ค.์ฝ๋ ๊ฒ์ฌ ๋๊ตฌ์ ํ ๊ฐ๋๋ก ์๋ฃํ ๊ฒ์ฌ ๋๊ตฌ(type checker)๊ฐ ์๋ค. ๋์ ์ธ์ด๋ผ์ ๋ณ์์ ์๋ฃํ์ ๋ฐ๋ก ์ฒดํฌํ์ง ์๋ ํ์ด์ฌ์ ์ํด, ์ฝ๋๋ฅผ ์ง์ ๋ถ์ํ์ฌ ๋ณ์๋ฅผ ์ฌ๋ฐ๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ๋์ง, ํน์ ํจ์์ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ ๋ฌํ๋์ง์ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฒ์ฌํ๋ค. ๋น์ทํ ๋์ ์ธ์ด์ธ JavaScript์ ์๋ฃํ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํ๋ TypeScript์ ์ ์ฌํ์ง๋ง, ์ปดํ์ผ์ด ํ์ํ TypeScript์ ๋ฌ๋ฆฌ Python์ ์ธ์ด ์ฐจ์์์ type hint๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์[35] type hint๋ฅผ ์ถ๊ฐํ ์ฝ๋๋ ๊ทธ๋๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค.
- ์ฝ๋ ์ค๋ฅ ๊ฒ์ฌ
- ์๋ฃํ(ํ์ ) ๊ฒ์ฌ
- MyPy: ํ์ด์ฌ์ ์ํ ์๋ฃํ ๊ฒ์ฌ ๋๊ตฌ์ ์์กฐ๋ก, ์์ Python์ผ๋ก ์์ฑ๋์๋ค.
- Pyright: ๋ง์ดํฌ๋ก์ํํธ์์ ๊ฐ๋ฐํ ์๋ฃํ ๊ฒ์ฌ ๋๊ตฌ๋ก, TypeScript๋ก ์์ฑ๋์๋ค. Visual Studio Code ํ๋ฌ๊ทธ์ธ์ ์ ์ ์ง์ํ๋ฉฐ, ํ๋ฌ๊ทธ์ธ์ด ์๋ ๋ช ๋ น์ค ๋๊ตฌ๋ก ์ฌ์ฉํ๋ ค๋ฉด Node.js๋ฅผ ์ค์นํด์ผ ํ๋ค.
- ์ฝ๋ฉ ์คํ์ผ ๊ฒ์ฌ ๋ฐ ์์
- Black: ๋ค๋ฅธ ์คํ์ผ ๊ฒ์ฌ ๋๊ตฌ์ ๋นํด ๋งค์ฐ ์๊ฒฉํ ๊ฒ์ด ํน์ง์ผ๋ก, ์ฝ๋ฉ ์คํ์ผ์ ๋ํด ์์ ๋ ผ์์ ๋ชปํ๊ฒ ํ ๊ฐ์ง ์คํ์ผ์ ๊ฐ์ํ๋ค๋ ์ปจ์ ์ ๊ณ ์ํ๋ค. ์ด ๋๋ฌธ์ ๋ค๋ฅธ ๊ฒ์ฌ ๋๊ตฌ์ ๋นํด ์ค์ ํ ์ ์๋ ์ต์ ์ ๊ฐฏ์๊ฐ ๋งค์ฐ ์ ๋ค. ๋ด๊ฐ ์ํ๋ ์ฝ๋ ์คํ์ผ์ด ์๋๋ผ Black์ด ๊ฐ์ํ๋ ์คํ์ผ์ ๋ฐ๋ผ๊ฐ์ผ ํ๋ค๋ ๋จ์ ์ด ์์ง๋ง, ๋์ Black์ผ๋ก ์ฒ๋ฆฌํ ์ฝ๋๋ ๋๊ฐ ์ฐ๋ ๋น์ท๋น์ทํด์ ๊ธ๋ฐฉ ์ต์ํด์ง๋ค. ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ์จ์ผ ํ ๊ฒ์ ์ต์ํํ๋ค๋ ์ ๋๋ถ์ ํ๋ฐ์ฃผ์์์๋ ๋น ๋ฅด๊ฒ ์ธ๊ธฐ๋ฅผ ์ป์๋ค.
- isort: import ๋ฌธ์ ์ผ๊ด์ฑ ์๊ฒ ์ ๋ ฌํด ์ค๋ค.
6.2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ[ํธ์ง]
- ๋ทฐํฐํ ์ํ(Beautiful Soup): XML, HTML์ ๊ฐ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ ๋๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- ํ๋ก์ฐ(Pillow): PIL์ ๊ฐ๋ฐ์ด ์์ ์ ์ค์ง๋์๊ณ , PIL์ ํฌํฌ(fork)์ธ Pillow๊ฐ ๊ทธ ์ญํ ์ ๋์ ํ๊ณ ์๋ค. Pillow๋ฅผ ์ฐ์. PIL์ Python Imaging Library์ ๋จธ๋ฆฟ๊ธ์๋ก ๊ฐํธํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- tossi: ์ผ์์ ๋ : ๋๋๊ณ ๋ฅผ ๊ฐ๋ฐํ ์ ์คํ๋์ค์์ ๊ฐ๋ฐํ ํ๊ตญ์ด ์กฐ์ฌ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ๊ฐ์ ์ธ๋ฌผ์ด ๋ง๋ korean ๋ชจ๋์ ๋์ฒดํ๋ค.
6.2.1. ์ํ[ํธ์ง]
๋ฒ์ฉ์ฑ์ ์ง๋ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค
- ์ฌํ์ด(SymPy): ์ธ์ ๋ถํด, ๋ฏธ๋ถ, ์ ๋ถ ๋ฑ ์ฌ๋ณผ๋ฆญ ์ฐ์ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๋ํ์ด(NumPy): ํต๊ณ, ์ ํ ๋์, ํ๋ ฌ ๊ณ์ฐ, ๊ธ์ต ์ด์ฉ ๋ฑ์ ํฌํจํ ๊ณผํ ๊ณ์ฐ๊ณผ ์ํ ์์ . ์์น ํด์, ํนํ ์ ํ ๋์(linear algebra) ๊ณ์ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ์๋ฃํ์ด ๊ณ ์ ๋ ๋ค์ฐจ์ ๋ฐฐ์ด ํด๋์ค(n-dimensional array)์ ๋ฒกํฐํ ์ฐ์ฐ(vectorized operation)์ ์ง์ํ๋ค. ์ฐธ๊ณ ๋ก Numpy๋ C์ธ์ด๋ก ์ ์๋์ด, ํ์ด์ฌ ๋ต์ง ์์ ๋์ฌ๋ฒฝ ์์ค์ ์๋๋ฅผ ์๋ํ๋ค. ๊ผญ ์์นํด์/์ ํ๋์ ๋ชฉ์ ์ด ์๋๋๋ผ๋ ๋ฐฐ์ดํํ์ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ์๋๋ฅผ ๊ฐ๋จํ๊ฒ ๋์ด๋ ์ผ๋งค ์์ค์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์ธ์ดํ์ด(SciPy): ๊ณ ์ฑ๋ฅ ์ ํ๋์, ํจ์ ์ต์ ํ, ์ ํธ ์ฒ๋ฆฌ, ํน์ํ ์ํ ํจ์์ ํต๊ณ ๋ถํฌ ๋ฑ ๊ณผํ ๊ณ์ฐ์ฉ ํจ์๋ฅผ ๋ชจ์๋์ ํ์ด์ฌ ํจํค์ง์ด๋ค. ๊ณ ๊ธ ์ํ ํจ์, ์์น์ ๋ฏธ์ ๋ถ, ๋ฏธ๋ถ ๋ฐฉ์ ์ ๊ณ์ฐ, ์ต์ ํ, ์ ํธ ์ฒ๋ฆฌ ๋ฑ์ ์ํ ๋ค์ํ ๊ณผํ ๊ธฐ์ ๊ณ์ฐ ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ค.
6.2.2. ๋ฐ์ดํฐ[ํธ์ง]
๋น
๋ฐ์ดํฐ, ํต๊ณํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- ํ๋ค์ค(pandas): ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ถ์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ํ ์ด๋ธ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋ฐ์ดํฐํ๋ ์(DataFrame) ์๋ฃํ์ ์ ๊ณตํ๋ค. R์ data.frame์ ๋ณธ๋ ์ ์ค๊ณํ DataFrame์ด๋ผ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋ค. Visualizing Pandas' Pivoting and Reshaping Functions ์ฐธ์กฐ.
- ๋ค์คํฌ(Dask) : ํํ์ด์ง ํ๋ค์ค์ ๋ณ๋ ฌ&๋ถ์ฐ์ฒ๋ฆฌ ๋ฒ์ . ํ๋ค์ค๋ ์ฌ์ฉ๋ฒ์ด ๊ฑฐ์ ๊ฐ์ผ๋ฉด์๋ ๋๋ผ๋งํฑํ๊ฒ ๋นจ๋ผ์ง๋ค. ๋ค๋ง ์์ง ๊ฐ ๊ธธ์ด ๋จผ ๊ฒ์ด ํ .
6.2.3. ๊ทธ๋ํ (์ฐจํธ) ๊ทธ๋ฆฌ๊ธฐ[ํธ์ง]
์ํ์ด๋ ๋ฐ์ดํฐ์ ์๊ฐํ๋ฅผ ์ ๋ฌธ์ ์ผ๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋งทํ๋๋ฆฝ(matplotlib): ๊ณผํ ๊ณ์ฐ์ฉ ๊ทธ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. Tkinter, wxPython, Qt, GTK+ ๋ฑ์ ๊ทธ๋ํฝ ์์ง์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ทธ๋ํ์ ์ฑ ํธ ๋ฑ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์๊ฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. pylab์ด๋ผ๋ ์๋ธํจํค์ง๋ฅผ ์ ๊ณตํ์ฌ MATLAB์ ๊ทธ๋ํ ๊ธฐ๋ฅ์ ๊ฑฐ์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- ์จ๋ณธ(Seaborn): matplotlib์์ ์ง์ํ์ง ์๋ ๊ณ ๊ธ ํต๊ณ ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํ ํต๊ณ์ฉ ์๊ฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- ๋ณด์ผ(Bokeh): ์ฃผํผํฐ ๋ ธํธ๋ถ์ด๋ ์น์์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ทธ๋ํ๋ ์ฐจํธ๋ฅผ ๊ทธ๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค.
- Pygal: ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
6.2.4. ๋จธ์ ๋ฌ๋[ํธ์ง]
๋จธ์ ๋ฌ๋, ๋ฅ ๋ฌ๋ ์ ๋ฌธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํ ์ํ๋ก์ฐ(TensorFlow): ๊ตฌ๊ธ์์ ์คํ ์์ค๋ก ๊ณต๊ฐํ ๊ธฐ๊ณ ํ์ต, ์ธ๊ณต ์ ๊ฒฝ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- ์ฌ์ดํท๋ฐ(scikit-learn): ํ์ด์ฌ์ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- ํ์ดํ ์น( PyTorch): ํ ์น ๊ธฐ๋ฐ์ ๊ธฐ๊ณ ํ์ต ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ๊ฐ๊ฒฐํ๊ณ ๊ตฌํ๊ณผ ์ฑ๋ฅ์ด ๋น ๋ฅด๋ฉฐ, TensorFlow๋ณด๋ค ์ฌ์ฉ์๊ฐ ์ตํ๊ธฐ ํจ์ฌ ์ฝ๋ค. ํ๊ณ์์๋ 2017๋ ๋ถํฐ ์ด๋ฏธ ํ์ดํ ์น๊ฐ ํ ์ํ๋ก์ฐ๋ณด๋ค ๋ ๋ง์ด ์ธ๊ธ๋๊ณ ์๋ค.
- ์ผ๋ผ์ค(Keras): TensorFlow, Theano, CNTK ๋ฑ ๋ฅ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฑ์๋๋ก ์ฌ์ฉํ ์ ์์ด ์ฝ๊ฒ ๋ค์ธต ํผ์ ํธ๋ก ์ ๊ฒฝ๋ง ๋ชจ๋ธ, ์ปจ๋ณผ๋ฃจ์ ์ ๊ฒฝ ๋ง ๋ชจ๋ธ, ์ํ ์ ๊ฒฝ๋ง ๋ชจ๋ธ, ์กฐํฉ ๋ชจ๋ธ ๋ฑ์ ๊ตฌ์ฑํ ์ ์๋ค. TensorFlow ๋ฑ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋นํด ์ฌ์ด ๋ฌธ๋ฒ์ด ํน์ง. ํ์ฌ๋ TensorFlow์ ํตํฉ๋์๋ค.
6.2.5. GUI ํ๋ก๊ทธ๋๋ฐ[ํธ์ง]
ํ์ด์ฌ์์ GUI ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๊ฒ์ ํ์ด์ฌ์ ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋ Tkinter์ด์ง๋ง ๊ทธ ์ธ์๋ wxPython, PyQt, PySide[36], PyGTK, SFML, pyglet๋ ์ฐ์ธ๋ค. ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ javascript์ python ํจ์ ํธ์ถ ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๊ฑฐ์ ๊นจ์ฃผ๋ eel์ ์ฌ์ฉํ๋ฉด ์น ๊ธฐ์ ์ ์ฌ์ฉํด GUI ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
6.2.5.1. tkinter[ํธ์ง]
tkinter๋ Tk interface์ ์ฝ์์ด๋ค. Tk๋ GUI ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. Tcl์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก Tk์ ํจ๊ป GUI์ ์ฐ์ธ๋ค.
6.2.5.2. Qt for Python[ํธ์ง]
PySide2 ๋ชจ๋์ ๊ธฐ๋ฐ์ผ๋ก Qt5 ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ด์ฌ์ผ๋ก ์์ฑํ ์ ์๋๋ก Qt(ํ๋ ์์ํฌ) ์ธก์์ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ณ ์๋ค.
6.3. ํ๋ ์์ํฌ[ํธ์ง]
6.3.1. ์น ํ๋ ์์ํฌ[ํธ์ง]
Python์ ์น ์๋ฒ[37]์ ์น ์ดํ๋ฆฌ์ผ์ด์
(ํ๋ ์์ํฌ) ๊ฐ์ ํธํ์ ์ํด ํฌ๊ฒ ๋ ๊ฐ์ง ๊ท๊ฒฉ์ ์ ์ํ๊ณ ์๋ค. ํ๋๋ Java์ ์๋ธ๋ฆฟ์ ๋ชจ๋ฐฉํ WSGI์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๋น๋๊ธฐํ(async/await) ํ๋ก๊ทธ๋๋ฐ์ ์ํด ๋ง๋ค์ด์ง ASGI์ด๋ค. ์น ํ๋ ์์ํฌ์ ์น ์๋ฒ๋ฅผ ์ ํํ ๋ ์๋ก ํธํ์ด ๋๋์ง ํ์ธํด์ผ ํ๋ค. ์ด ์ธ์๋ ์์ฒด์ ์ผ๋ก ์น ์๋ฒ๋ฅผ ์ ๊ณตํ๊ฑฐ๋ ๋
์์ ์ธ ๊ท๊ฒฉ์ ์ฌ์ฉํ๋ ํ๋ ์์ํฌ๋ ์๋ค.
- WSGI ๊ธฐ๋ฐ (๋๊ธฐํ)
- Django: ํ ์คํ ์น ํ๋ ์์ํฌ. ์ ์์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ ๊ฒ์ ์๋์ง๋ง ASGI ์๋ฒ์๋ ๋ถ๋ถ์ ์ผ๋ก ํธํ์ด ๋๋ค.
- Flask: ๋ง์ดํฌ๋ก ์น ํ๋ ์์ํฌ. ๊ฐ๋ณ๊ณ ๊ฐ๋จํ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ข์ผ๋, ๋ณต์กํ ๊ธฐ๋ฅ์ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ผ ํ๋ค.์ฌ์ฉ๋ฐฉ๋ฒ
- ASGI ๊ธฐ๋ฐ (๋น๋๊ธฐํ)
6.3.2. ๊ทธ ์ธ[ํธ์ง]
- Pygame - ํ์ด์ฌ์ผ๋ก ๋น๋์ค ๊ฒ์์ ์ ์ํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ด๋ค.
- ์คํฌ๋ํผ(Scrapy): ์น ์คํฌ๋ํ ๋ฐ ํฌ๋กค๋ง
7. ๊ด๋ จ ํ[ํธ์ง]
- ๋ฌธ์์ด์ ํฉ์น ๋ join์ ์ฐ์. range ํจ์์ str ํจ์๋ฅผ ๊ฐ์ด ์ฐ๋ฉด ๋งค์ฐ ํธํด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
''.join(str(x) for x in range(10))
- ์ฌ๋ผ์ด์ค(slice) ๋ฌธ๋ฒ์ ๋ฆฌ์คํธ/๋ฌธ์์ด์ ๋ถ๋ถ์ ์๋ผ๋ด๋ ๊ฒ ์ด์ธ์๋ ๋ค์ํ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
# ๋ฌธ์์ด ๋ค์ง๊ธฐ a = 'abc' print(a[::-1]) # ์ถ๋ ฅ: cba # ๋ฆฌ์คํธ ๋ณต์ฌ a = [1, 2, 3] b = a[:] print(b) # ์ถ๋ ฅ: [1, 2, 3] print(a is b) # ์ถ๋ ฅ: False c = [[1, 2], [3, 4]] d = c[:] c[0] = [5, 6] # ๋ฆฌ์คํธ ์์ฒด๋ ๋ณต์ฌ๋์ง๋ง c[1][0] = 7 # ๋ฆฌ์คํธ์ ์์๋ค๊น์ง ๋ณต์ฌ๋์ง๋ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํ์. print(c) # ์ถ๋ ฅ: [[5, 6], [7, 4]] print(d) # ์ถ๋ ฅ: [[1, 2], [7, 4]] print('%s, %s, %s' % (c is d, c[0] is d[0], c[1] is d[1])) # ์ถ๋ ฅ: False, False, True
- ์ซ์, ๋ฌธ์, ํํ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ(immutable)ํ๋ฉฐ, ๋ฆฌ์คํธ, ์งํฉ, ๋์ ๋๋ฆฌ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ(mutable)ํ๋ค. ์ด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๋ฃํ์ ๋ค๋ฅธ ๋ณ์์ ๋์ ํ์ฌ๋ ๊ทธ ๋ด์ฉ์ด ๊ณต์ ๋๋ค. ๊ทธ ์๋ก, ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ํ์.
a = (1, 2, 3) b = a b += (2, 1) print(a) # ์ถ๋ ฅ: (1, 2, 3) print(b) # ์ถ๋ ฅ: (1, 2, 3, 2, 1)
์ฐ๋ฆฌ๊ฐ ์์ํ ๋๋ก, ํํ b๋ง ๋ณ๊ฒฝ๋๊ณ , a๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค. ์์ ์ฝ๋์์ ํํ(immutable)์ ๋ฆฌ์คํธ(mutable)๋ก ๋ฐ๊พธ์ด ๋ณด์.a = [1, 2, 3] b = a b += [2, 1] print(a) # ์ถ๋ ฅ: [1, 2, 3, 2, 1] print(b) # ์ถ๋ ฅ: [1, 2, 3, 2, 1]
์ถ๋ ฅ์ ๋ณด๋ฉด b๋ง ๋ณ๊ฒฝํ์์๋ a๊ฐ ๋ณํ๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค. ์ด๊ฒ์ ๋ชจ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๋ฃํ์ ์ ์ฉ๋๋ฉฐ, ์ฌ์ง์ด ๋ฆฌ์คํธ ์์ ๋ฆฌ์คํธ ๊ฐ์ ๊ฒ๋ค๊น์ง๋ ๊ณต์ ๊ฐ ๋๋ค. ๊ทธ๋ฌ๋ ์๋ณธ์ ๋ณ๊ฒฝํ๋ฉด ์ ๋๋ ๊ฒฝ์ฐ์๋ list(), set(), dict()๋ copy ๋ชจ๋ ๋ฑ์ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๊ณ ์์ ํ์. ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์๋ฃํ์ ์๋ณธ์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ํด๋น์ฌํญ์ด ์๋ค.
ํนํ list๋ dict ์์ฒด๋ฅผ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ ๋ด๋ถ์์ ๋ฆฌ์คํธ๋ฅผ ๋ณํํ๋ ์ฐ์ฐ์ ํ๋ฉด ํจ์ ๋ฐ์์๋ list๋ dict๊ฐ ๋ณํ๋๋ ์ฃผ์ํ๋๋ก ํ์.
- list.insert(0) ์ list.append()๋ ๊ฐ๊ฐ ์ฒซ๋ฒ์งธ ์๋ฆฌ์ ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋, ๋ง์ง๋ง ์๋ฆฌ์ ๊ฐ์ ์ถ๊ฐํ๋ ์ ๋์ ์กฐ๊ทธ๋งํ ์ฐจ์ด์ผ ๋ฟ์ด์ง๋ง, ๊ณ์ฐ ์๊ฐ์ด O(N)๊ณผ O(1) ์์ค์ผ๋ก ์ฐจ์ด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋์ prepending์ ์์กดํ๋ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ด์ฌ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ ค๋ฉด, ์๊ณ ๋ฆฌ์ฆ์ ๊ฑฐ๊พธ๋ก ๋ค์ง๋ ๊ฒ์ด ์ข๊ณ , ๋ง์ฝ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ง๊ธฐ ํ๋ค๋ค๋ฉด, ํ์ด์ฌ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ deque ๊ฐ์ ๊ฒ์ ์จ์ผ ํ๋ค. ์๋ฃ๊ตฌ์กฐ ๊ฐ๋ ์ ๋ํ ๊ฐ๊ฐ์ด ์์ผ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
CPython๊ฐ์ ๊ฒฝ์ฐ JIT๋ฅผ ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ฒ์ ์๋์ผ๋ก ์ต์ ํ ํด ์ค๋ค๊ณ ์๊ฐํ์ง ๋ง์.
- ๊ดํธ ์์ for ๊ณผ if, else ๋ฅผ ๋ฃ์ ์ ์ฃผ์ํ์.
#1 list(x for x in range(10) if x%2 == 0) #2 list(x for x in range(10) if x%2 == 0 else 0) #3 list(x if x%2 == 0 else 0 for x in range(10))
1์ ๋์ง๋ง 2๋ ๋์ง ์์ผ๋ฉฐ 3์ ๋๋ค. if๋ง ๋ฃ์ ๊ฒฝ์ฐ for ๋ค์ ์จ์ผ ํ๋ฉฐ, ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ์์๋ค์ ์๋ต๋๋ค(์ฆ, 1์ ๊ฒฐ๊ณผ๋ฌผ์ [0, 2, 4, 6, 8]์ด๋ค). if์ else ๋ชจ๋๋ฅผ ๋ฃ๋๋ค๋ฉด for ์์ ๋ฃ์ด์ผ ํ๋ฉฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด ๋งจ ์, ์๋๋ผ๋ฉด else ๋ค์์ด ๋ฐํ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก ํธ์ถ๋ ๊ฐ(๋์ ์ด ์ด๋ฃจ์ด์ง์ง ์์ ๊ฒฝ์ฐ)์ _ ๋ณ์์ ์ ์ฅ๋๋ค. ๋ํ ์ด ๋ณ์์ ๋์ ํ ๊ฐ์ ๋ฒ๋ ค์ง๋ค.
- ๋ฉํฐํ๋ก์ธ์ฑ์ __main__ ๋ธ๋ญ ์์ ๋ค์ด๊ฐ์ผ ํ๋ค. ๋ค์์คํ์ด์ค ๋ฌธ์ ๋๋ฌธ. ๋ค์ด๊ฐ์ง ์์ผ๋ฉด ์ค๋ฅ๋ฅผ ๋ฟ๋๋ค.
#if ๋์ while๋ ๊ฐ๋ฅ. if __name__ == '__main__':
- ํ์ด์ฌ 2์ 3์์์ range๋ ๋ฆฌํด ํ์์ด ๋ค๋ฅด๋ค. 2์์๋ ๋ฆฌ์คํธ๋ฅผ ๋ฆฌํดํ์ง๋ง 3์์๋ range ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค. ๋ฐ๋ผ์ 3์์ range๋ฅผ ๋ฆฌ์คํธ๋ก ๋ฐ๊พธ๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ๋ค๋ก ์ ํํด์ผ ํ๋ค. ํ์ด์ฌ 2์ ์ต์ํ ์ฌ๋์, ํ์ด์ฌ 3์ range๋ ํ์ด์ฌ 2์ xrange์ ๋์ผํ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
list(range(10)) [*range(10)]
๊ทธ ์ธ์๋ ํ์ด์ฌ 2์ 3์ ์ ์ ๋๋์ , print ๋ฌธ๋ฒ, ๋ฌธ์์ด ์ข ๋ฅ, import ๋ฐฉ์ ๊ฐ์ ๋ฐ์ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ ํธ์ด๋ค. ์ผ๋ถ๋__future__์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์ด์ฌ 2์์๋ 3๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ธ ์ ์๋๋ก ํด ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ง๋ง, ๊ทธ๋ ์ง ์์ ๋ถ๋ถ๋ค์ stack overflow๋ฑ์ ์ฐธ๊ณ ํด์ ์ง์ ๋ง๋ค์ด์ ์ฐ๋ ๊ฒ์ด ์ข๋ค. ํ์ฌ ๋ง์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด__future__๋ก ๋๋ฐฐ๋์ด ์๊ณ ๊ฐ๋ด ์๊ณต์ ์์ผ๋ก ํธํ์ฑ์ ๋์งํด ์๋ ๊ฒ์ ๋ณด๋ฉด ๋ง์ด๋ค. ํ์ด์ฌ 2.7์ด ๊ณต์์ ์ผ๋ก ์ง์์ด ์ค๋จ๋๋ฉด ์์ ๊น์ง ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํ์ด์ฌ 2 ์ง์์ ์ฒ ํํ ๊ณํ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ๊ทธ ๋๊ฐ ๋๋ฉด ์ด๋ฐ ํธํ์ฑ ๋ฌธ์ ์์ ์จํต์ด ํธ์ผ ๊ฒ์ด๋ค.
- Bolierplate ์ฝ๋๊ฐ ์ ๊ณ , ๋ฆฌ์คํธ์ ์ , ํด์ ๋ฑ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ๋จํ ๊ธฐํธ๋ก ํ๊ธฐํ ์ ์์ด ์ฝ๋ฉ ํ ์คํธ ์ ๋ง์ด ์ฌ์ฉ๋๋ ์ธ์ด์ด๊ธฐ๋ ํ๋ค. Python์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ C++, Java ๋ฑ์ผ๋ก ๊ตฌํํ์ ๋๋ณด๋ค ์ ์ฒด์ ์ธ ์ฝ๋ ๊ธธ์ด๊ฐ ๋น์ฝ์ ์ผ๋ก ์งง์์ง๋ค.
- ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ผ๋ ์ด์ด์ ์๋ฌด ๋ชจ๋์ด๋ ์ํฌํธํ๊ฑฐ๋, print ํจ์์ ๋ํด dir(print)๋ฅผ ์ ๋ ฅํด๋ณด๋ฉด ํ์ด์ฌ์ ๊ตฌ์กฐ๋ฅผ ์ข ๋ ์ ์๊ฒ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ํจ์๊ฐ ๋ค๋ฅด๊ฒ ๋ณด์ผ ๊ฒ์ด๋ค.
8. ๋ฌธ๋ฒ[ํธ์ง]
9. ๋์[ํธ์ง]
ํ์ด์ฌ์ 2021๋
ํ์ฌ๊น์ง๋ ์ด๊ฑฐ๋ค! ํ ๋งํ ๋ช
์ ๊ฐ ์๋ค. ํ๋ก๊ทธ๋๋ฐ ์
๋ฌธ๋ถํฐ ์ค์ฌ์ฉ๊น์ง ์ค๋ง๊ฐ์ง ์ฑ
๋ค์ด ๋๋ฆฝํด ์์ด์ ํต์ฌ์ ๊ดํตํ๋ ์ฃผ์ ๋ฅผ ๋ฑํ ์ก๊ธฐ ์ด๋ ค์์์ธ ๋ฏ ํ๋ค. (--์ฌ์ค ๊ธฐ๋ณธ๊ธฐ์ ๊ฐ๋
๋ง ์ ๋๋ก ์ตํ ๋ค์์๋ ์ ์ผ ๋ฐฐ์ฐ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ด ๊ตฌ๊ธ๋ง์ด๋ผ ์นด๋๋ผ.--)
ํ์ด์ฌ ๊ด๋ จ ์ฑ ์ ๋ํ ์์ ์ ๊ฐ๋ฉด ํ์ด์ฌ ๋ถ๋ฅ๊ฐ ๋ฐ๋ก ์กํ์ ์ด๋ง์ด๋งํ๊ฒ ๋๋ฆฝํด ์์ ์ ๋๋ก ๊ฒฝ์์ด ์น์ดํ๋ค. ํ์ด์ฌ๋ง ๋ฐ๋ก ๋ถ๋ฅ๊ฐ ์กํ์ ๋งค๋๋ฅผ ๊ฝ ์ฑ์ด ํ์ด์ฌ ์ฑ ๋ค์ ๋ณด๋ค ๋ณด๋ฉด ์ถ์ถ์ ๊ตญ์๋ ์ ๋ฆฌ๊ฐ๋ผ ํ ์์ค์ด๋ค. ๊ทธ๋ฌ๋ ๋์๋ค์ด ์ฃ๋ค ํน์ ๋ถ์ผ์๋ง ์น์คํด์ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ๊ดํตํ ์ฑ ์ ๋ณ๋ก ์๋๊ฒ ๋ฌธ์ ์ด๋ค. Ruby๊ฐ์ ๊ฒฝ์ฐ๋ ๊ธฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ Programming Ruby ๋ฑ ํ๊ถ๋ง ๋ฌ์๋๋ ์ฌ๊ณ ๊ฐ ์์ ์ ๋๋ก ์ธ๊ธฐ์ธ ๊ฒ๊ณผ ์ ๋ฐ๋. Python์ ์ฑ ์ด ์๋ ๋ง๋ค๋ณด๋ ์์ ์๋ ์ฌ๊ณ ๊ฐ ์๋๋ฃฉํ๋ค.
ํ์ด์ฌ ๊ด๋ จ ์ฑ ์ ๋ํ ์์ ์ ๊ฐ๋ฉด ํ์ด์ฌ ๋ถ๋ฅ๊ฐ ๋ฐ๋ก ์กํ์ ์ด๋ง์ด๋งํ๊ฒ ๋๋ฆฝํด ์์ ์ ๋๋ก ๊ฒฝ์์ด ์น์ดํ๋ค. ํ์ด์ฌ๋ง ๋ฐ๋ก ๋ถ๋ฅ๊ฐ ์กํ์ ๋งค๋๋ฅผ ๊ฝ ์ฑ์ด ํ์ด์ฌ ์ฑ ๋ค์ ๋ณด๋ค ๋ณด๋ฉด ์ถ์ถ์ ๊ตญ์๋ ์ ๋ฆฌ๊ฐ๋ผ ํ ์์ค์ด๋ค. ๊ทธ๋ฌ๋ ๋์๋ค์ด ์ฃ๋ค ํน์ ๋ถ์ผ์๋ง ์น์คํด์ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ๊ดํตํ ์ฑ ์ ๋ณ๋ก ์๋๊ฒ ๋ฌธ์ ์ด๋ค. Ruby๊ฐ์ ๊ฒฝ์ฐ๋ ๊ธฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ Programming Ruby ๋ฑ ํ๊ถ๋ง ๋ฌ์๋๋ ์ฌ๊ณ ๊ฐ ์์ ์ ๋๋ก ์ธ๊ธฐ์ธ ๊ฒ๊ณผ ์ ๋ฐ๋. Python์ ์ฑ ์ด ์๋ ๋ง๋ค๋ณด๋ ์์ ์๋ ์ฌ๊ณ ๊ฐ ์๋๋ฃฉํ๋ค.
๋ฐ๋ก ์ฐ๋ ํ์ด์ฌ(๊ธฐ์ดํธ) | |
์์ธ๋ํ๊ต์ ์ผ๋ถ ๊ฐ์ข์์ ์ด๋ฒํ๊ธฐ ํ๋ถ ์์
์ฉ ๊ต์ฌ๋ก ์ฌ์ฉํ๊ธฐ ์์ํ์๋ค.
Do It! ์ ํ ํฌ ํ์ด์ฌ | |
๋ํ๋ฏผ๊ตญ์์ ์
๋ฌธ ์์ ์ผ๋ก๋ ์ํค๋
์ค์ ์ฐ์ฌ๋ ๊ฐ์๋ฅผ ํธ์งํ Do It! ์ ํ ํฌ ํ์ด์ฌ์ด๋ผ๋ ์์ ์ด ์ธ๊ธฐ๊ฐ ๋ง๋ค. ์ปดํจํฐ ๊ณผํ ๋ถ๋ฌธ ๋ฒ ์คํธ์
๋ฌ ์์ค. ๊ธฐ์ด์ ์ธ ๋ด์ฉ์ ๋ค๋ฃจ๋ฉฐ ๋์ ๋
์๋ ๋น์ ๋ฌธ๊ฐ๋ผ ๋งค์ฐ ๊น์ด ์๋ ์ฑ
์ด๋ผ ๋ณด๊ธฐ๋ ์ด๋ ต๊ณ ์ด๋๊น์ง๋ ์
๋ฌธ ์์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ๊ตญ์์๋ง ์ธ๊ธฐ๊ฐ ์๊ณ , ์ ํ ํฌ ํ์ด์ฌ ์ ๋์ ์
๋ฌธ์๋ ๋๋ฌด๋๋ ๋ง๋ค. ์์ ์ ๊ฐ๋ฉด ๋งค๋์ ๊น๋ฆฐ๊ฒ ์ ํ ํฌ ํ์ด์ฌ ์ ๋์ ์
๋ฌธ์๋ค. ๊ทธ๋ฌ๋ ํด๋น ์ฑ
์ ํ๊ตญ ๊ตญ๋ด์ ์ปค๋ฎค๋ํฐ๊ฐ ํ์ฑ(๋ค์ด๋ฒ ์นดํ)๋์ด ์์ด์ ์ง๋ฌธ/๋ต๋ณ์ด ๋นจ๋ผ ๋ฒ ์คํธ์
๋ฌ์ ์ฌ๋๋ค.
ํ์ด์ฌ ์ฝ๊ฒ, ๋ ์ฝ๊ฒ | |
2014๋
ํ | 2017๋
๊ฐ์ ํ |
๋๋ค๋ฅธ ์
๋ฌธ์๋ก๋ ์ผ๋ณธ์์ ์ธ ์ง ์ ๊ณ ๊ฐ ์จ์ ๋์จ ํ์ด์ฌ ๋ ์ฝ๊ฒ, ๋ ๊น๊ฒ(์ํ) ํ์ด์ฌ ์ฝ๊ฒ, ๋ ์ฝ๊ฒ(2017๋
๊ฐ์ ํ)๊ฐ ์๋ค. 2014๋
ํ์ Python 2 ๊ธฐ์ค์ด๊ณ 2017๋
ํ์ Python 3 ๊ธฐ์ค์ด๋ค.
Python ์ ๋ฌธ์ ๋ฒ์ด๋๊ณ ๋๋ฉด, ๊ธฐ๊ณํ์ต ๋ถ์ผ๋ก ๊ฐ ๊ฒ์ด๋, ๋น ๋ฐ์ดํฐ ๋ถ์ผ๋ก ๊ฐ ๊ฒ์ด๋์ ๋ฐ๋ผ์ ์ถ์ฒ ๋์๊ฐ ๋ฌ๋ผ์ง๋ค. ์ํ์ฝ๋ฉ์์๋ ์ด๊ฑฐ ๋๋ฌธ์ ๊ด๋ จ ๋ฌธ์๊ฐ ํ์ด์ค๋ถ ํ์ด์ง์ ์ฌ๋ผ์ค๋ ํธ์ด๋ค.
๋น ๋ฐ์ดํฐ ๋ถ์ผ(๋ฐ์ดํฐ ๋ถ์ ๋ถ์ผ)๋ก ๊ฐ๋ ๋ฐ์๋ ์ฑ ์ด ๋ง์๋ฐ ํ์ ๊ต์ฌ๋ก๋ ํ์ด์ฌ ๋ฐ์ดํฐ ๋ถ์ ์ ๋ฌธ: ์์ ๋ฐ CSV ํ์ผ ์ฒ๋ฆฌ๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์๊ฐํ, ํต๊ณ๋ถ์, ์๋ํ๊น์ง๋ผ๋ ์ฑ ์ ๋ง์ด ์ด๋ค. ์ด ๋ถ์ผ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ Pandas ์๋ง ์ง์คํ๊ณ ์ถ๋ค๋ฉด Pandas ํ๋ก์ ํธ๋ฅผ ์์ํ ์จ์ค ๋งฅํค๋(Wes Mckinney)๊ฐ ์ ์ ํ 'ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ๋ถ์'์ผ๋ก ์์ํด๋ ์ข๋ค.
Python ์ ๋ฌธ์ ๋ฒ์ด๋๊ณ ๋๋ฉด, ๊ธฐ๊ณํ์ต ๋ถ์ผ๋ก ๊ฐ ๊ฒ์ด๋, ๋น ๋ฐ์ดํฐ ๋ถ์ผ๋ก ๊ฐ ๊ฒ์ด๋์ ๋ฐ๋ผ์ ์ถ์ฒ ๋์๊ฐ ๋ฌ๋ผ์ง๋ค. ์ํ์ฝ๋ฉ์์๋ ์ด๊ฑฐ ๋๋ฌธ์ ๊ด๋ จ ๋ฌธ์๊ฐ ํ์ด์ค๋ถ ํ์ด์ง์ ์ฌ๋ผ์ค๋ ํธ์ด๋ค.
๋น ๋ฐ์ดํฐ ๋ถ์ผ(๋ฐ์ดํฐ ๋ถ์ ๋ถ์ผ)๋ก ๊ฐ๋ ๋ฐ์๋ ์ฑ ์ด ๋ง์๋ฐ ํ์ ๊ต์ฌ๋ก๋ ํ์ด์ฌ ๋ฐ์ดํฐ ๋ถ์ ์ ๋ฌธ: ์์ ๋ฐ CSV ํ์ผ ์ฒ๋ฆฌ๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์๊ฐํ, ํต๊ณ๋ถ์, ์๋ํ๊น์ง๋ผ๋ ์ฑ ์ ๋ง์ด ์ด๋ค. ์ด ๋ถ์ผ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ Pandas ์๋ง ์ง์คํ๊ณ ์ถ๋ค๋ฉด Pandas ํ๋ก์ ํธ๋ฅผ ์์ํ ์จ์ค ๋งฅํค๋(Wes Mckinney)๊ฐ ์ ์ ํ 'ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ๋ถ์'์ผ๋ก ์์ํด๋ ์ข๋ค.
๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ | |
Python ๊ธฐ๊ณํ์ต ๋ฅ๋ฌ๋ ๋ถ์ผ๋งํผ์ ๋ช
์ ๊ฐ ํ๋ ๋์๋ค. ์ผ๋ณธ์ ์ฌ์ดํ ๊ณ ํค๊ฐ ์ด "๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋"์ด๋ผ๋ ์ฑ
์ด๋ค. ์์ ์ผ๋ณธ์ด๋ก ๋์๋๋ฐ, ์ผ๋ณธ ๋ด์์ ์ฌ์ดํ ๊ณ ํค๊ฐ ์ง์ ๊ฐ์๋ฅผ ๋งก์ ์์ดํ์ด ๊ฐ์ด ๋์ ์ด ์์ดํ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฏธ๊ตญ์์ ์ธ๊ธฐ๋ฅผ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ 2016๋
๊ตฌ๊ธ ๋ฅ๋ง์ธ๋ ์ฑ๋ฆฐ์ง ๋งค์น๋ก ์ธ๊ณต์ง๋ฅ ๋ถ์ผ๊ฐ ํ๊ตญ ์ผ๋ฐ์ธ์๊ฒ ์๋ ค์ง๋ฉด์ ํด๋น ๋์๊ฐ 2017๋
ํ๊ตญ์ด๋ก ๋ฒ์ญ ์ถ๊ฐ๋์๋ค. ๋ฒ์ญ ์ง๋ ๊ต์ฅํ ๊น๋ํด์ ๋ณด๊ธฐ ์ข๋ค. ๊ฒฐ์ ์ ์ผ๋ก ์ฑ
์ด ๋๊ป์ง ์๊ณ ์๋ค. ์์ ์ฑ
์ธ๋ฐ ํต์ฌ๋ง ์ง์ด๋ฃ์ด์ ์ด๋ก ์ ์์ฑํด๊ฐ์ง๊ณ ๋ํต์ผ ๋ช
์ ๋ก ๊ผฝํ๋ค.
ํ๊ตญ ๊ตญ๋ด์์ ์ฃผ์ ํฌ์๋ฅผ ํ๋ ์ฌ๋ ์ค์์ ์ด๋ฅธ๋ฐ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ, ์ฝ๊ฒ๋งํด ๊ฐ์ธํ ํ๋ก๊ทธ๋จ ๋งค๋งค[38]๋ฅผ ์ง๋ ค๋ ์ฌ๋๋ ์๋ค. ์ด๋ฐ ์ฌ๋๋ค์ ํ์ด์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ์ด๋ผ๋ ์ฑ ์ด ์ธ๊ธฐ๊ฐ ์ข๋ค. ํ๊ตญ ๊ฐ๋ฏธํฌ์์๋ค์ด ์ฃผ๋ก ์ฌ์ฉํ๋ ํค์์ฆ๊ถ, ๋ฏธ๋์์ ๋์ฐ, ์ด๋ฒ ์คํธํฌ์์ฆ๊ถ, ๋์ ์ฆ๊ถ API๋ฅผ ํ์ฉํด, ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ์ง์ ํ๋ก๊ทธ๋จ ๋งค๋งค๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ Python ์๋๊ฐ ๋๋ ค์ ์๋ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ(๊ฐ์ธ ํ๋ก๊ทธ๋จ ๋งค๋งค)๋ Python๋ณด๋ค ์๋๊ฐ ๋น ๋ฅธ R์ด๋ C์ธ์ด๋ก ํ๋๊ฒ ์์น์ด๋ค. ๋ฏธ๊ตญ ๊ธ์ต์ ๊ณ์์๋ R๋ก ํ๋ ํ๋ก๊ทธ๋จ ๋งค๋งค๋ฅผ ๊ฐ๋ฅด์น๋ค.[39] ๊ทธ๋ฐ๋ฐ ํ๊ตญ์์๋ ์ฃผ์ ํฌ์์๋ค ๋ณด๊ณ Python ์ธ์ R์ด๋ C์ธ์ด๊น์ง ๋ฐฐ์ฐ๋ผ๊ณ ํ๊ธฐ๋ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋์ง, Python ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ ์ฑ ์ด ๋์๋ค. ํด๋น ์ฑ ์ 2017๋ ๋์จ ์ดํ ์ธ๊ธฐ๋ฅผ ๋์ด์ 2019๋ ๊ฐ์ ํ์ด ๋์ฌ ์ ๋๊ฐ ๋๋ค.
ํ๊ตญ ๊ตญ๋ด์์ ์ฃผ์ ํฌ์๋ฅผ ํ๋ ์ฌ๋ ์ค์์ ์ด๋ฅธ๋ฐ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ, ์ฝ๊ฒ๋งํด ๊ฐ์ธํ ํ๋ก๊ทธ๋จ ๋งค๋งค[38]๋ฅผ ์ง๋ ค๋ ์ฌ๋๋ ์๋ค. ์ด๋ฐ ์ฌ๋๋ค์ ํ์ด์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ์ด๋ผ๋ ์ฑ ์ด ์ธ๊ธฐ๊ฐ ์ข๋ค. ํ๊ตญ ๊ฐ๋ฏธํฌ์์๋ค์ด ์ฃผ๋ก ์ฌ์ฉํ๋ ํค์์ฆ๊ถ, ๋ฏธ๋์์ ๋์ฐ, ์ด๋ฒ ์คํธํฌ์์ฆ๊ถ, ๋์ ์ฆ๊ถ API๋ฅผ ํ์ฉํด, ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ์ง์ ํ๋ก๊ทธ๋จ ๋งค๋งค๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ Python ์๋๊ฐ ๋๋ ค์ ์๋ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ(๊ฐ์ธ ํ๋ก๊ทธ๋จ ๋งค๋งค)๋ Python๋ณด๋ค ์๋๊ฐ ๋น ๋ฅธ R์ด๋ C์ธ์ด๋ก ํ๋๊ฒ ์์น์ด๋ค. ๋ฏธ๊ตญ ๊ธ์ต์ ๊ณ์์๋ R๋ก ํ๋ ํ๋ก๊ทธ๋จ ๋งค๋งค๋ฅผ ๊ฐ๋ฅด์น๋ค.[39] ๊ทธ๋ฐ๋ฐ ํ๊ตญ์์๋ ์ฃผ์ ํฌ์์๋ค ๋ณด๊ณ Python ์ธ์ R์ด๋ C์ธ์ด๊น์ง ๋ฐฐ์ฐ๋ผ๊ณ ํ๊ธฐ๋ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋์ง, Python ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ ์ฑ ์ด ๋์๋ค. ํด๋น ์ฑ ์ 2017๋ ๋์จ ์ดํ ์ธ๊ธฐ๋ฅผ ๋์ด์ 2019๋ ๊ฐ์ ํ์ด ๋์ฌ ์ ๋๊ฐ ๋๋ค.
ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ | |
Python์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ ์ฑ
๋ ๋์ ์๋ค. ๊ณผ๊ฑฐ์๋ ์๊ณ ๋ฆฌ์ฆ ๋ํ๋ ์ฝ๋ฉ ํ
์คํธ์ C++์ ์ฃผ๋ก ์ฌ์ฉํด์์ผ๋ ์ง๊ด์ ์ด๊ณ ์ฌ์ด ๋ฌธ๋ฒ์ผ๋ก ์ธํด Python์ด ์ ์ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ค. ์ด ์ฑ
์ ๊ตญ๋ด ์ฒซ ์ถ๊ฐ๋ Python ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ
์คํธ ์ฑ
์ผ๋ก ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ทธ๋ฆผ์ผ๋ก ๋์ํํด ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ค๋ช
ํ๊ณ , ์นด์นด์ค ์ฝ๋ฉ ํ
์คํธ ๊ธฐ์ถ ๋ฌธ์ ํฌํจ ์ฃผ์ ๋ณ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ
์คํธ ๋ฌธ์ ๋ฅผ ๋ค์ํ ๊ฐ๋์์ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ํ์ดํ์ฌ ์ข์ ๋ฐ์์ ์ป๊ณ ์๋ค. ๋๋ฌด์ํค ๋ํ ์ด ์ฑ
์์ ์ฌ์ฉ์ ํ๋ฝํ ์ผ๋ฌ์คํธ๋ฅผ ์ด์ฉํด ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ํจ๊ณผ์ ์ผ๋ก ์ค๋ช
ํ๊ณ ์๋ค.
10. ์ฌ๋ด[ํธ์ง]
- pyBreakout์ด๋ผ๋ ๊ฒ์์ ํ์ด์ฌ์ผ๋ก๋ง ์์ฑ๋์๋ค. ์ค๋ก์ง pygame๋ง ์ฌ์ฉํ์ผ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ด๋ฑํ์์ด๋ค.
- Python์ ๊ณต์ documentation์ ์ ๋ง ํํธ์๊ธฐ๋ก ์ ๋ช ํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋ ์ง๊ด์ฑ์ด ๋จ์ด์ง๊ณ ์์๊ฐ ๋ถ์คํ ๊ฒ์ด ๊ทธ ์ด์ ์ธ๋ฐ, ๊ผญ ํ์ํ ๋ ์ฝ์ผ๋ ค๋ฉด ํค๋งค๊ธฐ ์ญ์์ด๋ค. ์ฌ์ง์ด ์ด๋ ๊ตญ๋ด๋ ์๋ ์์ด๊ฐ ๋ชจ๊ตญ์ด์ธ ํ๋ก๊ทธ๋๋จธ๋ค์ ๊ณต๋ก ์ธ๋ฐ, Python์ ์ฐฌ์ํ๋ ํ๋ก๊ทธ๋๋จธ๋ค๋ ์ธ์ ํ๋ ๋ถ๋ถ์ด๋ค. ๋ค๋ง ์ต์ ๋ฒ์ ์ผ๋ก ๊ฐ์๋ก ๊ฐ๋ ์ฑ์ด ์กฐ๊ธ์ฉ ๊ฐ์ ๋์ด ๊ฐ๊ณ ์๋ค.
- Google Android OS์์๋ ๊ณต์์ ์ผ๋ก Python์ ๋ฏธ์ง์ํ๋ค. ํ์ง๋ง SL4A๋ Linux Emulator๋ฅผ ์ค์น ํ Python ์คํ์ด ๊ฐ๋ฅํ๋ค.๋น๊ต๋ด์ฉ
- ๋ง์ฝ ํ์ด์ฌ์ผ๋ก ์ง ์ฝ๋๊ฐ ์ ์๋๋๋ ๊ฒ์ ๋์ด ๊ฐ๋ ์ฑ์ด ๋๊ณ ์ ์ง๋ณด์๋ ์ฌ์ด ์ฝ๋๋ผ๋ฉด ์ด๋ฅผ ํ์ด์ฌ๋ค์ด(pythonic, ํ์ด์จ๋) ์ฝ๋๋ผ๋ฉฐ ๋์ฐํ๋ค. ์ผ๋ฐ ํ๋ก๊ทธ๋๋จธ๋ผ๋ฉด ์ด๋ฌํ ํ์ด์จ๋ ์ฝ๋๋ฅผ ์งํฅํด์ผ ํ๋ค.
- ๋ต์ํํธ์์ ๊ฐ๋ฐ ์ค์ธ ๊ฒ์ ํ๋ฆฌ์ ์ฐ๋๊ธฐ์์๋ ๊ณ ๋์ธ์ด๋ผ๊ณ ํ๋ค.
- 2013๋ ์ฌ๋ฏธ์๊ฒ๋ ํ ํค๋ํํฐ๋ก๋ถํฐ ๊ฒฝ๋ ฅ์ง ํ์ด์ฌ ๊ฐ๋ฐ์ ์ทจ์ ์ ์์ ๋ฐ์๋ค๊ณ ํ๋ค. ์ฆ, ํ์ด์ฌ ์ฐฝ์์์๊ฒ ํ์ด์ฌ '๊ฒฝ๋ ฅ์ง' ๊ฐ๋ฐ์๋ฅผ ๊ตฌํ๋ ์์ค์ ๋ฉ์ผ์ ๋ณด๋ธ ๊ฒ.
- ์ฌ์ฆ 4 ์ญ์ Python์ ๊ธฐ๋ฐ์ผ๋ก ํด์ ๋์ํ๋ค. ํด๋ผ์ด์ธํธ๋ฅผ ์ด์ง ๋ณด๋ฉด ์๋ง์ .pyo ํ์ผ๋ค์ ํฅ์ฐ์ ๋ณผ ์ ์๋ค. ์ฌ์ฆ 4์ ์ต์ ํ๋ ๋๋ฆ ์ฐ์ํ ํธ. ๊ทผ๋ฐ pyo๊ฐ 3.5 ๋ฒ์ ์์ ์ญ์ ๋๊ณ pyc๋ก ๋์ฒด๋์๋ค.
- ํน๋ค ์ธ๋ ํ์ด์ด์ ์์ง์๋ ์ฐ์๋ค. 500์ฌ ๊ฐ์ ์์ฒด๋ชจ๋์ด ๋๋๊ธฐ์ฒ๋ผ ๋์๊ฐ๋ค๊ณ ํ๋ค.
- ์๋ ์ค๋ธ ํฑํฌ๋ ์๋น ๋ถ๋ถ์ด ํ์ด์ฌ์ผ๋ก ๊ตฌํ๋์ด์๋ค. ์ ์ ๊ฐ ์์ฑํ๋ ๋ชจ๋๋ ๋ก์ง ๋ถ๋ถ์ ํ์ด์ฌ์ผ๋ก ๊ตฌํ๋๋ค.
- EVE ์จ๋ผ์ธ์ Python์ ๊ฒฝ๋/๊ณ ์ ์คํ ๋ฒ์ ์ธ Stackless Python์ผ๋ก ์์ฑ๋์๋ค. ๊ฐ๋ฐ์ฌ CCP Games๋ ํ์ด์ฌ ์ฌ๋จ์ ์ ์ ํ์์์ด๊ธฐ๋ ํ๋ค. 2000๋ ๋ ์ด์ ์ฑ๊ธ์ฝ์ด CPU๊ฐ ๊ณ์ ์ฐ์ผ ์ค ์๊ณ ์๋ฒ ์ฝ๋๋ฅผ ๊ตฌ๋ฒ์ ํ์ด์ฌ์ผ๋ก ์งฐ๋ค๊ฐ ๋ค์ค ์ฝ์ด ์ฌ์ฉ์ด ํ๋ค์ด์ง์[40] ๋๋ฌผ๊ฒจ์ด ๋ง๊ฐ์กฐ๋ฅผ ๊ฑฐ๋ญํ์ฌ ํ์ด์ฌ์ด๋ผ๋ ์ธ์ด๊ฐ ์ ๊ณตํ ์ ์๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํ๊ณ์น๊น์ง ๋ฝ์์ ์ฐ๊ณ ์๋ค.
- ํ์ด์ฌํจ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด ๊ฐ์. ์นด์ด์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด ๊ณผ๋ชฉ๊ณผ ํธํ๋๋ ๊ณต๊ฐ ๊ฐ์์ด๋ค. ์ธํฐํ๋ฆฌํฐ ์ค์น ์์ด ๊ธฐ์ด์ ์ธ ํ์ด์ฌ ์ฌ์ฉ๋ฒ์ ๋ฐฐ์ธ ์ ์๋ค.
- ์ฝ๋์ปด๋ฑ ํํ์ด์ง. ํ์ด์ฌ์ ๊ฒ์์ ํ์์ ๋น๋ ค ๋ฐฐ์ธ ์ ์๋ ์ฌ์ดํธ์ด๋ค.
- 2014๋ 6์ WWDC์์ ์ ํ์ด ๊ณต๊ฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด Swift๋ณด๋ค 220๋ฐฐ ๋๋ฆฌ๋ค๊ณ ๊น์๋ค. ์ ์ ๋ค์ C ๋ฐ์ธ๋ฉ์ธ ctypes๋ฅผ ์ถ๋ ์ํจ๋ค๊ณ ๋ถ๋ค๋ถ๋ค... ํ์ง๋ง JIT ์๋ ๋์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ์ปดํ์ผ ์ธ์ด์ ์ฑ๋ฅ์ ๋น๊ตํ๋ฉด ์ด๋ค ์ธ์ด๋ฅผ ๋น๊ตํ๋๋ผ๋ ๋น์ฐํ ํ์๊ฐ ์๋์ ์ผ๋ก ์ ๋ฆฌํ๋ค๋ ์ ์์ ์ด๊ฑด ๋น๊ต ์์ฒด๊ฐ ์๋ชป๋ ๊ฒ์ด๋ค. ๊ฒ๋ค๊ฐ ์ํธํ ๊ฐ์ CPU heavyํ ์์ ์ ๋ณดํต ๋ค C๋ก ์ง์ ๋ถ์ธ๋ค. Python ํด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ hashlib๋ง ํด๋ ์ฝ์ด๊ฐ ์ ๋ถ C๋ก ๋์ด์๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ ๋ ์ถ์ฒํ ๋งํ ์ธ์ด์ด๋ค. ๋ง์ ๋ํ๋ค์ด C++ ํ๊ฒฝ์์ OOP๋ฅผ ๊ฐ๋ฅด์น์ง๋ง, ์ด ๊ฒฝ์ฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฐ๋ ์ค์ต์ด ๋ง์๋ฐ ๋๋ถ๋ถ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๋ค ์ด๋ค๋ ๊ฐ๋ ์ ์ดํดํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. STL์ ์ฐ๋ฉด ๋ฌ๋ผ์ง์ง๋ง ์ค์ต์์ STL์ ์๊ตฌํ๋ ๋ฌธ์ ๊ฐ ๋์ค๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๊ณ , ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฌธ์์ด ๋ณํ, ๋ฐฐ์ด ๊ด๋ จ ์ฐ์ฐ ๋ฑ์ ํ์ด์ฌ์์ ๋ฐ๋ก ์ํฌํธํ ํ์ ์์ด ์๋ฃํ ์์ฒด๊ฐ ์ด๋ฏธ ํด๋์ค๋ก์ ํธ๋ฆฌํ๊ฒ ํด๋์ค ํจ์๋ฅผ ๋์ ธ์ฃผ๊ธฐ ๋๋ฌธ์, ํด๋์ค์ ์ฌํ์ฉ์ด๋ผ๋ ์ธก๋ฉด์ ํจ์ฌ ์ดํดํ๊ธฐ ์ฝ๋ค. ๋ฌด์๋ณด๋ค ํ๋ฃจ๋ฉด ๋ค ๋ฐฐ์ธ ์ ์๋ ์ธ์ด์ด๊ธฐ๋ ํ๊ณ . ๋ค๋ง ๋ํ๋ค๋ ์๋ฌด๋ฐ ์ด์ ์์ด C++์ ๊ฐ์ฒด ์งํฅ ์ ๋ฌธ์ฉ์ผ๋ก ์ฑํํ ๊ฑด ์๋๋ค. ๋ง์ ํ์๋ค์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค C๋ฅผ ๊ฐ์ฅ ๋จผ์ ๋ฐฐ์ฐ๊ธฐ์, C++์ ๊ทธ๋๋ง ์ต์ํ ๊ฐ๋ ๋ค์ ์ด์ฉํด์ ๊ฐ์ฒด ์งํฅ์ ํ์ตํ ์ ์๊ฒ ํ๋ค. ๋ฌผ๋ก C++ ํ๋ก๊ทธ๋๋ฐ์ C ํ๋ก๊ทธ๋๋ฐ๊ณผ๋ ํจ๋ฌ๋ค์ ์์ฒด๊ฐ ๋ค๋ฅด๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํ์ง๋ง, ์ ์ด๋ "C์ธ์ด์ ๊ตฌ์กฐ์ฒด ์์ ํจ์๋ฅผ ์ ์ํ ์ ์๊ฒ ํ๋ฉด C++์ด๋ค"๋ ์์ ๋์๋ก ํ์๋ค์๊ฒ ์ฌ๋ฆฌ์ ํธ์ํจ์ ์ค ์๋ ์๋ค. ์ต๊ทผ์๋ ๊ฐ์ฒด ์งํฅ ์ ๋ฌธ์ฉ ์ธ์ด๋ก C++๋ณด๋ค ํ์ด์ฌ์ ๋จผ์ ๊ฐ๋ฅด์น๋ ๋ํ๋ ๋์ด๋๊ณ ์๋ ์ถ์ธ๋ผ, ํ์ด์ฌ๋ถํฐ ๋จผ์ ๊ณต๋ถํ๋ ๊ฒ๋ ๋์์ง ์๋ค.
- Fluent Python(๋ฒ์ญ์: ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ํ์ด์ฌ)์ด๋ผ๋ ์ฑ ์ด ์๋ค.
- ์๊ณ ๋ฆฌ์ฆ ๋ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ด์ฌ์ผ๋ก ๊ณต๋ถํ๊ธฐ
- 2014๋ 8์ 30์ผ, ์ ์๊น์ ํ์ด์ฌํ์ฌ์ธ PyCon์ด ๋๋์ด ํ๊ตญ์์๋ ์ฑ๊ณต๋ฆฌ์ ๊ฐ์ต๋์๋ค. #๊ณต์ํํ์ด์ง
2015๋ 8์ 29์ผ, PyCon 2015๊ฐ ์์ ๋๋ฆฌ๊ฟ์คํ์ด์์ ์ฝ 700๋ช ์ ๊ท๋ชจ๋ก ๊ฐ์ต๋์๋ค. #๊ณต์ํํ์ด์ง
2016๋ ์๋ PyCon APAC๊ฐ ํ๊ตญ์์[41] ์ฑ๊ณต๋ฆฌ์ ๊ฐ์ต๋์๋ค.#๊ณต์ํํ์ด์ง
2017๋ ์๋ PyCon.KR 2017(ํ์ด์ฝ ํ๊ตญ 2017)์ด ๊ฐ๋จ ์ฝ์์ค์์ ์ด๋ ธ๋ค(8.12~15).
2018๋ ์๋ PyCon.KR์ ์ฐธ๊ฐํ IntelliJ IDEA๋ก ์ ๋ช ํ JetBrains์ PyCharm ํ๋ก์ ํธ ๋งค๋์ ์ธ Dmitry Trofimov๊ฐ ํ์ฌ๋ฅผ ๋ณด๊ณ PyCharm ํ๊ธํ ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์ด์๋ค. ๊ทธ๋ฌ๋ ๋ฒ์ญ์ด 20% ์ ๋ ๋๊ณ ์ ๋ ์งธ ๋ฉ์ถฐ ์๋ ์ํ...๊ด์ฌ์๋ ์ฌ๋๋ค์ ๊ธฐ์ฌํด ๋ณด์. ๋ค๋ง ๊ฐ๋ฐ์๋ค์ ํธํ์ฑ์ ์ํด์ ์์ด ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ผ ๊ธฐ์ฌ๋ฅผ ํ ์ฌ๋์ด ์์์ง๋ ์๋ฌธ์ด๋ค.
- 2015๋ 7์ 9์ผ "๊ฐ์ด ๋ฒ์ญํด์ ๊ฐ์ด ๋ด ์๋ค"๋ผ๋ ํ์ด๋ฅผ ๋ด๊ฑธ๊ณ ํ์ด์ฌ ๋ฌธ์๋ฅผ ํ๊ธ๋ก ๋ฒ์ญํ๋ ํ๋ก์ ํธ๊ฐ ์๊ฒผ๋ค. flowdas / ํ์ด์ฌ ํ๊ตญ์ด ๋ฒ์ญ
- ๋๋๋ ๊ธ๋ก๋ฒ๊ฐ ์์ ์ ๋ ธ๋ ๊ฐ์ฌ์ Python์ ๋ฐฐ์ฐ๋ผ๋ ๊ฐ์ฌ๋ฅผ ๋ฃ๊ธฐ๋ ํ๋ค.
- ํ์ค๋ฐ์ค์์ ๋ค์ด๋ก๋ ๋ฏธ๋ฌ๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
- ๊ท๋ ๋ฐ ๋ก์ฌ์ 2019๋ 10์ 30์ผ๋ถ๋ก ๋๋๋ฐ์ค์์ ๋์ค๊ณ ์ํดํ์๋ค.
- ๊ทธ๋ฆฌ๊ณ 2020๋ 11์ 13์ผ, ์ํด ์ํ์ด ์ง๋ฃจํ๋ค๋ฉฐ ๋ค์ ๋ง์ดํฌ๋ก์ํํธ ์ ๊ฐ๋ฐํ์ ํฉ๋ฅํ๋ค. [42]
- ๋์์ธ์ฌ์ด๋ ๋ง์ด๋ ๊ฐค๋ฌ๋ฆฌ ์ค ํ์ด์ฌ ๋ง์ด๋ ๊ฐค๋ฌ๋ฆฌ๊ฐ ์์์ผ๋ ์ ๊ทผ ์ ํ ์กฐ์น๋์ด ์์นด๋ผ์ด๋ธ ํ์ด์ฌ ์ฑ๋๋ก ์ด์ฃผํ์๋ค.
- 3.5๋ถํฐ๋ XP๋ฅผ ์ง์ํ์ง ์๋๋ค.
- ํฌ์ด๋ผ์ด๋ธ ์ ๋ฐฑ์๋ ๊ธฐ์ ์ ๋๋ถ๋ถ์ ํ์ด์ฌ์ผ๋ก ๊ตฌํ๋์ด์๋ค.
- 2020๋ 5์, 3.9๋ถํฐ๋ ๋น์คํ์ 7์ ์ง์ํ์ง ์๋๋ค.
[1] Python์ ์์ฒญ๋๊ฒ ๋น ๋ฅธ ๊ฐ๋ฐ ์๋์ ์์ฐ์ฑ์ ๋๊ณ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ์ ํ์ฒ๋ผ ํผ์ง ๋ง์ด๋ค.
[2] ์ฌ๊ธฐ์์ ์ฐ๋ ๋ฒ์ ์ 3.8.2์ด๋ค
[3] ์๋ฌธ์๋ "๋ค๋๋๋์ธ์ด ์๋ ์ด์" ์ด๋ผ๋ ๋๋ด์กฐ์ ์กฐ๊ฑด์ด ๋ถ๋๋ฐ, ์๋ง๋ ํ์ด์ฌ์ ์ฐฝ์์์ธ ๊ท๋ ๋ฐ ๋ก์ฌ์ ๋๊ณ ํ๋ ์๊ธฐ๋ก ๋ณด์ธ๋ค.
[4] ๋๋ถ๋ถ IDE๋ ์ฌ๋ ๊ดํธ 1๊ฐ๋ฅผ ์
๋ ฅํ๋ฉด, ์๋์ผ๋ก ๋ซ๋ ๊ดํธ๋ฅผ ์
๋ ฅํด์ค๋ค.
[5] Python์ ํ์ ์ธ์ด๋ผ ๋ถ๋ฆฌ๋ Ruby๋ ๋ธ๋ก์ ๋์ end ํค์๋๋ก ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๋ฌธ์ ์์๋ ์์ ๋ก์ด ํธ์ด๋ค.
[6] ํํ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ ์ด์ ๋ ๋ณด์ ๋๋ฌธ์ด๋ค.
[7] global์ด๋ nonlocal ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์์ ๊ฒฝ์ฐ
[8] return ๋์ yield๋ฅผ ์จ์ ์์ฑ๊ธฐ(generator)๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ.
[9] ๋ค๋ฅธ ์ธ์ด์ ๊ฒฝ์ฐ 64๋นํธ๋ฅผ ๋์ด๊ฐ๋ ๋งค์ฐ ํฐ ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Java์ BigInteger, JavaScript์ BigInt์ ๊ฐ์ด ๋ณ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
[10] ํฐ ์ ๊ณ์ฐํ๊ธฐ ์ํ ๋ด์ฅ ํจ์๋ค์ Python 2๋ถํฐ ์ ์ฅํด๋์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค. ์ ๊ฐ์ค๋ฝ๊ฒ๋ ํฐ ์ ํ์ฉ ๋ถ๋ถ์ Python 2์ 3๊ฐ ํธํ์ด ์ ๋๋ ์ง์ ์ค ํ๋๋ค. ๋ด์ฅํจ์ ๋ช๋ช์ด 2์ 3์์ ๊ธฐ๋ฅ์ด ๋ค๋ฅด๋ค.
[11] Python 3.5์์ ์ถ๊ฐ๋ typing ๋ชจ๋์์๋ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ ์ธ tuple์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
[12] MATLAB์ GUI ๊ธฐ๋ฐ ๋ชจ๋ธ๋ง ํด๋ฐ์ค์ธ Simulink๋ ๊ธฐ์
์ฉ์ผ๋ก ๊ตฌ๋งคํ๋ฉด ๊ธฐ๋ณธ toolbox๊ฐ 1 copy์ ์ฒ๋ง ์ ๋จ์, ๊ฐ์ข
์ ๊ธฐ, ์ ์, ๊ธฐ๊ณ, ์ ์, ํญ๊ณต ๋ฑ์ ๊ด๋ จํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ถ๊ฐ๋ก ์ ๋ฃ๋ก ํ๋งคํ๋ค. ๊ฑฐ๊ธฐ์ C๋ก ํฌํ
ํด์ฃผ๋ ๋ชจ๋๋ ์ญ์ ๊ฐ๋ณ์ ์ผ๋ก ์ถ๊ฐ ๊ตฌ๋งคํด์ผ ํ๋ค. ๋ง์ฝ ์คํ์์ค ์ํํธ์จ์ด๋ก Simulink๋ฅผ ๋์ฒดํ๊ณ ์ ํ๋ค๋ฉด ํ์ฌ๋ก์๋ FMI ๊ธฐ๋ฅ ๋ฐ C ์ฝ๋๋ก์ ์คํ ์ฝ๋ฉ ๋ชจ๋์ด ์์ด์ผ ํ ๊ฒ์ด๋ค. ๊ฒ๋ค๊ฐ ํจํค์ง ์ค์น๋ฅผ ์ฐธ ๋๋ฝ๊ฒ ์ด์ํ๊ฒ ๋ง๋ค์ด ๋จ๋ค. MATLAB๊ณผ ๊ฐ์ ๋ชฉ์ ์ Python ํจํค์ง์ธ NumPy๋ ๋ชจ์ข
์ ๊ณ์ฝ์ ํตํด ๋ฌธ๋ฒ๊ณผ ํจ์ ๋ฑ์ ๋ง์ ๋ถ๋ถ์์ MATLAB ํจ์์ ํธํ๋๊ฒ ์์ ํด ๋ฒ๋ ธ๊ณ , ์ ๊ทธ๋๋ ๊ฝค ์ฐ์๋ NumPy๋ ๋์ฑ ์ฌ์ฉ์๊ฐ ๋์ด๋๊ณ ์๋ค. Python์ ๊ฒฝ์ฐ๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ถ๋ถ์ด ์คํ์์ค์ด๊ธฐ ๋๋ฌธ์ ์ ์ฅ์์์ ๊ทธ๋ฅ ์ปค๋งจ๋ ๋ผ์ธ(pip install ํจํค์ง) ํ ์ค๋ก ํ์ํ ๊ฑฐ์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํด์ ์ธ ์ ์๋ค.
[13] ์๋ ์ธ์ด ์ชฝ์์ Multilingual๊ณผ ๊ฐ์ ๋ป์ผ๋ก ์ฐ์ด๋, ์ปดํจํฐ, IT ์
๊ณ์์๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ฅ์ํ๊ฒ ๊ตฌ์ฌํ์ฌ ์ ์ฌ์ ์์ ์ ์กฐํฉํ์ฌ ์ธ ์ ์๋ ๋ฅ๋ ฅ์ ๋ปํ๋ค.
[14] ๋ชจ๋ ํจ์๊ฐ ์ผ๋จ ํด๋์ค ์์ ์์ด์ผ ํ๋ฉฐ, ์ ์ญ ํจ์๋ static ํจ์๋ฅผ ์ฌ์ฉํ๋ ํํ๋ก ์ง์ผ ํ๋ค.
[15] Beazley์ ํํ์ด์ง์์ ๋ ๋ง์ ์๊ฐ ์๋ฃ์ ์์์ ์ ๊ณตํ๊ณ ์๋ค.
[16] ์ฌ์ค GIL ๋ฐฉ์์ผ๋ก ๋ง๋ค ๋น์ ์ฑ๊ธ์ฝ์ด๊ฐ ์ผ๋ฐ์ ์ด์๋ค๋ ๊ฑธ ์๊ฐํด๋ณด๋ฉด ์ฑ๊ธ์ฝ์ด์์์ ๋ฉํฐ์ฐ๋ ๋ฉ ๋ชฉ์ ์์ฒด๊ฐ ๋ฉํฐ์ฝ์ด ์ฑ๋ฅ ํฅ์๋ณด๋ค๋ ์ด๋ฐ ๋ค์ค ์ด๋ฒคํธ ๋ฃจํ ๊ตฌํ์ ํ๊ธฐ ์ํ ๊ฒ์ด๋ผ๊ณ ๋ด์ผ ํ๋ฉฐ, ๊ทธ๋ฐ ๊ด์ ์์๋ GIL์ด ํฉ๋ฆฌ์ ์ธ ์ ํ์ด์๋ค๊ณ ํ ์ ์๋ค.
[17] ๋จ, ์ฝ๋ฃจํด์ด๋ผ๋ ๊ฐ๋
์์ฒด๊ฐ ์ด๋ฐ ์ต๊ทผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฒ์์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ ์๋๋ค. ์ฝ๋ฃจํด์ ๊ฐ๋
์ 1950๋
๋์ ์ด๋ฏธ ๋์๋ค.
[19] ๋ฐ๋๋ก B๋ถํฐ ์ค์นํ ๋ค์ A๋ฅผ ์ค์นํ๋ฉด B๊ฐ ์ธ ์ ์๊ฒ ๋๋ค.
[20] ๋ณต์กํ ์ค์น ์คํฌ๋ฆฝํธ๊ฐ ํ์ํ ์ด์ ๋ ์ฌ๋ฌ OS ๊ฐ์ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํจ๋ ์์ง๋ง, C์ C++ ์ฝ๋๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํจ์ด๋ค. ์ด๋ฌํ ์ธ์ด๋ ํด๋น OS์ ๋ง๊ฒ ์ปดํ์ผํด์ผ ํ๋๋ฐ, ์๋ง์ OS์ ๋ง์ถฐ ์ปดํ์ผํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์๋ค.
[21] ๊ฐ๋ น ๋ด๊ฐ ๋ง๋ ํจํค์ง A๊ฐ B์ ์์กดํ๊ณ , B๋ C์ ์์กดํ ๊ฒฝ์ฐ, ์์ ์๋ ์ฌ์ฉ์๊ฐ A, B, C๋ฅผ ์ผ์ผ์ด ์ค์นํด์ผ ํ๋ค.
[22] setuptools๋ ์ค์น์ ํ์ํ ๋ค๋ฅธ ๊ธฐ๋ฅ. ๋ํ C/C++ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ์์คํ
์ C/C++ ์ปดํ์ผ๋ฌ๋ ์ค์น๋์ด ์์ด์ผ ํ๋ค.
[23] npm์ด ์ฌ์ฉํ๋
package.json๊ณผ ์ ์ฌํ์ง๋ง, TOML์ด๋ผ๋ ํ์ผ ํ์์ ์ฌ์ฉํ๋ค.[24] C ์๊ฐ์ ์คํ ์์ญ ํ ์์ญ ํ ๋ ๋์ค๋ ๊ทธ ์คํ์ด๋ค.
[25] C ๋ ๋ฒจ์์ ๋ง๋ค์ด์ฃผ๋ ์คํ์ด๋ผ "C๋ก ์ง์ฌ์ง ํ๋ก๊ทธ๋จ"์ธ CPython์ ์์ ๋ ์๊ฐ ์๋ค. ์์น์ ์ผ๋ก๋ ๋ง์ด์ง
[27] ๋ฉ๋ชจ๋ฆฌ์ ์ฉ๋์ด ์ ํํ ์ด์ ์คํ ์ค๋ฒํ๋ก์ฐ ์๋ฌ๊ฐ ์ ๋ ์๋ ์๋ค.
[28] OS๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ์ฐ๋ ๋๊ฐ ์๋, ์ ์ ํ๋ก์ธ์ค ์ฐจ์์์ ์ง์ ๋๋ฆฌ๋ ์ฐ๋ ๋. ๊ทธ๋ฆฐ ์ฐ๋ ๋(green thread)๋ผ๊ณ ๋ ํ๋๋ฐ Ruby 1.8๊น์ง ์ง์ํ๋ ์ฐ๋ ๋๊ฐ ๋ฐ๋ก ์ด๊ฒ์ด๋ค.
[29] PyCharm ํ๋กํ์
๋์ ๋ํ์ํํ
๋ ๋ฌด๋ฃ์ด๋ค
[30] ํฐ๋ฏธ๋ ๊ธฐ๋ฐ์ ๋
ธํธ๋ถ ํ๊ฒฝ ์ธํฐํ๋ฆฌํฐ. ๊ธฐ์กด์ ์ธํฐํ๋ฆฌํฐ์ ๊ตฌ๋ถ๋๋ UI๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ฃผํผํฐ ๋
ธํธ๋ถ์ ipython์ด ์น๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ ๊ฒ
[31] ์ ์ ์๋ ์ด์ ๋ก ์คํ๋ฒํผ์ ๋๋ฌ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ ํ ์คํ๋์ง ์๊ณ ๋ณํ๋ง ๋์ฐ๋ ์ผ์ด ์ข
์ข
์๋ค. ์ด๊ฒ ๊ฑธ๋ ค๋ฒ๋ฆฌ๋ฉด ๊ธฐ์กด์ ์ ์์ ์ผ๋ก ์คํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์คํ์ํค๋ฉด ๋ณํ๋ง ๋์จ๋ค. ๋ณดํต ์
๋ฌธ์๋ค์ด ์ฝ๋๋ฅผ ์ด์ํ๊ฒ ์ง๋ฉด ์ ๋ฆฌ ๋๋๋ฐ, ์ ๊ธฐํ ๊ฑด ์๋ฌ๋ ์ ๋ฟ๊ณ ๋ณํ๋ง ๋์ฐ๊ณ ๋ป์ด๋ฒ๋ฆฐ๋ค๋ ๊ฑฐ๋ค. ์ปค๋์ ๋ฆฌ์
ํ๋ฉด ํด๊ฒฐ๋๊ธด ํ๋๋ฐ ๋จธ์ง์์ ๋ ๋ป๊ธฐ๋ ํ๋ค. ๋ฐ์ ์๋ ๊ตฌ๊ธ ์ฝ๋ผ๋ณด๋ ์ด๊ฒ ์ข ๋ํ ํธ.
[32] ์ฃผํผํฐ ๋
ธํธ๋ถ์ ์์ํธํ ๋ฒ์ . ์ธํฐํ์ด์ค ๋ถ๋ถ์ด ๋
ธํธ๋ถ์ ๋นํด ๊ฐ์ ๋์ด ๋ ๊น๋ํด์ก๋ค. ํ
๋ง๋ ํฐ๋ฏธ๋ ์ค์ ๋ ๊ฐ๋ฅํด ๋์ด ํธํ๋ค. ์ด์ ์ ๋
ธํธ๋ถ์ ๋ ์ ํธํ๋ ์ฌ๋๋ ์๋ ํธ.
[33] ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ์ฃผํผํฐ ๋
ธํธ๋ถ ํ๊ฒฝ์ผ๋ก. ๋ณ๋์ ์ค์น๊ฐ ์ ํ ํ์์๋ค. ์ฌ์ง์ด ํด๋ํฐ์์๋ ๋์๊ฐ๋ค! ๋ํ ํ๋ก์ ํธ๊ฐ ์๋ ๊ฐ๋จํ ๋ฌธ์ ํ์ด๋ ๋ฐ์ดํฐ ๋ถ์ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ค๋ง ์ฒซ ์คํ์ ๊ฒฝ์ฐ ์คํ์๋๊ฐ ๋ค์ ๋๋ฆด ์ ์๋ค. ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋ ์ํ์์ ์ฒ ์ ํ๊ฒ ์น ์์์ ๋์๊ฐ๋์ง๋ผ ๋ณธ์ธ ์ปดํจํฐ์ ์๋ ๋ชจ๋๋ ์ฆ์์์ ๋ฐ์ ์คํ์ํฌ ์ ์๋ค. ๋ง๋ค์ด์ง ๋
ธํธ ํ์ผ์ ๋ณธ์ธ์ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ์ ์ ์ฅ๋๋ค.
[34] ๋จ, Conda์๋ ๋ฑ๋ก๋์ง ์์์ Pip์ผ๋ก๋ง ์ค์นํ ์ ์๋ ํจํค์ง๋ ์ด์ฉ ์ ์์ด Pip์ ์ฌ์ฉํด์ผ ํ๋ค.
[35] ๋จ, ํ์ฉํ ๋ฟ์ด์ง ํ์ด์ฌ์ด ์ค์ค๋ก ์๋ฃํ์ ๊ฒ์ฌํ์ง๋ ์๋๋ค. Type hint๋ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ์ฝ๊ณ ๋ถ์ํ๊ธฐ ์ํ ์ฉ๋์ด๋ค.
[36] PySide2๋ฅผ Qt for Python์์ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ณ ์๋ค.
[37] ํ๋์จ์ด์ธ ์๋ฒ ์ปดํจํฐ๊ฐ ์๋๋ผ, ๊ทธ ์์์ ๋์๊ฐ๋ ์ํํธ์จ์ด๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค. ์น ์๋ฒ๋ ๋คํธ์ํฌ ์์ฒญ์ ๋ฐ์ ์น ์ดํ๋ฆฌ์ผ์ด์
์ด ์ฒ๋ฆฌํ ์ ์๋ ํํ๋ก ๋ง๋ค์ด ๋๊ฒจ์ฃผ๋ฉฐ, ์์ผ์ด๋ ํ๋ก์ธ์ค ํ๊ณผ ๊ฐ์ ์์์ ๊ด๋ฆฌํ๋ค.
[38] ํ๋ก๊ทธ๋จ ๋งค๋งค๋ ๋์์ 5์ต ์ ์ด์์ ๋งค๋งค๋ฅผ ๋ด๋ ๊ฑฐ๋๋ก, ์๋๋ ํ๊ตญ์ํ๊ฒฐ์ ์์ ์น์ธ์ ๋ฐ์ ๊ธฐ๊ด ํฌ์์๋ ์ธ๊ตญ์ธ ํฌ์์๋ง ์ฌ์ ์ ์ํ๊ฒฐ์ ์์ ํ๋ก๊ทธ๋จ์ ๋ฑ๋กํ๊ณ ๋งค๋งคํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋์์ 5์ต์ ๋ฏธ๋ง์ ๊ฑฐ๋๋ฅผ ํ๋ ๊ฐ์ธํฌ์์๋ค๊น์ง ์ํ๊ฒฐ์ ์์ด ๊ฐ์ญํ๊ธฐ๋ ๋ญํ๋์ง ์ด์ชฝ์ ๊ท์ ์ฌ๊ฐ์ง๋๋ค.
[39] ์ผ๋ณธ์ Ruby๊ฐ ๋์ธ๋ผ์, Ruby๋ก ํ๋ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ์ด ๋ง๋ค. Ruby๋ก ๋ง๋ ํธ๋ ์ด๋ฉ ํด์ Python๊ณผ ๋น์ทํ ํผํฌ๋จผ์ค๊ฐ ๋๋ค.
[40] ์ ์ฅ์์ ์ผ์ด๋๋ ์ผ์ ์ ์ธํ ๋๋จธ์ง ์์์ฝ์ฝํ ์ผ์ ๋ค๋ฅธ ์ฝ์ด๋ก ๋๋ฆฌ๊ธฐ๋ ํ์์ผ๋, ๊ฒ์์ ์ต์ ๋จ์์ธ ์ ์ฅ์ ๊ตฌ์กฐ์์ ํ๊ณ๋ก ํ๋์ ์ฝ์ด๋ง ๋์ํ ์ ์๋ค.
[41] ๊ฐ๋จ ์ฝ์์ค์์ 13~14์ผ ์์นด๋ง์ด์์ 15์ผ(ํํ ๋ฆฌ์ผ).