์์ ํฌ์คํ
ํ Python Part 1, Part 2์ ์์ฝ๋ณธ์
๋๋ค.
๐ Part 1. Python์ ํต์ฌ ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
1. ๋ค์ด๊ฐ๊ธฐ์ ์์ (AI ์๋, ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์์ผ ํ๋๊ฐ?)
๐ค ๋ณํํ๋ ๊ฐ๋ฐ ํ๊ฒฝ
- AI Coding Agent์ ๋ฐ์ : Claude, Cursor, Copilot ๋ฑ AI์ ์ฝ๋ ์์ฑ ๋ฅ๋ ฅ์ ์ด๋ฏธ ์๋์ด ์์ง๋์ด ์์ค์ ๋๋ฌํ๊ณ ์์.
- ์ญํ ์ ๋ณํ:
- ์ฌ๋ (Architect): ์ผ์ ์ง์ํ๊ณ , ์ค๊ณ๋ฅผ ๋ด๋นํ๋ฉฐ, ๊ฒฐ๊ณผ๋ฌผ์ ํ๊ฐํ๋ ์ฑ
์์.
- AI (Developer/Supporter): ์ง์๋ฐ์ ๋ด์ฉ์ ์ํํ๋ ๊ฐ๋ฐ์.
๐ ๋ฌด์์ ์ด๋ป๊ฒ ํ์ตํด์ผ ํ๋๊ฐ?
๋จ์ ๋ฌธ๋ฒ ์๊ธฐ๋ณด๋ค๋ ์ ๋ต์ ์ฌ๊ณ ์ ์ ์ฒด ๊ตฌ์กฐ ์ดํด๊ฐ ์ค์ํด์ง.
- ํ๊ฐ ๋ฐ ์ง์ ๋ฅ๋ ฅ: AI๊ฐ ์์ฑํ ์ฝ๋์ ๋ฐฉํฅ์ฑ์ด ๋ง๋์ง, ์ ์ฌ์ ๋ฌธ์ ๋ ์๋์ง ํ๊ฐ(Audit)ํ ์ ์๋ ์ง์์ด ํ์.
- ์์คํ
๋์์ธ & ์ํคํ
์ฒ: ์ฝ๋ ๋ผ์ธ ๋จ์๊ฐ ์๋, ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ, ์ด์, ๋ณด์, ๋ฐ์ดํฐ ๊ตฌ์กฐ์ Trade-off๋ฅผ ์ดํดํ๋ ๊ฑฐ์์ ๊ด์ ํ์.
- Communication: ๋ชจํธํ ์๊ตฌ์ฌํญ์ ๋ช
ํํ ์ ์ํ๊ณ ํ์
ํ๋ ๋ฅ๋ ฅ์ AI๊ฐ ๋์ฒดํ๊ธฐ ์ด๋ ค์ด ์์ญ.
- ํ ์ธ์ด์ ๊น์ด ์๋ ์ดํด: ํ๋์ ์ธ์ด๋ฅผ ๊น๊ฒ ์ดํดํ๋ฉด ๋ค๋ฅธ ์ธ์ด๋ ๊ธฐ์ ๋ ์ฝ๊ฒ ์ต๋ ๊ฐ๋ฅ.
2. Python์ ํน์ง
โ
์ฅ์
- ์ง๊ด์ ์ธ ๋ฌธ๋ฒ: ์ธ๊ฐ ์นํ์ ์ด๋ฉฐ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ฌ์.
- ํ๋ถํ ์ํ๊ณ: AI/๋ฐ์ดํฐ ๋ถ์ ๋ถ์ผ์ ์๋์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ํจํค์ง) ์ง์.
- Interpreter ์ธ์ด (REPL ํ๊ฒฝ):
- ์ฝ๋ ์คํ ์ ์ปดํ์ผ ๊ณผ์ ์์ด ์ฆ์ ์คํ ๋ฐ ๊ฒฐ๊ณผ ํ์ธ ๊ฐ๋ฅ.
- ์์ด๋์ด๋ฅผ ๋น ๋ฅด๊ฒ ํ
์คํธํ๊ณ ์ค์๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์์ด ์์ฐ์ฑ(Productivity)์ด ๋งค์ฐ ๋์.
โ ๏ธ ๋จ์
- ๋๋ฆฐ ์คํ ์๋: ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ํ๊ณ.
- ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด(Object)๋ก ๊ด๋ฆฌ๋จ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋.
- GIL (Global Interpreter Lock): ๋ฉํฐ ์ค๋ ๋ฉ ํจ์จ ์ ํ.
- Runtime Error: ์คํ ์ ์๋ ํ์
์๋ฌ ๋ฑ์ ์ก๊ธฐ ์ด๋ ค์.
3. Python Memory Allocation (๋ฉ๋ชจ๋ฆฌ ํ ๋น)
3.1 ๐ง ๋ณ์์ ๊ฐ์ฒด์ ๊ด๊ณ
- Python์์ ๋ณ์(Variable)๋ ๊ฐ์ฒด(Object)์ ๋ฌถ์ฌ ์๋ ์ด๋ฆ(Name)์ ๋ถ๊ณผํจ.
- ์ค์ ๊ฐ(Object)์ Heap ์์ญ์ ํ ๋น๋จ.
- C์ธ์ด์์ ์ฐจ์ด:
- C: ๋ณ์ ์ ์ธ ์ Stack์ ๊ฐ์ด ์ง์ ํ ๋น๋จ (๋น ๋ฆ).
- Python: ๋ณ์ ์ด๋ฆ์ Stack์, ์ค์ ๊ฐ์ฒด๋ Heap์ ์์ฑ๋๊ณ ์ด๋ฅผ ์ฐธ์กฐ(Reference)ํ๋ ๊ตฌ์กฐ (์ค๋ฒํค๋ ๋ฐ์).
3.2 ๐๏ธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (Memory Layout)
์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ(RAM) ์์์ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋์ ๊ตฌ์กฐ์
๋๋ค.
| ์ฃผ์ ์์น | ์์ญ ์ด๋ฆ | ์ค๋ช
๋ฐ ํ์ด์ฌ์์์ ์ญํ | ํน์ง |
|---|
High Address (๋์ ์ฃผ์) | Stack (์คํ) | ํจ์ ํธ์ถ(Call Frame)๊ณผ ๋ณ์ ์ด๋ฆ(Name) ์ ์ฅ | โข ํจ์ ํธ์ถ ์ ์์ฑ, ์ข
๋ฃ ์ ์ญ์ โข ์ฃผ์๊ฐ ์์์ ์๋๋ก(โ) ๋ด๋ ค๊ฐ๋ฉฐ ํ ๋น โข LIFO ๊ตฌ์กฐ |
| โ๏ธ | (Free Space) | ์คํ๊ณผ ํ ์ฌ์ด์ ๋น ๊ณต๊ฐ | ์คํ์ ์๋๋ก, ํ์ ์๋ก ์๋ผ๋๋ฉฐ ๊ณต๊ฐ ๊ณต์ |
| Middle | Heap (ํ) | ์ค์ ๊ฐ์ฒด(Object, Value) ์ ์ฅ | โข ํ์ด์ฌ์ ๋ชจ๋ ๊ฐ(int, list ๋ฑ) ์ ์ฅ โข ์ฃผ์๊ฐ ์๋์์ ์๋ก(โ) ์ฌ๋ผ๊ฐ๋ฉฐ ํ ๋น โข ๋์ ์์ฑ (Dynamic Allocation) |
Low Address (๋ฎ์ ์ฃผ์) | Data | ์ ์ญ ๋ณ์ ์ค์ ์ ๋ณด | โข ํ๋ก๊ทธ๋จ ์์ ์ ํ ๋น๋จ |
| Lowest | Text | ์์ค ์ฝ๋ (๊ธฐ๊ณ์ด) | โข ์ฝ๊ธฐ ์ ์ฉ (Read-Only) |
3.3 ๐ Immutable vs Mutable
- Immutable (๋ถ๋ณ):
int, float, str, tuple
- Mutable (๊ฐ๋ณ):
list, dict, set
๐ก ํด์ฆ: ํํ ๋ด ๋ฆฌ์คํธ ์์
t = ('This', 'tuple', ['is', 'immutable', '?'])
t[2][2] = '!'
4. Python List vs NumPy Array (์ฑ๋ฅ ์ฐจ์ด์ ์์ธ)
๐ข Python List์ ๊ตฌ์กฐ
- ๋ด๋ถ์ ๋ค์ํ ํ์
ํผ์ฌ ๊ฐ๋ฅ.
- ๊ฐ์ฒด์ ์ฃผ์(Pointer)๋ค์ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋จ.
- ๋จ์ : ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐ์์ ์ด์ง ์๊ณ (Non-contiguous), ํ์
์ฒดํฌ ์ค๋ฒํค๋๋ก ์ธํด ๋๋ฆผ.
๐ NumPy Array์ ๊ตฌ์กฐ
- *๋จ์ผ ๋ฐ์ดํฐ ํ์
(Fix)**๋ง ํ์ฉ.
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์ฐ์์ (Contiguous)์ผ๋ก ๋ฐฐ์น๋จ.
- ๋ถํ์ํ ์ค๋ฒํค๋ ์์ด ๊ฐ์ ์ง์ ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅ.
5. ํจ์์ ์ธ์(Default Argument)์ ๊ฐ๋ณ ๊ฐ์ฒด
โ ๏ธ ์ฃผ์: Default Argument๋ ๋ฐ๋์ Immutable์ ์ฌ์ฉํ๋ผ
๊ธฐ๋ณธ ์ธ์๊ฐ์ ํจ์ ์ ์ ์ ๋จ ํ ๋ฒ๋ง ์์ฑ๋ฉ๋๋ค.
- ์๋ชป๋ ์์:
def myf(i=list()): (๋ชจ๋ ํธ์ถ์ด ๋ฆฌ์คํธ๋ฅผ ๊ณต์ ํจ)
- ์ฌ๋ฐ๋ฅธ ์์:
def myf(i=None): (ํธ์ถ ์๋ง๋ค ์๋ก ์์ฑ)
6. ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ (Laziness vs Eagerness)
1. Generator Expression (Laziness)
sum(x*x for x in range(1_000))
- ์ฅ์ : ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ ์. ๊ฐ์ ํ๋์ฉ ์์ฑ.
2. List Comprehension (Eagerness)
sum([x*x for x in range(1_000)])
- ์ฅ์ : ์๋๊ฐ ์ฝ๊ฐ ๋น ๋ฆ.
- ๋จ์ : ๋ฆฌ์คํธ ์ ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ง์ด ์ฐจ์งํจ.
๐ List์ ํจ์จ์ ์ฌ์ฉ
pop(0)์ O(N) ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ์ง์ํด์ผ ํจ. (๋ชจ๋ ์์๋ฅผ ์์ผ๋ก ๋น๊ฒจ์ผ ํจ)
7. ๊ณ ๊ธ ๋ฌธ๋ฒ (Advanced Features)
๐พ __slots__
- ํด๋์ค ์ธ์คํด์ค์ ์์ฑ์ ๋ฏธ๋ฆฌ ์ง์ ํ์ฌ
__dict__ ์์ฑ์ ๋ง์.
- ํจ๊ณผ: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ํญ ์ ๊ฐ, ์คํ ๋ฐฉ์ง.
- "ํด๋์ค๋ฅผ ๋ง๋๋ ํด๋์ค" (๊ธฐ๋ณธ์
type).
- ํ๋ ์์ํฌ ๊ฐ๋ฐ ๋ฑ์์ ํด๋์ค ์์ฑ ๊ณผ์ ์ ์ ์ดํ ๋ ์ฌ์ฉ.
๐ Typing Hint
Protocol, ABC, TypedDict, dataclass ๋ฑ์ ํ์ฉํ์ฌ ๋ฐํ์ ์๋ฌ ๋ฐฉ์ง ๋ฐ ๋ช
ํํ ํ์
์ ์.
๐ Part 2. ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์์ง๋์ด๋ง ์์น
1. Asynchronous Programming (๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ)
๐ ๊ฐ๋
(Sync vs Async)
- Synchronous: ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆผ (Blocking).
- Asynchronous: ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์
์ํ (Non-blocking).
๐งต Threading vs Asyncio
- Threading (OS ๊ด๋ฆฌ):
- Context Switching์ด OS์ ์ํด ๋ฐ์ (๋น์ฉ ๋์).
- ๊ฐ๋ฐ์๊ฐ ์ ์ดํ๊ธฐ ์ด๋ ค์ (์ธ์ ์ค์์นญ๋ ์ง ๋ชจ๋ฆ).
- Asyncio (App ๊ด๋ฆฌ):
- Event Loop๊ฐ ๋จ์ผ ์ค๋ ๋ ๋ด์์ ์์
๊ด๋ฆฌ.
- Context Switching ๋น์ฉ์ด ์ ๋ ดํจ.
await๋ก ๋ช
์์ ์ธ ์๋ณด๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ด๊ฐ ์ฉ์ดํจ.
โ ๏ธ ์ ์ง๋ฅด๊ธฐ ์ฌ์ด ์ค์
- Blocking Call:
async ํจ์ ๋ด์์ time.sleep() ๋ฑ์ ์ฐ๋ฉด ์ ์ฒด ๋ฃจํ๊ฐ ๋ฉ์ถค.
- Fire and Forget: Task ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฉ์ธ ํจ์๋ฅผ ์ข
๋ฃํด๋ฒ๋ฆผ.
2. GIL (Global Interpreter Lock)
๐ GIL์ด๋?
- Python ์ธํฐํ๋ฆฌํฐ(CPython)๊ฐ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋๋ก ์ ํํ๋ ์ ๊ธ ์ฅ์น.
- ์กด์ฌ ์ด์ : Reference Counting์ ๋์์ฑ ๋ฌธ์ ๋ฐฉ์ง ๋ฐ ์ด๊ธฐ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธํ์ฑ.
๐ ์ํฅ
- CPU-bound ์์
: ๋ฉํฐ์ค๋ ๋๋ฅผ ์จ๋ GIL ๋๋ฌธ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ์ ๋๋ฉฐ, ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์.
- I/O-bound ์์
: ๋๊ธฐ ์๊ฐ ๋์ GIL์ด ํด์ ๋๋ฏ๋ก ๋ฉํฐ์ค๋ ๋ ํจ๊ณผ ์์.
- ๋ฏธ๋: Python 3.13+๋ถํฐ GIL ๋นํ์ฑํ(Free-threaded) ์ต์
์ด ์คํ์ ์ผ๋ก ์ถ๊ฐ๋จ.
3. GC (Garbage Collection)
๐ Reference Counting
- ๊ฐ์ฒด ์ฐธ์กฐ ํ์๊ฐ 0์ด ๋๋ฉด ์ฆ์ ํด์ .
- ํ๊ณ: ์ํ ์ฐธ์กฐ(Cyclic Reference)๋ฅผ ํด๊ฒฐ ๋ชป ํจ.
โป๏ธ Generational GC (์ธ๋๋ณ GC)
- ๊ฐ์ฒด๋ฅผ 3์ธ๋(Gen 0, 1, 2)๋ก ๋๋์ด ๊ด๋ฆฌ.
- "๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ฃฝ๋๋ค"๋ ๊ฐ์ค์ ๊ธฐ๋ฐ.
- Gen 0์ ์์ฃผ ๊ฒ์ฌํ๊ณ , ์ด์๋จ์ผ๋ฉด ๋ค์ ์ธ๋๋ก ์น๊ฒฉ.
4. ์ฝ๋ ์์น (Code Principles)
1๏ธโฃ DRY (Don't Repeat Yourself)
- ๋๊ฐ์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ์ง ๋ง๋ผ.
- ๊ธฐ์กด ์ฝ๋๋ฅผ ํ์
ํ์ง ์๊ณ ์๋ก ์ง๋ ๊ฒ์ ๊ฒฝ๊ณํ๋ผ.
2๏ธโฃ KISS (Keep It Simple, Stupid)
- ๋จ์ํ๊ฒ ์ ์งํ๋ผ.
- ๋ถํ์ํ๊ฒ ๋ณต์กํ ๋์์ธ ํจํด์ด๋ ๊ณ ๊ธ ๋ฌธ๋ฒ ๋จ์ฉ ๊ธ์ง.
3๏ธโฃ YAGNI (You Aren't Gonna Need It)
- ๋์ค์ ํ์ํ ๊ฒ ๊ฐ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ง ๋ง๋ผ.
- ํ์ฌ ํ์ํ ๊ฒ๋ง ๊ตฌํํ๊ณ , ๋๋ฃ์ ์ํตํ๋ผ.
5. ๋์์ธ ํจํด (Design Patterns)
๐ ํ์ต ์ด์
- Best Practice: ๊ฒ์ฆ๋ ํจ์จ์ ์ธ ํด๊ฒฐ์ฑ
.
- Common Language: "์ฌ๊ธฐ์ ํฉํ ๋ฆฌ ํจํด์ ์ฐ์ฃ "๋ผ๊ณ ํ์ ๋ ์ฆ์ ์ดํดํ๋ ํจ์จ์ฑ.
๐๏ธ ์ฃผ์ ํจํด (GoF)
| ๋ถ๋ฅ | ํจํด ์์ |
|---|
| ์์ฑ (Creational) | Singleton, Factory Method, Builder |
| ๊ตฌ์กฐ (Structural) | Adapter, Decorator, Proxy |
| ํ์ (Behavioral) | Observer, Strategy, Command |