CoodingPenguin/robust-python-study

๐Ÿ“– Study how to write maintainable python codes with <Robust Python> ๐Ÿ

โ˜… 0Forks 0PythonGitHub โ†—Compare

Project website โ†—

bookpythonstudy

README

๋‹จ๋‹จํ•œ ํŒŒ์ด์ฌ ํ‘œ์ง€

๋‹จ๋‹จํ•œ ํŒŒ์ด์ฌ

Written By ํŒจํŠธ๋ฆญ ๋น„์•„ํฌ์–ด

๐Ÿ“– ์ฑ… ์†Œ๊ฐœ

ํŒŒ์ด์ฌ์€ ์ ‘๊ทผํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ๋„ ์‰ฌ์šด ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์ž์นซ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์–‘์ด ๋ฐฉ๋Œ€ํ•ด์ง€๊ธฐ๋„ ์‰ฝ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€๋ฐ ์ด ์ฑ…์—์„œ๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค€๋‹ค. ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์‹œ์ž‘์œผ๋กœ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค, ํด๋ž˜์Šค ๋“ฑ ํŒŒ์ด์ฌ์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ์•Œ์•„๋ณด๊ณ  ์ด๋“ค์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ •๋ฆฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํƒ€์ž…์„ ์ฒดํ‚นํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค. ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์กฐํ•ฉ, ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜, ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์•Œ์•„๋ณด๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด์˜ ์•ˆ์ „๋ง์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์ •์  ๋ถ„์„, ํ…Œ์ŠคํŠธ ์ „๋žต, ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ, ์†์„ฑ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ, ๋ฎคํ…Œ์ด์…˜ ํ…Œ์ŠคํŠธ ๋“ฑ์„ ์‚ดํŽด๋ณธ๋‹ค.

๐Ÿ” ๋ชฉ์ฐจ

