๐Ÿ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ Python - ํŒŒ์ด์ฌ ์š”์•ฝ

Geondong Kimยท2026๋…„ 1์›” 8์ผ
post-thumbnail

์•ž์— ํฌ์ŠคํŒ…ํ•œ Python Part 1, Part 2์˜ ์š”์•ฝ๋ณธ์ž…๋‹ˆ๋‹ค.

๐Ÿ“š Part 1. Python์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”

1. ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ (AI ์‹œ๋Œ€, ์™œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”๊ฐ€?)

๐Ÿค– ๋ณ€ํ™”ํ•˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • AI Coding Agent์˜ ๋ฐœ์ „: Claude, Cursor, Copilot ๋“ฑ AI์˜ ์ฝ”๋“œ ์ž‘์„ฑ ๋Šฅ๋ ฅ์€ ์ด๋ฏธ ์‹œ๋‹ˆ์–ด ์—”์ง€๋‹ˆ์–ด ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๊ณ  ์žˆ์Œ.
  • ์—ญํ• ์˜ ๋ณ€ํ™”:
    • ์‚ฌ๋žŒ (Architect): ์ผ์„ ์ง€์‹œํ•˜๊ณ , ์„ค๊ณ„๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๋ฌผ์„ ํ‰๊ฐ€ํ•˜๋Š” ์ฑ…์ž„์ž.
    • AI (Developer/Supporter): ์ง€์‹œ๋ฐ›์€ ๋‚ด์šฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐœ๋ฐœ์ž.

๐Ÿ“š ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ํ•™์Šตํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

๋‹จ์ˆœ ๋ฌธ๋ฒ• ์•”๊ธฐ๋ณด๋‹ค๋Š” ์ „๋žต์  ์‚ฌ๊ณ ์™€ ์ „์ฒด ๊ตฌ์กฐ ์ดํ•ด๊ฐ€ ์ค‘์š”ํ•ด์ง.

  1. ํ‰๊ฐ€ ๋ฐ ์ง€์‹œ ๋Šฅ๋ ฅ: AI๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ๋ฐฉํ–ฅ์„ฑ์ด ๋งž๋Š”์ง€, ์ž ์žฌ์  ๋ฌธ์ œ๋Š” ์—†๋Š”์ง€ ํ‰๊ฐ€(Audit)ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์‹์ด ํ•„์ˆ˜.
  2. ์‹œ์Šคํ…œ ๋””์ž์ธ & ์•„ํ‚คํ…์ฒ˜: ์ฝ”๋“œ ๋ผ์ธ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ, ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ, ์šด์˜, ๋ณด์•ˆ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ Trade-off๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฑฐ์‹œ์  ๊ด€์  ํ•„์š”.
  3. Communication: ๋ชจํ˜ธํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ  ํ˜‘์—…ํ•˜๋Š” ๋Šฅ๋ ฅ์€ AI๊ฐ€ ๋Œ€์ฒดํ•˜๊ธฐ ์–ด๋ ค์šด ์˜์—ญ.
  4. ํ•œ ์–ธ์–ด์˜ ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด: ํ•˜๋‚˜์˜ ์–ธ์–ด๋ฅผ ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๋ฉด ๋‹ค๋ฅธ ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ๋„ ์‰ฝ๊ฒŒ ์Šต๋“ ๊ฐ€๋Šฅ.

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)์Šคํƒ๊ณผ ํž™ ์‚ฌ์ด์˜ ๋นˆ ๊ณต๊ฐ„์Šคํƒ์€ ์•„๋ž˜๋กœ, ํž™์€ ์œ„๋กœ ์ž๋ผ๋‚˜๋ฉฐ ๊ณต๊ฐ„ ๊ณต์œ 
MiddleHeap
(ํž™)
์‹ค์ œ ๊ฐ์ฒด(Object, Value) ์ €์žฅโ€ข ํŒŒ์ด์ฌ์˜ ๋ชจ๋“  ๊ฐ’(int, list ๋“ฑ) ์ €์žฅ
โ€ข ์ฃผ์†Œ๊ฐ€ ์•„๋ž˜์—์„œ ์œ„๋กœ(โ†‘) ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ• ๋‹น
โ€ข ๋™์  ์ƒ์„ฑ (Dynamic Allocation)
Low Address
(๋‚ฎ์€ ์ฃผ์†Œ)
Data์ „์—ญ ๋ณ€์ˆ˜ ์„ค์ • ์ •๋ณดโ€ข ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ํ• ๋‹น๋จ
LowestText์†Œ์Šค ์ฝ”๋“œ (๊ธฐ๊ณ„์–ด)โ€ข ์ฝ๊ธฐ ์ „์šฉ (Read-Only)

3.3 ๐Ÿ”’ Immutable vs Mutable

  • Immutable (๋ถˆ๋ณ€): int, float, str, tuple
  • Mutable (๊ฐ€๋ณ€): list, dict, set

๐Ÿ’ก ํ€ด์ฆˆ: ํŠœํ”Œ ๋‚ด ๋ฆฌ์ŠคํŠธ ์ˆ˜์ •

t = ('This', 'tuple', ['is', 'immutable', '?'])
t[2][2] = '!'
# -> โญ• ์ •์ƒ ์‹คํ–‰ (Tuple ์•ˆ์˜ ์ฃผ์†Œ๋Š” ๋ถˆ๋ณ€์ด๋‚˜, ๊ทธ ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” List ์ž์ฒด๋Š” ๊ฐ€๋ณ€์ด๋ฏ€๋กœ)

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__ ์ƒ์„ฑ์„ ๋ง‰์Œ.
  • ํšจ๊ณผ: ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋Œ€ํญ ์ ˆ๊ฐ, ์˜คํƒ€ ๋ฐฉ์ง€.

๐Ÿ—๏ธ Metaclass

  • "ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํด๋ž˜์Šค" (๊ธฐ๋ณธ์€ 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๋กœ ๋ช…์‹œ์ ์ธ ์–‘๋ณด๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ด๊ฐ€ ์šฉ์ดํ•จ.

โš ๏ธ ์ €์ง€๋ฅด๊ธฐ ์‰ฌ์šด ์‹ค์ˆ˜

  1. Blocking Call: async ํ•จ์ˆ˜ ๋‚ด์—์„œ time.sleep() ๋“ฑ์„ ์“ฐ๋ฉด ์ „์ฒด ๋ฃจํ”„๊ฐ€ ๋ฉˆ์ถค.
  2. 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

0๊ฐœ์˜ ๋Œ“๊ธ€