๐ ์คํ๋ง์ด๋?
1. DI container ๊ธฐ์ ?
์คํ๋ง ๋น์ ๊ด๋ฆฌํ๋ ๊ธฐ์
2.์คํ๋ง ํ๋ ์์ํฌ?
3.์คํ๋ง ๋ถํธ, ์คํ๋ง ํ๋ ์์ํฌ ๋ฑ์ ๋ชจ๋ ํฌํจํ ์คํ๋ง ์ํ๊ณ
ํต์ฌ์ ์ข์ ๊ฐ์ฒด ์งํฅ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ๋ผ๋ ์ ์ด๋ค
๐ ์ข์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
๊ฐ์ฒด ์งํฅ์ ํน์ฑ
1. ์ถ์ํ
2.์บก์ํ
3.์์
4.๋คํ์ฑ
๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๊ฒฐ๊ตญ ์ค์ํ๊ฑด ๋คํ์ฑ
์ ์ฐํ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค
์ญํ ๊ณผ ๊ตฌํ์ ๊ตฌ๋ถํ์ฌ ๋ณด์
์๋์ฐจ์ ์ญํ ์ ์ธ๊ฐ์ ์๋์ฐจ์ ๋ถ์ฌ
k3 ํ๋ค๊ฐ ์๋ฐ๋ผ๋ฅผ ํ๋ ์ด์ ์ ํ ์ ์๋ค
์ด์ ์์๊ฒ ์ํฅ์ ์ฃผ์ง ์๋๋ค
์๋์ฐจ ์ญํ ์ k3์์ ํ ์ฌ๋ผ๋ก ๋ฐ๊ฟ๋ ์ด์ ์๋ ์ด์ ์ ํ ์ ์๋ค.
์? ์๋์ฐจ ์ธํฐํ์ด์ค๋ก ๊ธฐ๋ฅ์ ํฐ ๊ทธ๋ฆผ์ ์ง๋จ๊ธฐ ๋๋ฌธ์
ํด๋ผ์ด์ธํธ๋ ๋ด๋ถ ๋์์ ๋ชฐ๋ผ๋ ๋๋ค
์๋์ฐจ ์ธ์์ ๋ฌดํํ ํ์ฅ ๊ฐ๋ฅํ๋ค!
์ ๋ฆฌ
์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ์ธ์์ด ๋จ์ํด์ง๋ค
ํด๋ผ์ด์ธํธ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ ๋ชฐ๋ผ๋ ๋๋ค
๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค ์? ์ญํ ์ ๊ทธ๋๋ก๋๊น
๋คํ์ฑ
์ญํ = ์ธํฐํ์ด์ค
๊ตฌํ=๊ตฌํ ๊ฐ์ฒด ํด๋์ค
์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๊ณ
๊ฐ์ฒด ํ๋ ฅ์ด๋ผ๋ ๊ด๊ณ๋ถํฐ ์๊ฐํ์.
๋คํ์ฑ์ ๋ณธ์ง
์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค
ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ฒ์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ ์ฐํ๊ฒ ํ๋๊ฒ์ด ๋ณธ์ง์ด๋ค.
๐์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๋ณธ์ง
1.SRP ์์น(Single Responsibility Principle) - ๋จ์ผ ์ฑ ์ ์์น
ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง!!
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ๋งค์ฐ ๋ชจํธํจ
๊ทธ๋์ ์ค์ํ ๊ธฐ์ค์ ๋ณ๊ฒฝ์ด๋ค.
๋ณ๊ฒฝํ๊ธฐ ์ฝ๋๋ก ํ๋ ๊ฒฝ๊ณ๊น์ง ๋จ์ผ ์ฑ ์์ ๋ถ์ฌ
2.OCP(Open/Closed Principle) - ๊ฐ๋ฐ-ํ์ ๋ฒ์น
๋งค์ฐ ์ค์!!
ํ์ฅ์๋ ์ด๋ ค ์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค
์ด๊ฑฐ๋ฅผ DI์ IOC๋ก ํด์ค
์ฝ๋๋ก ํด๋ด์ผ ์ ์ ์๋ค
๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ๋ง ์ธ์ง
3.LSP(Liskov Substitution Principle) ๋ฆฌ์ค์ฝํ ์นํ ์์น
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์์ ๊ธฐ๋ํ ๋์์ ๊ทธ๋๋ก ๊ตฌํํ๊ฑฐ๋ ๊ทธ๋ณด๋ค ๋ ๋์ ๋์์ ๊ตฌํํด์ผ ํ๋ค.
์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์์ ์ ์๋ ๋์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์๊ธฐ์น ์์ ๋์์ ํ์ง ์์์ผ ํ๋ค.
4.ISP(Interface Segregation Principle) - ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
๊ธฐ๋ฅ์ ๋ง๊ฒ ์ ์ชผ๊ฐ๋๊ฒ ์ค์
์ฆ ํ๋์ ํฐ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ ๊ฐ์ ์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๋ ์์น์ ๋๋ค.
5.DIP(Dependency Inversion Principle) - ์์กด ๊ด๊ณ ์ญ์ ์์น
๋งค์ฐ ์ค์!!
์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ ์์กดํ์ง ์๊ณ , ํ์ ๋ชจ๋์ด ์์ ๋ชจ๋์ ์์กดํ์ง ์๋๋ก ํด์ผ ํ๋ค๋ ์์น
์ถ์ํ์ ์์กดํด์ผ์ง ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค
์ด์ ์๋ k3์ ๋ํด ๋ํ ์ผํ๊ฒ ์ ํ์๊ฐ ์๋ค ๊ทธ๋ฅ ์ญํ ๋ง ์๋ฉด๋๋ค
์ฆ ์ญํ ์ด ์ค์ํ๋ค ์ธํฐํ์ด์ค๊ฐ ์ค์ํ๋ค
์ญํ ์ ์์กดํด์ผ ๋๋ค ๊ตฌํ์ ์์กดํ๋ฉด ์๋๋ค.
class LightBulb {
public void turnOn() {
System.out.println("LightBulb turned on");
}
public void turnOff() {
System.out.println("LightBulb turned off");
}
}
class Switch {
private LightBulb bulb;
public Switch(LightBulb bulb) {
this.bulb = bulb;
}
public void operate() {
System.out.println("Switching...");
bulb.turnOn();
}
}
Switch๊ฐ LightBulb์ ์์กดํ๋ค -->DIP ์๋ฐ
interface Switchable {
void turnOn();
void turnOff();
}
class LightBulb implements Switchable {
@Override
public void turnOn() {
System.out.println("LightBulb turned on");
}
@Override
public void turnOff() {
System.out.println("LightBulb turned off");
}
}
class Fan implements Switchable {
@Override
public void turnOn() {
System.out.println("Fan turned on");
}
@Override
public void turnOff() {
System.out.println("Fan turned off");
}
}
class Switch {
private Switchable device;
public Switch(Switchable device) {
this.device = device;
}
public void operate() {
System.out.println("Switching...");
device.turnOn();
}
}
DIP๋ฅผ ์ ์งํจ ์์
๐Why Spring?
์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)
**DI (Dependency Injection)**๋ ๊ฐ์ฒด๋ค์ด ์์ ์ด ํ์ํ ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์์กด์ฑ ์ฃผ์ ์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ค์ ํด์ฃผ๋ ํจํด์ ๋๋ค.
์ฆ, ํด๋์ค๋ ๊ฐ์ฒด๊ฐ **ํ์ํ ์์กด์ฑ(Dependency)**์ ์ง์ ์์ฑํ์ง ์๊ณ , ์ธ๋ถ์์ ์ฃผ์ (Injection) ๋ฐ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ๊ฐ์ฒด๊ฐ ์์ ์ ์์ฑํ๋ ์ฑ ์์ ์ง์ง ์๊ณ , ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ ,
ํ ์คํธ๊ฐ ์ฉ์ดํด์ง๋๋ค.
DI์ ์ฃผ์ ์ด์ :
• ๊ฒฐํฉ๋ ๊ฐ์: ๊ฐ์ฒด๊ฐ ์ง์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์์กด์ฑ์ ๋ช ์ํ์ง ์์ผ๋ฏ๋ก, ๊ฐ ๊ฐ์ฒด์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋๋ค. ์ด๋ ์ ์ง๋ณด์์ ํ์ฅ์ ์ ๋ฆฌํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ญ๋๋ค.
• ์ ์ฐ์ฑ: ์์กด์ฑ์ ๊ต์ฒด๊ฐ ์ฌ์์ง๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ํด๋์ค์ ์์กด์ฑ์ ๊ต์ฒดํ๊ณ ์ ํ ๋, ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ๊ตฌํ์ ์ฃผ์ ๋ง ํ๋ฉด ๋ฉ๋๋ค.
• ํ ์คํธ ์ฉ์ด์ฑ: DI๋ฅผ ์ฌ์ฉํ๋ฉด Mock ๊ฐ์ฒด๋ Stub ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ์ฌ ์ ๋ ํ ์คํธ๋ฅผ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
์ฆ ์๋์ฐจ ๋ถํ ๊ต์ฒดํ๋ฏ์ด ๊ฐ์ฒด ์งํฅ ์์น์ ์ ์งํค๋ฉฐ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์์ฃผ๊ธฐ ๋๋ฌธ์ Spring์ ์ฌ์ฉํ๋ ๊ฒ!
'WINK-(Web & App) > Spring Boot ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[2025 1ํ๊ธฐ ์คํ๋ง๋ถํธ ์คํฐ๋] ์ด์๋ #1์ฃผ์ฐจ (0) | 2025.03.28 |
---|---|
[2025 1ํ๊ธฐ ์คํ๋ง๋ถํธ ์คํฐ๋] ๋จ์ค์ฐฌ #1์ฃผ์ฐจ (0) | 2025.03.25 |
[2025 1ํ๊ธฐ ์คํ๋ง๋ถํธ ์คํฐ๋] ์ฌ๋ฏผํธ #1์ฃผ์ฐจ (0) | 2025.03.25 |
[2025 1ํ๊ธฐ ์คํ๋ง๋ถํธ ์คํฐ๋] ์ฅ๋ฏผ์ฃผ #1์ฃผ์ฐจ (0) | 2025.03.24 |
[2025 ๊ฒจ์ธ๋ฐฉํ ์คํ๋ง ์คํฐ๋] ๊น์ฌ์น #4์ฃผ์ฐจ (0) | 2025.02.04 |