
**๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)**์์ **“has-a”**์ **“is-a”**๋ ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช
ํ ๋ ์์ฃผ ์ฐ์ด๋ ํต์ฌ ๊ฐ๋
์
๋๋ค.
๋ ๊ฐ๋
์ ๊ฐ๊ฐ **๊ตฌ์ฑ(Composition)**๊ณผ **์์(Inheritance)**์ ๊ด๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค.
๐น has-a ๊ด๊ณ (๊ตฌ์ฑ, Composition)
โ ๊ฐ๋
- ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ ์๋ ๊ด๊ณ์ ๋๋ค.
- ์ฆ, “A๋ B๋ฅผ ๊ฐ์ง๋ค(has a)” ํํ๋ก ํํ๋ฉ๋๋ค.
- ํด๋์ค ๊ฐ์ ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, ์์๋ณด๋ค ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ก ์์

โก๏ธ ์ฌ๊ธฐ์ Car ํด๋์ค๋ Engine ๊ฐ์ฒด๋ฅผ ์์ฑ์ผ๋ก ํฌํจํ๊ณ ์์ต๋๋ค.
์ฆ, **“์๋์ฐจ๋ ์์ง์ ๊ฐ์ง๋ค(Car has an Engine)”**๊ฐ ๋ฉ๋๋ค.
๐น is-a ๊ด๊ณ (์์, Inheritance)
โ ๊ฐ๋
- ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ๋ ๊ด๊ณ์ ๋๋ค.
- ์ฆ, “A๋ B์ด๋ค(is a)” ํํ๋ก ํํ๋ฉ๋๋ค.
- ์์ ๊ด๊ณ๋ ์ผ๋ฐํ-ํน์ํ ๊ด๊ณ(Generalization-Specialization)๋ก ์ดํดํ ์ ์์ต๋๋ค.
๐ก ์์

โก๏ธ Dog ํด๋์ค๋ Animal ํด๋์ค๋ฅผ ์์๋ฐ์๊ธฐ ๋๋ฌธ์,
**“๊ฐ๋ ๋๋ฌผ์ด๋ค(Dog is an Animal)”**๋ผ๋ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํฉ๋๋ค.
๐ ์ฐจ์ด์ ์ ๋ฆฌํ
| ์๋ฏธ | ํฌํจ(Composition) | ์์(Inheritance) |
| ๊ด๊ณ ํํ | A has a B | A is a B |
| ๊ตฌ์กฐ | ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง | ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ |
| ์์ | ์๋์ฐจ๋ ์์ง์ ๊ฐ์ง๋ค | ๊ฐ๋ ๋๋ฌผ์ด๋ค |
| ์ฅ์ | ์ ์ฐํ๊ณ ๊ฒฐํฉ๋๊ฐ ๋ฎ์ | ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํจ |
| ๋จ์ | ์ฝ๋ ์ค๋ณต ๊ฐ๋ฅ์ฑ ์์ | ๊ฒฐํฉ๋๊ฐ ๋๊ณ ์ ์ฐ์ฑ์ด ๋ฎ์ |
๐ฌ ํต์ฌ ์์ฝ
- has-a → “์์ฑ” ๊ด๊ณ (ํฌํจ)
- is-a → “๊ณ์ธต” ๊ด๊ณ (์์)
- ๊ถ์ฅ ๋ฐฉ์: ํ๋ OOP์์๋ ์์๋ณด๋ค๋ ๊ตฌ์ฑ(Composition)์ ์ฐ์ ํ๋ ๊ฒ์ด ์ ์ง๋ณด์์ ๋ ์ ๋ฆฌํฉ๋๋ค.
๐ “์์๋ณด๋ค๋ ๊ตฌ์ฑ์ ์ ํธํ๋ผ(Prefer composition over inheritance)”๋ ์ ๋ช ํ ์์น์ ๋๋ค.
๐น ์์กด๊ด๊ณ (Dependency)
โ ๊ฐ๋
- ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ ๊น ์ฌ์ฉํ๋ ๊ด๊ณ์ ๋๋ค.
- ์ฆ, **์ผ์์ ์ธ ๊ด๊ณ(temporary relationship)**๋ก, ๋ฉ์๋ ๋ด๋ถ์์๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ํด๋์ค ๊ฐ์ **์ฝํ ๊ฒฐํฉ(weak coupling)**์ ์๋ฏธํฉ๋๋ค.
๐ก ์์

