๐ก ํด๋น ๊ธ์ ใ์คํ๋ง ์ ๋ฌธ์ ์ํ ์๋ฐ ๊ฐ์ฒด์งํฅ์ ์๋ฆฌ์ ์ดํดใ ๋์๋ฅผ ํ์ตํ๋ฉฐ ๋์์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ๋ณธ์ธ์ ์ธ์ด๋ก ํํํ ๊ธ์ ๋๋ค.
์ด๋ฒ ์ฅ์ SOILD๋ฒ์น์ ๋ํด ์ค๋ช ํ๋ค. SOILD๋ ์ด๋ฏธ ๊ท์ ๋ฑ์ง๊ฐ ์๊ธฐ๋๋ก ๋ฃ๊ณ ์ฝ์์ผ๋, ์ดํด์ ์์ด ์กฐ๊ธ ์์ฌ์ด ๋ถ๋ถ๊ณผ ๊ฐ๋ ์ ๋ํด ์ ๋ฆฌํ๋ ค ํ๋ค.
โ๏ธ SOLID
๊ฐ์ฒด ์งํฅ์ 4๋ ํน์ฑ, ‘์บก!์์ถ๋ค’๋ฅผ ํ์ตํ๋ค๋ฉด ๊ฐ์ฒด ์งํฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ค๋น๊ฐ ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋๋ก ํ๊ธฐ ์ํด์๋ ๊ท์น์ด ์กด์ฌํ๋ค. ์๋์ ๊ท์น์ ์งํค๋ฉฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๋ฉด ์์ง๋๋ ๋์ด๊ณ , ๊ฒฐํฉ๋๋ ๋ฎ์ถฐ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ณ ํ์ฅ์ ์ฉ์ดํ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ ์ ์์ ๊ฒ์ด๋ค.
SRP
(Single Responsibility Principle): ๋จ์ผ ์ฑ ์์ ์์นOCP
(Open Closed Principle): ๊ฐ๋ฐฉ ํ์ ์์นLSP
(Liskov Substitution Principle): ๋ฆฌ์ค์ฝํ ์นํ ์์นISP
(Interface Segregation Principle): ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์นDIP
(Dependency Inversion Principle): ์์กด ์ญ์ ์์น
โ๏ธ SRP - ๋จ์ผ ์ฑ ์์ ์์น
“์ด๋ค ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๋ ์ค์ง ํ๋๋ฟ์ด์ด์ผ ํ๋ค.” - ๋ก๋ฒํธ C. ๋งํด
“๊ฐ์ฒด๋ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํ๋ค.” ๋ผ๊ณ ์์ฃผ ์ค๋ช ๋๋ ๋จ์ผ ์ฑ ์ ์์น์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ฑ ์์ด ์๋ ํ๋์ ์ฑ ์์ ๊ฐ์ง๊ณ ์์์ผ๋ก์จ, ๋จ์ผํ๊ณ ๋ช ํํ ์ด์ ์ ์ํด ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด ์ฑ ์์ด๋ผ๋ ๊ฒ ์ฐธ ์ ๋งคํ๊ณ ๋ชจํธํ๊ณ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋ค. ํด๋์ค ์ด๋ฆ์ ๋ง๋ ํ๋์ ํ๋๊ฐ๋ก ํ๋จํ๋ค. ๋ง์ฝ ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๋ฉด SRP๋ฅผ ์๋ฐํ๋ ์ฝ๋์ด๋ค.
// SRP๋ฅผ ์๋ฐํ๋ ์์
public class Rport {
private String title;
private String content;
public void generateReport() {
// ๋ณด๊ณ ์ ์์ฑ ๋ก์ง
try (BufferedReader bf = new BufferedReader(new Inputstream // ... ) {
this.title = // ...
this.content = // ...
} catch(IOException ignored) { }
}
public void saveToFile() {
// ํ์ผ์ ์ ์ฅํ๋ ๋ก์ง
try (PrintWriter writer = new PrintWriter(title + ".txt")) {
writer.write(content);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ค. ๋ณด๊ณ ์๋ฅผ ํ์ผ์ ์ ์ฅํ๋ค. ๋ ํ์๋ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค. ๋ณด๊ณ ์๊ฐ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ค๋ ๋ง๋ก ํํํ์ ๋ ์์ฐ์ค๋ฌ์ธ์ง ๋ชจ๋ฅด์ง๋ง, ์ฝ๋๋ก ๋ณธ๋ค๋ฉด ์์ ์ ์์ฑํ๊ธฐ ์ํด ์ธ๋ถ์ ์ ๋ ฅ์ ์์กดํ๊ณ ์๋ ๊ผด์ด๋ค. ํ์ผ์ ์ ์ฅํ๋ ํ์๋ ํ๋์ ์ ์ฅ๋ฐฉ์์ ์์กดํ๊ณ ์๋ ๊ผด์ด๋ค.
๋ด ์๊ฐ์ Report๋ report ์์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ฑ ์๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ ๊ฒ ๊ฐ๊ณ ๋ณํ๊ธฐ ์ฌ์ด ์ธ๋ถ ์ ๋ ฅ ๋ฐฉ์์ ์์กดํ๋ ReportGenerator, ํ์ผ ์ ์ฅ ๋ฐฉ์์ ์์กดํ๋ ReportSaver๋ฅผ ํด๋์ค๋ก ๋ถ๋ฆฌํ ๊ฒ ๊ฐ๋ค.
๋จ์ผ ์ฑ ์์ ์์น์ ์งํค๊ธฐ ์ํด ์ถ์ํ(๋ชจ๋ธ๋ง)์ ์ ํด์ผ ํ๋ค. ๊ณตํต์ ๊ด์ฌ์ฌ์ ๋ง๊ฒ ๊ธฐ๋ฅ์ ์ ๋ฌถ์ด ์ต์ํ์ ๋จ์๋ก ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ง๋ ํด๋์ค๋ก ์ถ์ํํ์.
โ์ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํ ๊น
๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ฑ ์์ ๊ฐ์ง๋ ๊ฒฝ์ฐ ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๊ณ , ์์กด์ฑ์ด ๋์์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ฌ๋ฌ ์ฑ ์์ ๊ฐ์ง๋ค๋ ๊ฒ์ ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ์ฆ, ๋ค๋ฅธ ๊ฐ์ฒด์์ ํ์ํ ๊ธฐ๋ฅ ์ธ์ ๋ถํ์ํ ๊ธฐ๋ฅ๋ค์ ํฌํจํ๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ์๊ณ , ์ฌ์ฌ์ฉํ๊ธฐ ํ๋ค์ด์ง๋ค. ๋๋ ๋ฐฉ ์ฒญ์๋ง ํด์ค ์ฒญ์๋ถ๋ฅผ ๋ถ๋ฅด๊ณ ์ถ์๋ฐ ๋ฐฉ์ฒญ์, ์ธํ ๋ฆฌ์ด, ๊ฑด์ถ๊น์งํ๋ ๊ฐ๋น์ผ ์ธ๋ถ๋ฅผ ๋ถ๋ฅด๊ธฐ ํธํ ๊น?
๋ํ, ์์กด์ฑ์ด ๋์์ง๋ค๊ณ ์๊ฐํ๋ค. ํ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ฑ ์์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ํด๋น ๊ฐ์ฒด์ ์ฑ ์, ํ์๊ฐ ํ์ํ ๋ชจ๋ ๊ฐ์ฒด์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์์กดํ ๊ฒ์ด๋ค. ์ด๋ ์์กด์ฑ์ด ๋์์ง ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์๊ณ , ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๊ฐ๋ ํ๊ธฐ ํ๋ค์ด์ง๋ค.
OCP - ๊ฐ๋ฐฉ ํ์ ์์น
“์ํํธ์จ์ด ์ํฐํฐ(ํด๋์ค, ๋ชจ๋, ํจ์ ๋ฑ)์ ํ์ฅ์ ๋ํด์๋ ์ด๋ ค ์์ด์ผ ํ์ง๋ง ๋ณ๊ฒฝ์ ๋ํด์๋ ๋ซํ ์์ด์ผ ํ๋ค. “ - ๋ก๋ฒํธ C. ๋งํด
๋์์์๋ ์๋์ ๊ฐ์ด ๋งํ๋ค.
“์์ ์ ํ์ฅ์๋ ์ด๋ ค ์๊ณ , ์ฃผ๋ณ์ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.” - ์๋ฐ ๊ฐ์ฒด ์งํฅ์ ์๋ฆฌ์ ์ดํด
๋๋ ๋ ์ฝ๊ฒ ํ์ด์ ๋งํด์ผ ์ดํด๊ฐ ๋๊ธฐ์ ์ด๋ ๊ฒ ์ ์ํด ๋ณด์๋ค.
“์์ ์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๊ฒ์ ํธ๋ฆฌํด์ผ ํ๊ณ , ์ฃผ๋ณ์ ๋ณ๊ฒฝ์ ์ํ ์ํฅ์ ์ต์ํ ํ๋ค.” - ์ ํ์
์์ ์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค๋ ๊ฑด ๋ฌด์จ ์๋ฏธ์ผ๊น? ๊ตฌ์ฒด ํด๋์ค์์ ์์กด์ ํผํ๊ณ ํ์ฅ์ ์ฉ์ดํ ์ถ์์ ์ธ ๊ฐ๋ ๊ณผ ์์กดํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํ๋ค.
๋ง์ฝ ๋ด๊ฐ ์ฐจ๋ฅผ ์ด์ ํ๋ ๊ธฐ๋ฅ์ด ๊ตฌ์ฒด์ ์ธ ๋งํฐ์ฆ์ ์์กดํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ด๋ฅผ ํ์ฅํ๋ ค๋ฉด ๋งํฐ์ฆ์ ๋์ผํ ์์ ๋ฒจํธ, ์ก์ , ๋ธ๋ ์ดํฌ, ์๋๊ธฐ์ด … ๋ฅผ ๊ฐ์ง ๋งํฐ์ฆ์ ์๋ธํด๋์ค๋ง ํ์ฅํ ์ ์์ ๊ฒ์ด๋ค. ๊ทผ๋ฐ ๋ง์ฝ ์คํ ๊ธฐ์ด๋ก๋ ์๋ํ๋ฅผ ๋ชฐ๊ณ ์ถ๋ค๋ฉด? ์๋ํ์ ์์กดํ๋ ์ด์ ๊ธฐ๋ฅ์ ๋ ๋ง๋ค์ด์ผ ํ ๊น?
public class ์ ํ์ {
public void drive๋งํฐ์ฆ(๋งํฐ์ฆ ๋งํฐ์ฆ1) {
๋งํฐ์ฆ1.์๋๊ฑธ๊ธฐ();
๋งํฐ์ฆ1.์๋๊ธฐ์ด์กฐ์();
}
public void drive์๋ํ(์๋ํ ์๋ํ1) {
// ์ด๋ ๊ฒ??
}
}
์ถ์์ ์ธ ๊ฐ๋ ์ ์์กดํ๋ฉด ํ์ฅ์ ์ฉ์ดํ๋ค. ๋งํฐ์ฆ, ์๋ํ๊ฐ ์๋ ์๋์ฐจ๋ผ๋ ๊ฐ๋ ์ ์์กดํ๋ ๊ฒ์ด๋ค.
public interface Driveable {
public void ์ด์ ํ๊ธฐ();
}
public class ์ ํ์ {
public void drive(Driveable ์ด์ ๊ฐ๋ฅํ๊ฒ) {
์ด์ ๊ฐ๋ฅํ๊ฒ.์ด์ ํ๊ธฐ();
}
}
์ด๋ ๊ฒ ์ถ์ํ ์ํค๋ค ๋ณด๋ฉด ์ด์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ drive๋ผ๋ ํ์ ํ๋๋ก ํ์น ์ ์๋ค.
๋ํ ์ธ๋ถ ๋ณ๊ฒฝ์ ์ํ ์ํฅ์ ์ต์ํ ํ๋ค. ๋งํฐ์ฆ์ ์๋๊ธฐ์ด์กฐ์์ด ์คํ ๊ธฐ์ด๋ก ๋ณ๊ฒฝ๋๋ค๋ฉด? ์ ํ์ ๋ํ ์คํ ๊ธฐ์ด์กฐ์์ ๋ฐฐ์ฐ๊ณ ์ด์ ํ๋ ํ์๋ฅผ ์์ ํด์ผ ํ๋ค. ํ์ง๋ง ์ถ์ํ๋ ๊ฐ๋ ๊ณผ ์์กดํ๋ค๋ฉด ๊ทธ๋ฐ๊ฑฐ ๋ชฐ๋ผ๋ ์๊ด์๋ค.
๋์์์๋ ์๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์์๋ฅผ ๋ค์์ผ๋ฉฐ ์ด๋ ๊ฒ ๋งํ๋ค.
“์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๊ณ ํ๋ ์ฃผ๋ณ์ ๋ณํ์ ๋ซํ ์๋ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ต์ฒดํ๋ค๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ ์ ํ์ฅ์๋ ์ด๋ ค ์๋ค๋ ๊ฒ์ด๋ค.” - ์๋ฐ ๊ฐ์ฒด ์งํฅ์ ์๋ฆฌ์ ์ดํด
โ๏ธ LSP - ๋ฆฌ์ค์ฝํ ์นํ ์์น
“์๋ธํ์ ์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค” - ๋ก๋ฒํธ C. ๋งํด
๋น์ฐํ ๋ง์ด๋ค. ์ด๊ฒ ๋ถ๊ฐ๋ฅํ๋ฉด ์ถ์ํ์ ์์์์ ๋คํ์ฑ์ ์งํฌ ์ ์๋ค. ๊ทธ๋ผ ์ถ์ํ์ ์์์ด ๋ฌด์จ ์๋ฏธ๊ฐ ์๊ฒ ๋๊ฐ. ํ์ํ์ ์ ์ธ์ ๋ ์์ํ์ ์ผ๋ก ๋์ ํ ์ ์์ด์ผํ๊ณ , ์์ํ์ ์ ์ญํ ์ ์ํํ๋ ๋ฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค.
โ๏ธ ISP - ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
“ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค.” - ๋ก๋ฒํธ C. ๋งํด
๋ด๊ฐ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋๋ฅผ ํฌํจํ ํด๋์ค์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ๊ด์ฌ์ฌ์ ๋ง๊ฒ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ์ฌ ๊ผญ ํ์ํ ๋ฉ์๋๋ง์ ํฌํจํ ์ธํฐํ์ด์ค์ ์์กดํ๋ผ๋ ๊ฒ์ด๋ค.
์์์ ํ๋ ๋ฐฉ์ฒญ์ ์๊ธฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ฉด ์๋์ ๊ฐ๋ค.
public class ์ ํ์ {
public void ๋ฐฉ์ฒญ์(๋ฐฉ์ฒญ์๊ฐ๋ฅํ ์ธ๋ถ) {
์ธ๋ถ.๋ฐฉ์ฒญ์();
}
public void ์ธํ
๋ฆฌ์ด๋ณ๊ฒฝ(์ธํ
๋ฆฌ์ด๋ณ๊ฒฝ๊ฐ๋ฅํ ์ธ๋ถ) {
์ธ๋ถ.์ธํ
๋ฆฌ์ด๋ณ๊ฒฝ();
}
}
๋ ๋ฉ์๋์ ๋ฐํ์ ์ ์์กดํ๋ ์ค์ฒด๋ ๋์ผํ ์ธ๋ถ์ผ ์ ์๋ค. ํ ์ธ๋ถ๊ฐ ๋ฐฉ์ฒญ์๋ ๊ฐ๋ฅํ๊ณ ์ธํ ๋ฆฌ์ด ๋ณ๊ฒฝ๋ ๊ฐ๋ฅํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ๋ฐฉ์ฒญ์ ๋ฉ์๋์์๋ ๋์์ ํ์ํ ๋ฐฉ์ฒญ์ ๋ฉ์๋๋ง์ ๊ฐ์ง ์ธํฐํ์ด์ค์ ์์กดํ๋ฉฐ ๋ฉ์๋๋ฅผ ํ์ฅ์ ์ด๋ ค์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
๋์์์๋ ์ด๋ ๊ฒ ๋งํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก SRP์ ISP๋ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๋ ๊ฐ์ง ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ํ๋ก์ ํธ ์๊ตฌ์ฌํญ๊ณผ ์ค๊ณ์์ ์ทจํฅ์ ๋ฐ๋ผ ๋จ์ผ ์ฑ ์ ์์น์ด๋ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น ์ค ํ๋๋ฅผ ์ ํํด์ ์ค๊ณํ ์ ์๋ค.
์ฆ, ํ๋์ ํด๋์ค๋ฅผ ๋จ์ผ ์ฑ ์์ ๊ฐ์ง๋ ์ฌ๋ฌ ํด๋์ค๋ก ๋ถ๋ฆฌํ๋๊ฐ, ํ๋์ ํด๋์ค๋ฅผ ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํํ๋ก ๋ณ๊ฒฝํ๋๊ฐ์ ์ฐจ์ด์ธ ๊ฒ ๊ฐ๋ค.
โ์์ ํด๋์ค๋ ํ์ฑํ ์๋ก ์ข๊ณ , ์ธํฐํ์ด์ค๋ ์์์๋ก ์ข๋ค?
์์ ํด๋์ค๊ฐ ํ์ฑํ๋ค๋ฉด ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค ํ์ ์ผ๋ก ์ ์ธ๋์์ ๋, ์ํํ ์ ์๋ ํ์๊ฐ ๋ง์์ง ๊ฒ์ด๋ค. ๋ฐ๋ผ์ SRP๋ฅผ ๊ณ ๋ คํ๋ฉฐ, ์ค๋ณต๋๋ ํ์, ์ํ๋ฅผ ์ต๋ํ ์ถ์ํ ์์ผ์ผ ํ๋ค.
์ธํฐํ์ด์ค๊ฐ ์๋ค๋ฉด, ์์กด์ฑ์ ๋ฎ์์ง๊ณ , ์ฌ์ฌ์ฉ์ฑ์ ๋์์ง๋ค. ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ ์์ด ๊ผญ ํ์ํ ๋ฉ์๋๋ง์ ๊ฐ์ง ์ธํฐํ์ด์ค์ ์์กดํ๋ฉฐ ์์กด์ฑ์ ๋ฎ์ถ ์ ์๋ค.
โ๏ธ DIP - ์์กด ์ญ์ ์์น
“๊ณ ์ฐจ์ ๋ชจ๋์ ์ ์ฐจ์ ๋ชจ๋์ ์์กดํ๋ฉด ์ ๋๋ค. ์ด ๋ ๋ชจ๋ ๋ชจ๋ ๋ค๋ฅธ ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค. ์ถ์ํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์กดํ๋ฉด ์ ๋๋ค. ๊ตฌ์ฒด์ ์ธ ๊ฒ์ด ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํ๋ค. ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ตฌ์ฒด ํด๋์ค์ ์์กดํ์ง ๋ง๋ผ” - ๋ก๋ฒํธ C. ๋งํด
๊ตฌ์ฒด ํด๋์ค๋ผ๋ฆฌ ์์กดํ์ง ๋ง๊ณ , ์ถ์ํ๋ ํด๋์ค, ์ธํฐํ์ด์ค์ ์์กดํ๋ ๊ฒ์ด ๋ณ๊ฒฝ์ ์์ ํ๋ค ๋ผ๋ ๊ฒ์ด๋ค.
์ด ๊ฐ๋ ์ ์งํจ๋ค๋ฉด ๊ฒฐ๊ตญ OCP๋ฅผ ์งํค๊ฒ ๋๋ค.
โ๏ธ ๋ณต์ตํ ๋ค SOLID์ ๋ํ ๋์ ์๊ฐ
๊ฒฐ๊ตญ ๋ชจ๋ ์์น์ ํ๋์ ๊ฐ๋ ์ผ๋ก ํต๋ ๋๋ ๊ฒ ๊ฐ๋ค.
๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ถ์ํ์ํค๊ณ ์ถ์ํ๋ ๊ฒ๊ณผ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ด ๋ณ๊ฒฝ์ ์ ์ฐํ๊ณ , ํ์ฅ์ ์ฉ์ดํ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ์. ์ฌ๊ธฐ์ SRP๋ฅผ ์ ์ฉํ์ฌ ํด๋์ค๋ก ๋ถ๋ฆฌํ ์ง ISP๋ฅผ ์ ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ ์ง๋ ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ค.
์ฆ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ด๋ค. ํด๋ผ์ด์ธํธ๋ ์ญํ ๊ณผ ์์กดํ๋ฉฐ ์ฌ๋ฌ ๊ตฌํ์ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ๋๋ค. ์ด๋ฐ ๊ตฌ์กฐ์ ํ๊ณ๋ ์ญํ ์์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ์ฝ๋์ ๋๋์ ์ธ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ค๊ณ ์ด๊ธฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค.
'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋์์ธ ํจํด - Proxy, Decolator (0) | 2024.01.19 |
---|---|
๋์์ธ ํจํด - Adapter (0) | 2024.01.19 |
BigDecimal ์์ฑ, ๋น๊ต์ ์ ์์ฌํญ (0) | 2024.01.17 |
๋ฐ๋ชฌ ์ค๋ ๋ (Daemon Thread) (2) | 2024.01.01 |
GC ์ง๊ณ ๋์ด๊ฐ๊ธฐ (1) | 2023.12.29 |