๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ Python18

[Python] type hint & generic 1. ํƒ€์ž… ํžŒํŠธ(type hint) 1. ํ•„์š”์„ฑํŒŒ์ด์ฌ์€ ๋™์  ํƒ€์ž… ์–ธ์–ด๋กœ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ํ˜‘์—… ์ธ์›์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ํƒ€์ž… ๋ถˆํ™•์‹ค์„ฑ์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์ง„๋‹ค.def total(price, count): return price * counttotal("1000", 3) # → '100010001000' ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ฝ”๋“œ๋Š” int * int ๋ฅผ ์˜ˆ์ƒํ–ˆ์ง€๋งŒ, ๋ฌธ์ž์—ด์ด ๋“ค์–ด์˜ค๋ฉด ๊ฐœ๋ฐœ์ž์˜ ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.ํƒ€์ž… ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํƒ€์ž…์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 2. ๋ฌธ๋ฒ•1. ๊ธฐ๋ณธ ํƒ€์ž…๋ณ€์ˆ˜_์ด๋ฆ„: ๋ณ€์ˆ˜_ํƒ€์ž… ์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.ํ•จ์ˆ˜ ์ธ์ž์—๋„ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉฐ, ๋ฐ˜ํ™˜ ๊ฐ’์€ -> ๋’ค์— ํ‘œ์‹œํ•œ๋‹ค.name: str = "p.. 2025. 4. 23.
์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 8์žฅ - ๊ฐ•๊ฑด์„ฑ๊ณผ ์„ฑ๋Šฅ Better way 65 try/except/else/finally์˜ ๊ฐ ๋ธ”๋ก์„ ์ž˜ ํ™œ์šฉํ•˜๋ผ๋ธ”๋ก์šฉ๋„try์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋งŒ ํฌํ•จexcept์˜ˆ์™ธ ์ฒ˜๋ฆฌelse์˜ˆ์™ธ ์—†์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ์˜ ์ฒ˜๋ฆฌ (except์œผ๋กœ ๋น ์ง„ ๊ฒฝ์šฐ ์‹คํ–‰ X)finally์˜ˆ์™ธ ์—ฌ๋ถ€์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฐ˜๋“œ์‹œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„ (ํŒŒ์ผ ๋‹ซ๋Š” ๋“ฑ)  ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - try๋ฌธ ์•ˆ์— ์˜ˆ์™ธ ๋ฐœ์ƒ ์ฝ”๋“œ & ์•ˆํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ์Œimport threadinglock = threading.Lock()def critical_section_basic(): lock.acquire() try: result = 10 / 0 # โ— ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ print("โœ… ์ž‘์—… ์„ฑ๊ณต:", result) except .. 2025. 4. 9.
์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 7์žฅ - ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ ๋™์‹œ์„ฑ vs ๋ณ‘๋ ฌ์„ฑ๊ตฌ๋ถ„๋™์‹œ์„ฑ (Concurrency)๋ณ‘๋ ฌ์„ฑ (Parallelism)์˜๋ฏธ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์ฒ˜๋ฆฌ (๊ฒ‰์œผ๋กœ๋Š” ๋™์‹œ์—)์—ฌ๋Ÿฌ ์ž‘์—…์„ ์‹ค์ œ๋กœ ๋™์‹œ์— ์ฒ˜๋ฆฌ์ฒ˜๋ฆฌ ๋ฐฉ์‹ํ•˜๋‚˜์˜ ์ฝ”์–ด๊ฐ€ ์ž‘์—…์„ ๋น ๋ฅด๊ฒŒ ์ „ํ™˜ํ•˜๋ฉฐ ์ฒ˜๋ฆฌ์—ฌ๋Ÿฌ ์ฝ”์–ด๊ฐ€ ๊ฐ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰์˜ˆ์‹œ์นดํŽ˜์—์„œ ํ˜ผ์ž ์ฃผ๋ฌธ ๋ฐ›๊ณ , ๊ณ„์‚ฐํ•˜๊ณ , ์Œ๋ฃŒ ๋งŒ๋“ค๊ธฐ์นดํŽ˜์—์„œ ์„ธ ๋ช…์ด ๊ฐ๊ฐ ์ฃผ๋ฌธ, ๊ณ„์‚ฐ, ์Œ๋ฃŒ ๋งŒ๋“ค๊ธฐ๋ชฉ์ ์‘๋‹ต์„ฑ ํ–ฅ์ƒ, I/O ๋Œ€๊ธฐ ์‹œ๊ฐ„ ํ™œ์šฉ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒํŒŒ์ด์ฌ์Šค๋ ˆ๋“œ, ์ฝ”๋ฃจํ‹ด (asyncio)ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค, C ํ™•์žฅ, ์‹œ์Šคํ…œ ์ฝœ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์ด๋ฒคํŠธ ๋ฃจํ”„, ํ”„๋กœ๋ฏธ์Šค, async/await Web Workers, Node.js์˜ Worker Threads GIL (Global Interupt Lock)ํŒŒ์ด์ฌ์—๋Š” GIL์ด๋ผ๋Š” ์ „์—ญ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฝ์ด ์กด์žฌํ•จํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ํŒŒ.. 2025. 4. 1.
์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 6์žฅ - ๋ฉ”ํƒ€ํด๋ž˜์Šค์™€ ์• ํŠธ๋ฆฌ๋ทฐํŠธ Better way 44 ์„ธํ„ฐ์™€ ๊ฒŒํ„ฐ ๋ฉ”์„œ๋“œ ๋Œ€์‹  ํ‰๋ฒ”ํ•œ ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ setter, getter ๋ฉ”์„œ๋“œ ํ™œ์šฉ์ด ์•„๋‹Œ ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ง์ ‘ ํ™œ์šฉํ•˜์ž# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - getter, setter ํ™œ์šฉclass Person: def __init__(self): self._name = '' def get_name(self): return self._name def set_name(self, value): self._name = valuep = Person()p.set_name('Sungchan')print(p.get_name()) # ์ข‹์€ ์˜ˆ์‹œ - ์• ํŠธ๋ฆฌ๋ทฐํŠธ ํ™œ์šฉclass Person: def __init__(self): self.n.. 2025. 3. 30.
์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 5์žฅ - ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค Better way 38 ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฒฝ์šฐ ํด๋ž˜์Šค ๋Œ€์‹  ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„๋ผํ›…(hook)Python ๋‚ด์žฅ API ์‚ฌ์šฉํ•  ๋•Œ, ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐPython์€ ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ์‹œ๋ฏผ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ์— ๊ฐ€๋Šฅ ์ผ๊ธ‰ ์‹œ๋ฏผ (first-class citizen)์•„๋ฌด๋Ÿฐ ์ œ์•ฝ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’ํ•จ์ˆ˜ ์ธ์ž๋กœ ๋„˜๊ธฐ๊ธฐ ๊ฐ€๋Šฅํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์ €์žฅ ๊ฐ€๋Šฅ languages = ['python', 'swift', 'java']languages.sort(key=len) # hookprint(languages)>>>['java', 'swift', 'python']  ๋”•์…”๋„ˆ๋ฆฌ์— ํ‚ค๊ฐ€ ์ถ”๊ฐ€ ์—ฌ๋ถ€๋ฅผ ์ถ”์ ํ•˜๋Š” ๋‚ด์šฉ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜์ž.defaultdict ์ธ์ž์— log_missing ์„ ๊ตฌํ˜„ํ•˜.. 2025. 3. 21.
์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 3์žฅ - ํ•จ์ˆ˜ Better way 19 ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ ˆ๋Œ€๋กœ ๋„ค ๊ฐ’ ์ด์ƒ์„ ์–ธํŒจํ‚นํ•˜์ง€ ๋ง๋ผํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, ์–ธํŒจํ‚น ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์‰ฝ๋‹ค.# ์•ˆ์ข‹์€ ์˜ˆ์‹œ - ์–ธํŒจํ‚นํ•˜๋Š” ์ธ์ž์—์„œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ, ์˜ค๋ฅ˜๋ฅผ ์ธ์ง€ํ•˜๊ธฐ ์–ด๋ ต๋‹คdef get_stats(numbers): minimum = min(numbers) maximum = max(numbers) count = len(numbers) average = sum(numbers) / count return minimum, maximum, count, average# ์ •์ƒ์ ์œผ๋กœ ํ˜ธ์ถœminimum, maximum, count, average = get_stats([1,2,3,4]) # average, count ์ˆœ์„œ๋ฅผ .. 2025. 3. 17.