โก๏ธ Report ํด๋์ค๋ Printer ๊ฐ์ฒด๋ฅผ ๋ฉ์๋ ์์์๋ง ์ ์ ์ฌ์ฉํฉ๋๋ค.
์ฆ, “๋ณด๊ณ ์๋ฅผ ์์ฑํ ๋ ํ๋ฆฐํฐ๊ฐ ์ ์ ํ์ํ๋ค”๋ ๊ด๊ณ์
๋๋ค.
์๋ช
์ฃผ๊ธฐ๊ฐ ๊ณต์ ๋์ง ์๊ณ , ์ ์ ์์กดํ๋ ๊ฒ์ด ํฌ์ธํธ์์.
๐น ์ฐ๊ด๊ด๊ณ (Association)
โ ๊ฐ๋
- ํ ๊ฐ์ฒด๊ฐ **๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑ(ํ๋)**์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ด๊ณ์ ๋๋ค.
- ์ฆ, **์ง์์ ์ธ ๊ด๊ณ(persistent relationship)**๋ก, ๊ฐ์ฒด ๊ฐ์ ์ฐ๊ฒฐ์ด ์ค๋ ์ ์ง๋ฉ๋๋ค.
- **has-a ๊ด๊ณ(๊ตฌ์ฑ)**์ ์ผ์ข ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.

