๊ฐ์ฒด ์งํฅ ์์น ์ค๊ณ์ 5์์น์
1. SRP : ๋จ์ผ ์ฑ ์ ์์น
2. OCP : ๊ฐ๋ฐฉ ํ์ ์์น
3. LSP : ๋ฆฌ์ค์ฝํ ์นํ ์์น
4. ISP : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
5. DIP : ์์กด ์ญ์ ์์น
์ด ์๋ค.
๊ทธ ์ค ์ฒซ๋ฒ์งธ ์์น, SRP์ ๋ํด ์์๋ณด๊ฒ ๋ค.
๋จ์ผ์ฑ ์์์น (SRP : SingleResponsibilityPrinciple)
ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๊ฐ ๋จ ํ๊ฐ์ง ์ฌ์ผ ํ๋ค.
๋จ์ผ ์ฑ ์ ์์น์ SRP, Single Responsibility Principle ์ฆ, ๋จ์ผ ์ฑ ์์์น์ด๋ค.
๊ฐ์ฒด์งํฅ์์ ์ง์ผ์ผ ํ ์์น ์ค ํ๋์ด๋ฉฐ, ํ๋์ ํด๋์ค๊ฐ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ๋ผ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ธ๋ป ๋ณด๋ฉด ํ๋์ ํด๋์ค๊ฐ ํ๋์ ์ญํ ๋ง์ ํด์ผ ํ๋ค ๋ผ๋ ๋ป์ผ๋ก ์คํดํ ์ ์๋ค.
์ด๋ฐ ์๋ฏธ๊ฐ ์๋๋ผ ํ๋์ ํด๋์ค๊ฐ ํ๋์ ์กํฐ! ํ ๊ธฐ๋ฅ๋ง์ ๋ด๋นํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
-> ์ฌ๊ธฐ์ ์กํฐ๋ ํด๋์ค๋ฅผ ๋ณํ์ํฌ ์ ์๋ ์ฃผ์ฒด๋ฅผ ๋งํ๋ค.
```
์ฆ, ๋ฉ์๋์ ๊ฐ์๊ฐ ์ฑ
์์ ๊ฐ์๊ฐ ์๋๋ผ
ํ๋์ ๋ชจ๋์ ํ๋์ ์ผ๋ง ํด์ผ ํ๋ค๋ ์๋ฏธ๋ค!
```
SRP๋ฅผ ์๋ฐํ ์ฝ๋
pulic class Employee {
private String name;
private String position;
public Employee (name, position) {
this.name = name;
this.position = position;
}
void calculateExtraHour() { }
void calculatePay() { //๊ธ์ฌ ๊ณ์ฐ ๋ฉ์๋
calculateExtraHour();
}
void reportHours() { //๊ทผ๋ฌด ์๊ฐ ๊ณ์ฐ ๋ฉ์๋
calculateExtraHour();
}
void save() { } //๋ณ๊ฒฝ๋ ์ ๋ณด DB์ ์ ์ฅํ๋ ๋ฉ์๋
}
์์์ ๋ฉ์๋๊ฐ ์ธ๊ฐ ์๋ค
1. calculatePay() ๋ ํ๊ณํ์์ ์ฌ์ฉํ๋ ๊ธ์ฌ๋ฅผ ๊ณ์ฐํ๋ ๋ฉ์๋
2. reportHours() ๋ ์ธ์ฌํ์์ ๊ทผ๋ฌด์๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํ ๋ฉ์๋
3. save() ๋ ๊ธฐ์ ํ์์ ๋ณ๊ฒฝ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ์๋
์ฆ, Employee ํด๋์ค์์๋ 3๊ฐ์ ์กํฐ๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ Facade Pattern ์ด ์๋ค.
Facade Pattern (ํผ์ฌ๋ ํจํด)
Facade ๋ ๊ฑด๋ฌผ์ ์ ๋ฉด์ ๋ปํ๋ค.
์ฆ, Facade Pattern ์ ๋ง ๊ทธ๋๋ก ๊ฑด๋ฌผ์ ๋ท๋ถ๋ถ์ ๋ณด์ฌ์ฃผ์ง ์๊ณ , ์ ๋ฉด๋ง ๋ณด์ฌ์ฃผ๋ ํจํด์ด๋ผ๋ ๊ฒ์ด๋ค.
์ด์ ์ ์ฝ๋์ ์ด ํจํด์ ์ ์ฉ์์ผ ๋ณด์
public class EmployeeFacade {
private String name;
private String position;
public EmployeeFacade (name, position) {
this.name = name;
this.position = position;
}
PayCalculator calculatePay() {
return new PayCalculator().calculatePay();
}
HourReporter reportHours() {
return new HourReporter().reportHours();
}
EmployeeSaver save() {
return new EmployeeSaver().save();
}
}
public class PayCalculator {
calculateExtraHour() {}
calculatePay() {
calculateExtraHour();
}
}
public class HourReporter{
calculateExtraHour() {}
reportHours() {
calculateExtraHour();
}
}
publlic class EmployeeSaver{
save(){}
}
์ด๋ ๊ฒ ๋ถ๋ฆฌํ๊ฒ ๋๋ฉด EmployeeFacade ํด๋์ค์์๋ ๋ก์ง์ด ๊ตฌํ๋์ง ์๋๋ค.
๋จ์ง ๊ฐ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ์ญํ ๋ง ํ๊ฒ ๋๋ค.
์ฆ, ๋ฉ์๋์ ๊ตฌํ์ด ์ด๋ป๊ฒ ๋์ด์๋์ง ๊ฑด๋ฌผ์ ๋ท๋ถ๋ถ์ ๋ณด์ฌ์ฃผ์ง ์๊ณ
์ด๋ค ๋ฉ์๋๊ฐ ์๋์ง ๊ฑด๋ฌผ์ ์ ๋ฉด๋ง์ ๋ณด์ฌ์ฃผ๋ฉฐ
๊ฐ ๋ฉ์๋์ ๊ตฌํ์ ๊ฐ ํด๋์ค์ ์์ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ตฌํํ๊ฒ ๋๋ฉด ๋ณ๊ฒฝ์ฌํญ์ด๋ ์ค๋ฅ๊ฐ ์๊ฒผ์ ๋
๊ทธ ๊ธฐ๋ฅ์ ๊ตฌํ ํด๋์ค๋ก ๊ฐ ๋ณ๊ฒฝํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ EmployeeFacade ํด๋์ค๋ ๋ณ๊ฒฝ์ด ์๊ธฐ์ง ์๊ฒ ๋๋ค.
๋ค๋ฅธ ํด๋์ค์ ์ ํ ์ํฅ์ ์ฃผ์ง ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๋จ์ผ ์ฑ ์ ์์น์ ํ๋์ ํด๋์ค๊ฐ ํ๋์ ์ํฐ๋ง์ ๋ด๋นํด์ผ ํ๋ค!
๋จ์ผ ์ฑ ์ ์์น์ ์ฌ์ฉํด์ผ ํ๋ ์ด์
1. ํน์ ๊ธฐ๋ฅ์ ์์ ํ ๋ ํ๋์ ํด๋์ค๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ํธ๋ฆฌํ๋ค.
2. ๊ธฐ๋ฅ ์์ ์ ๋ฐ์ํ ์ ์๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ค์ผ ์ ์๋ค.
3. ๋จ์ผ ํด๋์ค์ ๊ธฐ๋ฅ์ด ์ ์ด์ ธ ์ข ์์ฑ์ด ์ค์ด๋ ๋ค.
4. ์๊ณ ์ ์กฐ์ง๋ ํด๋์ค๋ ๊ฒ์๊ณผ ์ดํด๊ฐ ์ฝ๋ค.
5. ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ตฌํ ๋ฐ ์ดํด๊ฐ ์ฝ๋ค.
ํ์ง๋ง, ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๊ธฐ์กด ์ฝ๋๋ณด๋ค ๊ธธ์ด์ง์์๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์์ด
SRP๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ํ๊ณ๊ฐ ์กด์ฌํ ๊ฒ์ด๋ค.
์ด๋์๋ ์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ง๋ณด์์ ์๋ฏธ ํ์ ์ธก๋ฉด์์ ๋ ์ ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์
์ค๊ณ ์ ์ ๊ณ ๋ คํด์ ์ค๊ณํด์ฃผ์ด์ผ ํ๋ค.
'๐ฉ๐ปโ๐ป Developer > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ "๋ณ๋ ฌ ์คํธ๋ฆผ" (1) | 2024.05.01 |
---|---|
[Java] hashCode()์ equals()๋? (0) | 2024.03.31 |
[Java] '๊น์ ๋ณต์ฌ'์ '์์ ๋ณต์ฌ'๋? (0) | 2024.03.30 |
[Java] Java8, Java11, Java17์ ์ฐจ์ด ๋ฐ ๊ธฐ๋ฅ (0) | 2024.03.22 |
๋๊ธ