1์žฅ. ๊ฒฌ๊ณ ํ•œ ํŒŒ์ด์ฌ
__๊ฒฌ๊ณ ์„ฑ
____๊ฒฌ๊ณ ์„ฑ์ด ์ค‘์š”ํ•œ ์ด์œ 
__์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๋„๋Š” ๋ฌด์—‡์ธ๊ฐ€?
____๋น„๋™๊ธฐ ์†Œํ†ต
__ํŒŒ์ด์ฌ ์ฝ”๋“œ์—์„œ ์˜๋„์˜ ์˜ˆ์‹œ
____์ปฌ๋ ‰์…˜
____๋ฐ˜๋ณต ๊ตฌ๋ฌธ
____์ตœ์†Œ ๋†€๋žŒ์˜ ์›์น™
__๋งˆ์น˜๋ฉฐ
2์žฅ. ํŒŒ์ด์ฌ ํƒ€์ž…์˜ ์†Œ๊ฐœ
__ํƒ€์ž…์ด๋ž€?
____๊ธฐ๊ณ„์ ์ธ ํ‘œํ˜„
____์˜๋ฏธ์  ํ‘œํ˜„
__ํƒ€์ž… ์‹œ์Šคํ…œ
____๊ฐ•ํ•œ ์ŠคํŽ™ํŠธ๋Ÿผ๊ณผ ์•ฝํ•œ ์ŠคํŽ™ํŠธ๋Ÿผ
____๋™์  ํƒ€์ž…๊ณผ ์ •์  ํƒ€์ž…
____๋• ํƒ€์ดํ•‘
__๋งˆ์น˜๋ฉฐ
3์žฅ. ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜
__ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์ด๋ž€?
__ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์˜ ์žฅ์ 
____์ž๋™ ์™„์„ฑ
____ํƒ€์ž… ์ฒด์ปค
____์—ฐ์Šต: ๋ฒ„๊ทธ ์ฐพ๊ธฐ
__ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์€ ์‚ฌ์šฉํ•  ๋•Œ
__๋งˆ์น˜๋ฉฐ
4์žฅ. ํƒ€์ž…์˜ ์ œ์–ด
__Optional ํƒ€์ž…
__Union ํƒ€์ž…
____๊ณฑ ํƒ€์ž…๊ณผ ํ•ฉ ํƒ€์ž…
__Literal ํƒ€์ž…
__Annotated ํƒ€์ž…
__NewType
__Final ํƒ€์ž…
__๋งˆ์น˜๋ฉฐ
6์žฅ. ํƒ€์ž… ์ฒด์ปค์˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
__ํƒ€์ž… ์ฒด์ปค์˜ ์„ค์ •
____mypy์˜ ์„ค์ •
____mypy ๋ฆฌํฌํŠธ
____mypy๋ฅผ ๋น ๋ฅด๊ฒŒ
__๊ธฐํƒ€ ํƒ€์ž… ์ฒด์ปค
____Pyre
____Pyright
__๋งˆ์น˜๋ฉฐ
7์žฅ. ์‹ค์šฉ์  ํƒ€์ž… ์ฒดํ‚น
__ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
__๋” ๋น ๋ฅธ ์†์ต ๋ถ„๊ธฐ
____์ทจ์•ฝ์  ์ฐพ๊ธฐ
____์ „๋žต์ ์œผ๋กœ ๋Œ€์ƒ ์ฝ”๋“œ๋ฅผ ์žก์•„๋ผ
____๋„๊ตฌํ™”์— ์˜์กดํ•˜๊ธฐ
__๋งˆ์น˜๋ฉฐ
8์žฅ. ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…: ์—ด๊ฑฐํ˜•
__์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…
__์—ด๊ฑฐํ˜•
____Enum
____์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ
__๊ณ ๊ธ‰ ์‚ฌ์šฉ๋ฒ•
____์ž๋™ ๋ณ€์ˆ˜
____ํ”Œ๋ž˜๊ทธ
____์ •์ˆ˜ํ˜• ๋ณ€ํ™˜
____๊ณ ์œ ์„ฑ
__๋งˆ์น˜๋ฉฐ
9์žฅ. ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…: ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค
__๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์˜ ๋™์ž‘
__์‚ฌ์šฉ๋ฒ•
____๋ฌธ์ž์—ด ๋ณ€ํ™˜
____๋“ฑ๊ฐ€ ๋น„๊ต
____๊ด€๊ณ„ ๋น„๊ต
____๋ถˆ๋ณ€์„ฑ
__๋‹ค๋ฅธ ํƒ€์ž…๊ณผ์˜ ๋น„๊ต
____๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์™€ ๋”•์…”๋„ˆ๋ฆฌ
____๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์™€ TypedDict
____๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์™€ namedtuple
__๋งˆ์น˜๋ฉฐ
10์žฅ. ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…: ํด๋ž˜์Šค
__ํด๋ž˜์Šค ํ•ด๋ถ€
____์ƒ์„ฑ์ž
__๋ถˆ๋ณ€ ์†์„ฑ
____๊นจ์ง„ ๋ถˆ๋ณ€ ์†์„ฑ ํ”ผํ•˜๊ธฐ
____๋ถˆ๋ณ€ ์†์„ฑ์ด ์ด์ต์ธ ์ด์œ 
____๋ถˆ๋ณ€ ์†์„ฑ์„ ํ†ตํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜
____ํด๋ž˜์Šค์˜ ์†Œ๋น„
____์œ ์ง€ ๋ณด์ˆ˜์ž๋“ค์€ ์–ด๋–ป๊ฒŒ?
__์บก์Аํ™”์™€ ๋ถˆ๋ณ€ ์†์„ฑ์˜ ์œ ์ง€ ๋ณด์ˆ˜
____์บก์Аํ™”
____๋ฐ์ดํ„ฐ ์ ‘๊ทผ์˜ ๋ณดํ˜ธ
____์šด์˜
__๋งˆ์น˜๋ฉฐ
11์žฅ. ์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค
__์ž์—ฐ์Šค๋Ÿฌ์šด ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„
____์‚ฌ์šฉ์ž์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ธฐ
__์ž์—ฐ์Šค๋Ÿฐ ์ƒํ˜ธ์ž‘์šฉ
____์ž์—ฐ์Šค๋Ÿฐ ์ƒํ˜ธ์ž‘์šฉ์˜ ์‹ค์ œ
____๋งค์ง ๋ฉ”์„œ๋“œ
____์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €
__๋งˆ์น˜๋ฉฐ
12์žฅ. ํ•˜์œ„ ํƒ€์ž…
__์ƒ์†
__์น˜ํ™˜ ๊ฐ€๋Šฅ์„ฑ
__์„ค๊ณ„ ๊ณ ๋ ค ์‚ฌํ•ญ
____ํ•ฉ์„ฑ
__๋งˆ์น˜๋ฉฐ
13์žฅ. ํ”„๋กœํ† ์ฝœ
__ํƒ€์ž… ์‹œ์Šคํ…œ ๊ฐ„์˜ ๊ด€๊ณ„
____ํƒ€์ž…์„ ๋น„์›Œ๋‘๊ฑฐ๋‚˜ Any๋กœ ์‚ฌ์šฉ
____Union์˜ ์‚ฌ์šฉ
____์ƒ์†์˜ ์‚ฌ์šฉ
____๋ฏน์Šค์ธ์˜ ์‚ฌ์šฉ
__ํ”„๋กœํ† ์ฝœ
____ํ”„๋กœํ† ์ฝœ์˜ ์ •์˜
__๊ณ ๊ธ‰ ์‚ฌ์šฉ๋ฒ•
____ํ”„๋กœํ† ์ฝœ์˜ ํ•ฉ์„ฑ
____๋Ÿฐํƒ€์ž„ ์‹œ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ
____ํ”„๋กœํ† ์ฝœ์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๋ชจ๋“ˆ
__๋งˆ์น˜๋ฉฐ
14์žฅ. pydantic์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์ฒดํฌ
__๋™์  ์„ค์ •
__pydantic
____์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ
____์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ ํŒŒ์‹ฑ
__๋งˆ์น˜๋ฉฐ
15์žฅ. ํ™•์žฅ์„ฑ
__ํ™•์žฅ์„ฑ์ด๋ž€?
____์žฌ์„ค๊ณ„
__๊ฐœ๋ฐฉ-ํ์‡„์˜ ์›์น™
____๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™์˜ ์œ„๋ฐฐ
____๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™์˜ ๋‹จ์ 
__๋งˆ์น˜๋ฉฐ
16์žฅ. ์˜์กด์„ฑ
__๊ด€๊ณ„
__์˜์กด์„ฑ์˜ ์œ ํ˜•
____๋ฌผ๋ฆฌ์  ์˜์กด์„ฑ
____๋…ผ๋ฆฌ์  ์˜์กด์„ฑ
____์ผ์‹œ์ (์‹œ๊ฐ„์ ) ์˜์กด์„ฑ
__์˜์กด์„ฑ์˜ ์‹œ๊ฐํ™”
____์‹œ๊ฐํ™” ํŒจํ‚ค์ง€
____์ž„ํฌํŠธ์˜ ์‹œ๊ฐํ™”
____ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์‹œ๊ฐํ™”
____์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„์˜ ํ•ด์„
__๋งˆ์น˜๋ฉฐ
17์žฅ. ์กฐํ•ฉ ๊ฐ€๋Šฅ์„ฑ
__์กฐํ•ฉ ๊ฐ€๋Šฅ์„ฑ
__์ •์ฑ…๊ณผ ๋ฉ”์ปค๋‹ˆ์ฆ˜
__๋” ์ž‘์€ ์Šค์ผ€์ผ๋กœ ๊ตฌ์„ฑ
____ํ•จ์ˆ˜์˜ ์กฐํ•ฉ
____๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
__์•Œ๊ณ ๋ฆฌ๋“ฌ์˜ ์กฐํ•ฉ
__๋งˆ์น˜๋ฉฐ
18์žฅ. ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜
__๋™์ž‘ ๋ฐฉ์‹
____๋‹จ์ 
__๋‹จ์ผ ์ด๋ฒคํŠธ
____๋ฉ”์‹œ์ง€ ์ค‘๊ฐœ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
____๊ด€์ฐฐ์ž ํŒจํ„ด
__์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ
__๋งˆ์น˜๋ฉฐ
19์žฅ. ํ”Œ๋Ÿฌ๊ทธ์ธ
__ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด
__์ „๋žต ํŒจํ„ด
__ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„ํ‚คํ…์ฒ˜
__๋งˆ์น˜๋ฉฐ
20์žฅ. ์ •์  ๋ถ„์„
__๋ฆฐํŒ…
____์‚ฌ์šฉ์ž ์ •์˜ Pylint ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์„ฑ
____ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ถ„ํ•ด
__๊ธฐํƒ€ ์ •์  ๋ถ„์„ ๋„๊ตฌ
____๋ณต์žก๋„ ๋ถ„์„ ๋„๊ตฌ
____๋ณด์•ˆ ๋ถ„์„
__๋งˆ์น˜๋ฉฐ
21์žฅ. ํ…Œ์ŠคํŠธ ์ „๋žต
__ํ…Œ์ŠคํŠธ ์ „๋žต์˜ ์ •์˜
____ํ…Œ์ŠคํŠธ๋ž€?
__ํ…Œ์ŠคํŠธ ๋น„์šฉ ์ค„์ด๊ธฐ
____AAA ํ…Œ์ŠคํŠธ
__๋งˆ์น˜๋ฉฐ
22์žฅ. ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ
__ํ–‰์œ„ ์ฃผ๋„ ๊ฐœ๋ฐœ(BDD)
____๊ฑธํ‚จ ์–ธ์–ด
____์‹คํ–‰ ๊ฐ€๋Šฅ ์‚ฌ์–‘
__์ถ”๊ฐ€์ ์ธ behave์˜ ๊ธฐ๋Šฅ
____๋‹จ๊ณ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐํ™”
____ํ…Œ์ด๋ธ” ์ฃผ๋„ ์š”๊ตฌ ์‚ฌํ•ญ
____๋‹จ๊ณ„ ๋งค์นญ
____ํ…Œ์ŠคํŠธ ์ˆ˜๋ช…์ฃผ๊ธฐ์˜ ์‚ฌ์šฉ์žํ™”
____ํ…Œ์ŠคํŠธ์˜ ์„ ๋ณ„์  ์ˆ˜ํ–‰์„ ์œ„ํ•œ ํƒœ๊ทธ ์‚ฌ์šฉ
____๋ฆฌํฌํŠธ ์ƒ์„ฑ
__๋งˆ์น˜๋ฉฐ
23์žฅ. ์†์„ฑ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ
__Hypothesis์™€ ์†์„ฑ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ
____Hypothesis์˜ ๋งˆ๋ฒ•
____๊ธฐ์กด ํ…Œ์ŠคํŠธ์™€์˜ ๋น„๊ต
__Hypothesis์˜ ์ตœ๋Œ€ํ•œ ํ™œ์šฉ
____Hypothesis ์ „๋žต
____์•Œ๊ณ ๋ฆฌ๋“ฌ ์ƒ์„ฑ
__๋งˆ์น˜๋ฉฐ
24์žฅ. ๋ฎคํ…Œ์ด์…˜ ํ…Œ์ŠคํŠธ
__๋ฎคํ…Œ์ด์…˜ ํ…Œ์ŠคํŠธ๊ฐ€๋ž€?
__mutmut์„ ์ด์šฉํ•œ ๋ฎคํ…Œ์ด์…˜ ํ…Œ์ŠคํŠธ
____๋ฎคํ„ดํŠธ์˜ ์ˆ˜์ •
____๋ฎคํ…Œ์ด์…˜ ํ…Œ์ŠคํŠธ ๋ฆฌํฌํŠธ
__๋ฎคํ…Œ์ด์…˜ ํ…Œ์ŠคํŠธ์˜ ์ ์šฉ
____์ปค๋ฒ„๋ฆฌ์ง€์˜ ์˜ค๋ฅ˜(๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ฉ”ํŠธ๋ฆญ)
__๋งˆ์น˜๋ฉฐ

Contributors

CoodingPenguinjakim0228

Issues