โก๏ธ Car ํด๋์ค๋ Engine ๊ฐ์ฒด๋ฅผ ์์ฑ์ผ๋ก ํญ์ ๋ณด์ ํฉ๋๋ค.
์ฆ, “์๋์ฐจ๋ ์์ง์ ๊ฐ์ง๋ค(Car has an Engine)”์ฒ๋ผ ์ง์์ ์ธ ๊ด๊ณ๋ฅผ ์ ์งํฉ๋๋ค.
๐ ์ฐจ์ด์ ์ ๋ฆฌํ
| ๊ด๊ณ์ ์ง์์ฑ | ์ผ์์ (๋ฉ์๋ ํธ์ถ ์๋ง) | ์ง์์ (๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ๋์ ์ ์ง) |
| ์ฌ์ฉ ์์น | ๋ฉ์๋ ๋ด๋ถ | ํด๋์ค์ ํ๋(์์ฑ) |
| ๊ฒฐํฉ๋ | ๋ฎ์ (loosely coupled) | ๋น๊ต์ ๋์ (strongly coupled) |
| ๋ฐฉํฅ | ๋จ๋ฐฉํฅ | ๋จ๋ฐฉํฅ ๋๋ ์๋ฐฉํฅ ๊ฐ๋ฅ |
| ์์ | ๋ณด๊ณ ์๊ฐ ํ๋ฆฐํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ฌ์ฉ | ์๋์ฐจ๊ฐ ์์ง์ ๊ฐ์ง |
๐ฌ ํต์ฌ ์์ฝ
- ์์กด๊ด๊ณ → “์ ๊น ๋น๋ ค ์ฐ๋ ๊ด๊ณ” (๋ฉ์๋ ์์์ ์ฌ์ฉ)
- ์ฐ๊ด๊ด๊ณ → “ํญ์ ๊ฐ์ง๊ณ ์๋ ๊ด๊ณ” (ํ๋๋ก ๋ณด์ )
๐ ์ฆ, ์์กด์ ์๊ฐ์ , ์ฐ๊ด์ ์ง์์ ์ ๋๋ค.
**IoC(Inversion of Control)**์ **DI(Dependency Injection)**๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ, ํนํ ์คํ๋ง(Spring) ๊ฐ์ ํ๋ ์์ํฌ์์ ์์ฃผ ๋ฑ์ฅํ๋ ๊ฐ๋
์ด์ฃ .
๋ ์ฉ์ด๋ ๋น์ทํ๊ฒ ๋ค๋ฆฌ์ง๋ง, ํฌ๊ด ๊ด๊ณ์ ์์ต๋๋ค.
์ฆ, DI๋ IoC๋ฅผ ๊ตฌํํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด์์.
๐น IoC (Inversion of Control, ์ ์ด์ ์ญ์ )
โ ๊ฐ๋
- **๊ฐ์ฒด์ ์์ฑ๊ณผ ์ ์ด ๊ถํ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์ธ๋ถ(ํ๋ ์์ํฌ)**๊ฐ ๊ฐ์ง๋ ๊ฐ๋ ์ ๋๋ค.
- ์๋๋ ํ๋ก๊ทธ๋จ์ด ์ง์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ์ง๋ง, IoC์์๋ **์ปจํ ์ด๋(Spring Container)**๊ฐ ๋์ ์ด ์ญํ ์ ์ํํฉ๋๋ค.
- ์ฆ, “๊ฐ์ฒด์ ์ ์ด ํ๋ฆ์ด ๋ค์งํ๋ค”๋ ๋ป์ ๋๋ค.
๐ก ๋น์
๐ ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฆฌ๋ฅผ ํ์ง ์๊ณ , ๋ ์ํผ๋ง ์ ๋ฌํ๋ฉด ์ฃผ๋ฐฉ์ฅ์ด ๋์ ์๋ฆฌํด์ฃผ๋ ๊ตฌ์กฐ์ ๋๋ค.
๐ป ์์ (IoC ์์ด ์ง์ ์ ์ด)
โก๏ธ Restaurant์ด Chef ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฏ๋ก, ์ ์ด์ ์ฃผ์ฒด๊ฐ Restaurant์ ๋๋ค.
๐ป ์์ (IoC ์ ์ฉ)
โก๏ธ ์ด์ Restaurant์ Chef๋ฅผ ์ง์ ๋ง๋ค์ง ์๊ณ ์ธ๋ถ์์ ๋ฐ๊ธฐ๋ง ํฉ๋๋ค.
์ด๋ Chef ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํด์ฃผ๋ ์ญํ ์ **IoC ์ปจํ
์ด๋(Spring)**๊ฐ ๋ด๋นํฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก ๊ฐ์ฒด ์์ฑ์ ์ ์ด๊ถ์ด ์ญ์ ๋ ๊ฒ์ด IoC์
๋๋ค.
๐น DI (Dependency Injection, ์์กด์ฑ ์ฃผ์ )
โ ๊ฐ๋
- IoC์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ๋ฐฉ์ ์ค ํ๋๋ก, ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ์ฆ, “A๊ฐ B๋ฅผ ํ์๋ก ํ๋ค๋ฉด, A๊ฐ ์ง์ B๋ฅผ ๋ง๋ค์ง ์๊ณ ์ธ๋ถ์์ ๋ฃ์ด์ค๋ค”๋ ๊ฐ๋ ์ด์์.
๐ก DI์ ์ฃผ์ ๋ฐฉ์
| ์์ฑ์ ์ฃผ์ (Constructor Injection) | ์์ฑ์๋ฅผ ํตํด ์ฃผ์ | Restaurant(Chef chef) |
| ์ธํฐ ์ฃผ์ (Setter Injection) | setter ๋ฉ์๋๋ฅผ ํตํด ์ฃผ์ | setChef(Chef chef) |
| ํ๋ ์ฃผ์ (Field Injection) | @Autowired๋ก ์ง์ ํ๋์ ์ฃผ์ | @Autowired private Chef chef; |
๐ ์ฐจ์ด์ ์ ๋ฆฌํ
| ๊ฐ๋ | ๊ฐ์ฒด์ ์ ์ด๊ถ์ ํ๋ ์์ํฌ๊ฐ ๊ฐ์ง๋ ๊ฒ | ๊ฐ์ฒด์ ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ํ๋ ๊ฒ |
| ๋ฒ์ | ๋ ๋์ ๊ฐ๋ (ํฌ๊ด์ ) | IoC๋ฅผ ๊ตฌํํ๋ ํ ๋ฐฉ๋ฒ |
| ์ญํ | ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ ์ ์ฒด ์ ์ด | ํ์ํ ์์กด ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐ |
| ์ฃผ์ฒด | IoC ์ปจํ ์ด๋ | IoC ์ปจํ ์ด๋๊ฐ ์ํํ๋ ๊ตฌ์ฒด์ ๋์ |
| ์์ | ์คํ๋ง์ด Bean์ ์์ฑ, ๊ด๋ฆฌ | @Autowired๋ก ๊ฐ์ฒด๋ฅผ ์ฃผ์ |
๐ฌ ํต์ฌ ์์ฝ
- IoC๋ “๊ฐ์ฒด์ ์ ์ด๊ถ์ ํ๋ ์์ํฌ๊ฐ ๊ฐ์ ธ๊ฐ๋ค”๋ ํฐ ๊ฐ๋
- DI๋ “์์กด ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ํ๋ค”๋ IoC์ ๊ตฌํ ๋ฐฉ์
๐ ํ๋ง๋๋ก ์ ๋ฆฌํ๋ฉด,
“DI๋ IoC๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ด๋ค.”
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 23์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.10 |
|---|---|
| 22์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.07 |
| 20์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.05 |
| 19์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.04 |
| ์คํ๋ง(Spring) ๊ธฐ๋ฐ ๋ฐฑ์๋ ๊ตฌ์กฐ์ ์ ๋ฐ์ ์ธ ํ๋ฆ๊ณผ ์ญํ ๊ด๊ณ (0) | 2025.11.04 |