--- id: wiki-2026-0508-switch-statements-switch-๋ฌธ title: Switch Statements (Switch ๋ฌธ) category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [uncategorized] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Switch Statements (Switch ๋ฌธ)]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) Switch ๋ฌธ์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ƒ์†์ด๋‚˜ ๋‹คํ˜•์„ฑ(Polymorphism)์˜ ์ด์ ์„ ์ œ๋Œ€๋กœ ์‚ด๋ฆฌ์ง€ ๋ชปํ•˜๊ณ  ์ ˆ์ฐจ์ง€ํ–ฅ์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋Œ€ํ‘œ์ ์ธ '์ฝ”๋“œ ์Šค๋ฉœ(OO Abusers)' ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [1-3]. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด๋ฌธ์€ ํ”„๋กœ๊ทธ๋žจ ์—ฌ๋Ÿฌ ๊ณณ์— ํฉ์–ด์ ธ ์ฝ”๋“œ ์ค‘๋ณต์„ ์œ ๋ฐœํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ์กฐ๊ฑด์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๊ด€๋ จ๋œ ๋ชจ๋“  Switch ๋ฌธ์„ ์ฐพ์•„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์  ๊ฒฐํ•จ์„ ๋‚ณ์Šต๋‹ˆ๋‹ค [2]. ์ผ๋ฐ˜์ ์œผ๋กœ '์กฐ๊ฑด์‹์„ ๋‹คํ˜•์„ฑ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ(Replace Conditional with Polymorphism)'์™€ ๊ฐ™์€ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 5]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ๊ฒฐํ•จ ์ง€ํ‘œ:** ๊ฐ์ฒด์ง€ํ–ฅ ์ฝ”๋“œ์˜ ๊ฐ€์žฅ ๋šœ๋ ทํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” Switch(๋˜๋Š” case) ๋ฌธ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [2]. Switch ๋ฌธ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์ง€ํ–ฅ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‚จ์šฉํ–ˆ๊ฑฐ๋‚˜(OO Abusers) ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค [1, 3]. Switch ๋ฌธ์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ์ค‘๋ณต์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋Š” ์ ์ด๋ฉฐ, ์ƒˆ๋กœ์šด ๋ถ„๊ธฐ ์กฐ๊ฑด์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ํฉ์–ด์ง„ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝ์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค [2]. * **๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ ๋ฆฌํŒฉํ† ๋ง:** Switch ๋ฌธ์„ ๋งˆ์ฃผ์น˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋‹คํ˜•์„ฑ์˜ ์ ์šฉ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. * Switch ๋ฌธ์ด ์ข…์ข… ํƒ€์ž… ์ฝ”๋“œ(Type Code)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ, ์šฐ์„  'ํ•จ์ˆ˜ ์ถ”์ถœํ•˜๊ธฐ(Extract Method)'์™€ 'ํ•จ์ˆ˜ ์˜ฎ๊ธฐ๊ธฐ(Move Method)'๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น Switch ๋ฌธ์„ ๋‹คํ˜•์„ฑ์ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค [4]. * ๊ทธ ๋‹ค์Œ 'ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๊ธฐ(Replace Type Code with Subclasses)'๋‚˜ 'ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์ƒํƒœ/์ „๋žต ํŒจํ„ด์œผ๋กœ ๋ฐ”๊พธ๊ธฐ(Replace Type Code with State/Strategy)'๋ฅผ ํ†ตํ•ด ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [4]. * ๋งˆ์ง€๋ง‰์œผ๋กœ '์กฐ๊ฑด์‹์„ ๋‹คํ˜•์„ฑ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ(Replace Conditional with Polymorphism)'๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ถ„๊ธฐ ๋กœ์ง์„ ๋™์  ๋ฐ”์ธ๋”ฉ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค [4, 5]. ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํƒ€์ž…์ด ์ถ”๊ฐ€๋  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋˜์–ด ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open-Closed Principle)์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 6]. * **๋‹คํ˜•์„ฑ ์™ธ์˜ ๋Œ€์•ˆ ๊ธฐ๋ฒ•:** ์กฐ๊ฑด์ด Null์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ„๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด '๋„ ๊ฐ์ฒด ๋„์ž…ํ•˜๊ธฐ(Introduce Null Object)' ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ Switch ๋ฌธ์˜ ๋ณต์žก์„ฑ์„ ๋œ์–ด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) * **๋‹คํ˜•์„ฑ ์ ์šฉ์˜ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Overkill) ์œ„ํ—˜:** Switch ๋ฌธ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์กฐ๊ฑด ๋‹คํ˜•์„ฑ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ฉ”์„œ๋“œ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์†Œ์ˆ˜์˜ ์กฐ๊ฑด ์ผ€์ด์Šค๋งŒ ์กด์žฌํ•˜๊ณ  ํ–ฅํ›„ ์ด ์กฐ๊ฑด๋“ค์ด ๋ณ€๊ฒฝ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋‹คํ˜•์„ฑ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ๊ฐ€์ค‘์‹œํ‚ค๋Š” ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Overkill)์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7]. * ์ด๋Ÿฌํ•œ ์ œ์•ฝ ์ƒํ™ฉ์—์„œ๋Š” ๋‹คํ˜•์„ฑ ๋Œ€์‹  '๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์  ๋ฉ”์„œ๋“œ๋กœ ๋ฐ”๊พธ๊ธฐ(Replace Parameter with Explicit Methods)'์™€ ๊ฐ™์ด ๋” ๋‹จ์ˆœํ•œ ๋ฆฌํŒฉํ† ๋ง ๋ฐฉ์‹์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•ฉ๋‹ˆ๋‹ค [7]. --- *Last updated: 2026-05-03* ## ๐Ÿค– LLM ํ™œ์šฉ ํžŒํŠธ (How to Use This Knowledge) **์–ธ์ œ ์ด ์ง€์‹์„ ์“ฐ๋Š”๊ฐ€:** - *(TODO)* **์–ธ์ œ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€:** - *(TODO)* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** needs_review - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** *(P-Reinforce Phase 1 ์ž๋™ ์ •๊ทœํ™”. ๋ณธ๋ฌธ ๊ฒ€์ฆ ํ•„์š”.)* ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** *(TODO: ์ธ๋ฑ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌํฌํŠธ ์ฐธ์กฐ)* - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE (์ž๋™ ์ •๊ทœํ™”) - **์ฒ˜๋ฆฌ ์ด์œ :** Phase 1 ์ •๊ทœํ™” โ€” ์˜› ํ…œํ”Œ๋ฆฟ/๋ˆ„๋ฝ ํ•„๋“œ ๋ณด๊ฐ•. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Parent:** [[10_Wiki/Topics]] - **Related:** *(TODO: ์ตœ์†Œ 2๊ฐœ)* - **Opposite / Trade-off:** *(TODO)* - **Raw Source:** ์ง์ ‘ ์ž…๋ ฅ ## ๐Ÿ•“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) | ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | ์ฒ˜๋ฆฌ ๋ฐฉ์‹ | ์‹ ๋ขฐ๋„ | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 ์ •๊ทœํ™” (frontmatter + ํ—ค๋” ํ‘œ์ค€ํ™”) | UPDATE | A | ## ๐Ÿ’ป ์ฝ”๋“œ ํŒจํ„ด (Code Patterns) **ํŒจํ„ด 1:** *(TODO: ์ด ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ ์Šค์ผˆ๋ ˆํ†ค)* ```text # TODO ``` ## ๐Ÿค” ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ์ค€ (Decision Criteria) **์„ ํƒ A๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **์„ ํƒ B๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **๊ธฐ๋ณธ๊ฐ’:** > *(TODO)* ## โŒ ์•ˆํ‹ฐํŒจํ„ด (Anti-Patterns) - **[์•ˆํ‹ฐํŒจํ„ด]:** *(TODO: ๋ฌด์—‡์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€ + ์ด์œ  + ๋Œ€์‹  ๋ฌด์—‡์„)*