# [[Explicit Contracts]] ## ๐Ÿ“Œ Brief Summary ๋ช…์‹œ์  ๊ณ„์•ฝ(Explicit Contracts)์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•  ์ฃผ์š” ์›์น™ ์ค‘ ํ•˜๋‚˜๋กœ, ์ปดํฌ๋„ŒํŠธ์˜ ๋ช…ํ™•ํ•œ API๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ์ด๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ(props), ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ(์ด๋ฒคํŠธ/์ฝœ๋ฐฑ), ๊ทธ๋ฆฌ๊ณ  ์ ˆ๋Œ€ ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ํ–‰๋™(์˜ˆ: ๋ถ€๋ชจ ์ƒํƒœ์˜ ์ง์ ‘ ๋ณ€ํ˜•)์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ทœ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [1]. ์ด๋Ÿฌํ•œ ๊ฐ•๋ ฅํ•œ ๊ณ„์•ฝ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [1, 2]. ## ๐Ÿ“– Core Content - **์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„์˜ ํ•ต์‹ฌ ๊ทœ์น™:** ๋ช…์‹œ์  ๊ณ„์•ฝ์€ ๋‹จ์ผ ์ฑ…์ž„(Single Responsibility), ์ƒ์†๋ณด๋‹ค ํ•ฉ์„ฑ(Composition Over Inheritance), ์ ‘๊ทผ์„ฑ ์šฐ์„ (Accessibility First)๊ณผ ํ•จ๊ป˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ 4๊ฐ€์ง€ ํ™ฉ๊ธˆ ๋ฒ•์น™ ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค [1]. - **๋ช…ํ™•ํ•œ API ์„ค๊ณ„ (Props & Events):** - **Props (ํ”„๋กœํผํ‹ฐ):** ์ปดํฌ๋„ŒํŠธ์˜ API๋Š” ์˜ค์šฉํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ์ง๊ด€์ ์œผ๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„ ๋ฐฉ์‹์ด ์•„๋‹Œ ์˜๋„(intent)๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์šฉ์–ด๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ช…๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: `showModalNow` ๋Œ€์‹  `isOpen` ์‚ฌ์šฉ). ๋˜ํ•œ, ํ”„๋กœํผํ‹ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [2]. - **Events (์ด๋ฒคํŠธ):** ์ด๋ฒคํŠธ ์—ญ์‹œ ๊ณ„์•ฝ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์™ธ๋ถ€๋กœ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ(์˜ˆ: '์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธ์„ ํด๋ฆญํ•จ'), ์ž˜ ๋ช…๋ช…๋œ ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•ญ์ƒ ์ผ๊ด€๋˜๊ณ  ์œ ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด๋กœ๋“œ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. - **์ƒํƒœ์˜ ๊ฒฝ๊ณ„์™€ ์„ฑ๋Šฅ:** ๋ช…ํ™•ํ•œ ๊ณ„์•ฝ์€ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ(Controlled)์™€ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ(Uncontrolled)์˜ ์ƒํƒœ ์†Œ์œ ๊ถŒ(state ownership)์„ ๋ถ„๋ช…ํžˆ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค [2]. ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ๊ณ„์•ฝ์€ ์šฐ๋ฐœ์ ์ธ ๋ฆฌ๋ Œ๋”๋ง์˜ ์œ„ํ—˜์„ ๋‚ฎ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ํ–ฅ์ƒ์˜ ์ถœ๋ฐœ์ ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค [3]. - **๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ๋ช…์‹œ์  ๊ณ„์•ฝ:** - ๋ชจ๋…ธ๋ ˆํฌ(Monorepo)์™€ ๊ฐ™์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์€ ๋ช…์‹œ์  ๊ณ„์•ฝ์„ ํ†ตํ•ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ˜๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. - ๊ธฐ๋Šฅ ๋ถ„ํ•  ์„ค๊ณ„(Feature-Sliced Design, FSD)์—์„œ๋„ ์Šฌ๋ผ์ด์Šค ๊ฒฝ๊ณ„๋งˆ๋‹ค ๋ช…์‹œ์ ์ธ ๊ณต๊ฐœ API(Public API)๋ฅผ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ํŒŒ์ผ์˜ ๋”ฅ ์ž„ํฌํŠธ(deep import)๋ฅผ ๋ง‰๊ณ  ์šฐ๋ฐœ์ ์ธ ๊ฒฐํ•ฉ(accidental coupling)์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 6]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Reusable UI Components]], [[Component API Design]], [[Feature-Sliced Design]] - **Projects/Contexts:** [[React Component Architecture]], [[Monorepo Architecture]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋ช…์‹œ์  ๊ณ„์•ฝ์˜ ๊ฐœ๋…์ด ์ปดํฌ๋„ŒํŠธ ์ˆ˜์ค€์˜ ์„ค๊ณ„ ์›์น™๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋Œ€๊ทœ๋ชจ ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ์—์„œ์˜ ํŒจํ‚ค์ง€ ๊ฐ„ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์›์น™์œผ๋กœ๋„ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ๋จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค [1, 4]. --- *Last updated: 2026-04-26*