- ๋จ์ผ ์ฑ ์ ์์น(SRP; Single Responsibility Principle)
- ๊ฐ๋ฐฉ ํ์ ์์น(OCP; Open-Closed Principle)
- ๋ฆฌ์ค์ฝํ ์นํ ์์น(LSP; Liskov Substitution Principle)
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(ISP; Interface Segregation Principle)
- ์์กด์ฑ ์ญ์ ์์น(DIP; Dependency Inversion Principle)
๊ฐ ์์น์ ๊ฐ์ฒด์งํฅ ์ธ์ด์์ ์ข์ ์ค๊ณ๋ฅผ ์ป๊ธฐ ์ํด ์ง์ผ์ผ ํ ๊ท๋ฒ์ด๋ค. ์ํํธ์จ์ด์ ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ์ ๋์ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค.
์ฝ๋ ์ ์ง๋ณด์์ฑ์ ํ๋จํ ๋ ์ฌ์ฉํ ์ ์๋ ์ค๋ฌด์ ์ธ ์ธ ๊ฐ์ง ๋งฅ๋ฝ์ด ์๋ค.
- ์ํฅ ๋ฒ์: ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ํฅ ๋ฒ์๊ฐ ์ด๋ค์ง
- ์์กด์ฑ: ์ํํธ์จ์ด์ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ์ ๋๋ก ์ด๋ค์ง๋์ง
- ํ์ฅ์ฑ: ์ฝ๊ฒ ํ์ฅ์ด ๊ฐ๋ฅํ์ง
SOLID๋ ์ด๋ฌํ ์ง๋ฌธ์ ๋ต์ ์๋ ค์ฃผ๋ ์์น์ด๋ค!
4.1 SOLID ์๊ฐ
๋จ์ผ ์ฑ ์ ์์น
๐ก ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ์ด์ ๋ ๋จ ํ๋์ฌ์ผ ํ๋ค.
๋จ์ผ ์ฑ ์ ์์น์ ํด๋์ค์ ํ๋์ ์ฑ ์๋ง ํ ๋นํ์ฌ ๋ณ๊ฒฝ ๋ฒ์ ๋ฐ ์ํฅ์ ์ต์ํ ํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ํ๋์ ํด๋์ค๊ฐ ๋๋ฌด ๋ง์ ์ฑ ์์ ๊ฐ์ง๊ณ ์์ด ์ฌ๊ธฐ์ ๊ธฐ์ ํด๋น ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฐ ์์ค์ ํด๋น ํด๋์ค์ ์ด๋ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ฉด ๋ณ๊ฒฝํ๋ ค๋ ์ฝ๋๊ฐ ์ด๋๊น์ง ์ํฅ์ ์ค์ง ๊ฐ๋ ํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค. ์ด๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ๋ ๋ณ๊ฒฝ ์์ฒด๊ฐ ์ด๋ ค์์ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฒ ๋๋ค. ๊ทธ๋์ ๊ณผํ๊ฒ ์ง์ค๋ ์ฑ ์์ ํผํ๊ณ ๋ถํ ํด์ผ ํ๋ค.
ํ๋์ ์ฑ ์์ ๊ฐ์ง๋ฉด ์ฝ๋ ์ดํด๋ ์ฌ์์ง๊ณ , ์ฝ๋ ๋ณ๊ฒฝ์ ์ํฅ๋ ์์ธกํ ์ ์์ผ๋ฉฐ ์ฝ๋ ๋ณ๊ฒฝ ๋ฒ์๋ ์ข์์ง๋ค. ์ฆ, ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ํฅ ๋ฒ์๋ฅผ ์ต์ํํ ์ ์๊ฒ ๋๋ค.
๋จ์ผ ์ฑ ์์์์ ์ฑ ์์ด๋? - ์กํฐ(Actor)์ ๋ํ ์ฑ ์
์ํฉ๊ณผ ์ด๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ธ์ ๋ฐ๋ผ ์ฑ ์์ ๋ชจํธํ๋ค. ๊ทธ๋์ ์ฑ ์์ ์ค๋ช ํ๊ธฐ ์ํ “์กํฐ(Actor)”๋ผ๋ ๊ฐ๋ ์ ๋ฑ์ฅ
“ํ๋์ ๋ชจ๋์ ํ๋์, ์ค์ง ํ๋์ ์กํฐ์ ๋ํด์๋ง ์ฑ ์์ ธ์ผ ํ๋ค.”
์ฑ ์์ด ๋ฌด์์ธ์ง๋ณด๋ค๋ ์กํฐ์ ์ง์คํ์. ์ฆ, ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ฃผ์ฒด๊ฐ ํ๋์ธ์ง ๋ ์ด์์ธ์ง๋ฅผ ๋ณด๊ณ ๋จ์ผ ์ฑ ์์ธ์ง๋ฅผ ํ๋จํ ์ ์๋ค.
ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ์ด์ ๋ ์ ์ผํ ์กํฐ์ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋ ๋๋ก ์ ํ๋์ด์ผ ํ๋ค.
๊ฐ๋ฐฉ ํ์ ์์น
๐ก ํด๋์ค์ ๋์์ ์์ ํ์ง ์๊ณ ํ์ฅํ ์ ์์ด์ผ ํ๋ค.
“ํ์ฅ์๋ ์ด๋ ค ์๊ณ ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค.”๋ผ๊ณ ๋งํ๊ธฐ๋ ํ๋ค. ๊ธฐ์กด ์ฝ๋์ ๋ณ๊ฒฝ์์ด ํ์ฅ์ด ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋๋ ๊ฒ์ด๋ค.
ํ๋ง๋๋ก ๊ตฌํ์ ์์กดํ์ง ๋ง๊ณ ์ญํ ์ ์์กดํ๋ฉด ํด๋น ์ญํ ์ ํ ์ ์๋ ๊ตฌํ์ฒด๋ง ๋ฐ๊พธ์ด ๊ธฐ์กด ์ฝ๋์ ๋ณ๊ฒฝ์์ด(๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ์ฝ๋ ๋ณ๊ฒฝ์ ์ด์ฉ ์ ์์) ํ์ฅ์ด ๊ฐ๋ฅํด์ง๋ค.
๋ฆฌ์ค์ฝํ ์นํ ์์น
๐ก ํ์ ํด๋์ค๋ ์์ ํด๋์ค๋ฅผ ๋์ฒดํ ์ ์์ด์ผ ํ๋ค.
@Getter
@Setter
@AllArgsConstructor
class Rectangle {
protected long width;
protected long height;
public long calculateArea() {
return width * height;
}
}
class Square extends Rectangle {
public Square(long length) {
super(length, length);
}
}
Rectangle rectangle = new Square(10);
rectangle.setHeight(5);
System.out.println(rectangle.calculateArea()); // 50 ์ถ๋ ฅ
ํด๋น ์์ ๋ ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์งํค์ง ๋ชปํ๊ณ ์๋ค. ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ๋ชจ๋ ๋์์ ๋์ฒดํ ์ ์์ด์ผ ํ๋ค!
์์ ํด๋์ค์ ํ ๋น๋ ์๋ ํ์ ์ด ์ค์ํ๋ค. ์ด๋ฅผ ํตํด ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ์๋๋๋ก ๋์ํ๋๋ก ์ ์ง์ผ์ผํ๋ค. ๊ทธ๋ฌ๋ ์์ ํด๋์ค์ ๊ฒฝ์ฐ ๋ชจ๋ ๋์์ ๋์ฒดํ ์๋ ์๋ค. setter ์์ฒด๊ฐ ์๋ํ๋๋ก ๋์ํ์ง ์๊ฒ ๋ง๋๋ ์ฃผ๋ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. (Setter๋ฅผ ์ง์ฐ๋ ๋ฐฉ๋ฒ์ด ์์ ์ ์๋ค.)
์์ ํด๋์ค์ ์๋ ํ์ - ํ ์คํธ ์ฝ๋ ํ์ธ
์ด๋ฌํ ์๋๋ฅผ ํ์ ํ๊ธฐ ์ํด์ ์ง์ ๋ฌผ์ด๋ณผ ์ ์์ง๋ง, ์์ ํด๋์ค ์์ฑ์๊ฐ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ด๋ฅผ ํตํด ํ์ ํ๋ ๊ฒ์ด ์ด์์ ์ด๋ค.
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
๐ก ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง ์์์ผ ํ๋ค.
์ด๋ค ํด๋์ค๊ฐ ์์ ์๊ฒ ํ์ํ์ง ์์ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ๊ตฌํ, ์์กดํ์ง ์์์ผ ํ๋ค๋ ๋ง์ด๋ค. ์ฆ, ์๋ฐ์ ์ธํฐํ์ด์ค(interface)๋ฅผ ์๋ฏธํ๊ธฐ๋ ํ์ง๋ง ์ข ๋ ๋์ ๋ฒ์์์ ์ผ๋ฐ์ ์ธ ์๋ฏธ์ ‘์ธํฐํ์ด์ค’๋ฅผ ๋ปํ๋ ๋ง์ด๋ค.
์ด ์์น์ ๋จ์ผ ์ฑ ์ ์์น๊ณผ๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ์ด ์๋ค. ์๋ํ๋ฉด ์ธํฐํ์ด์ค์ ์ฑ ์์ด ๋๋ฌด ๋ง์์๋ก ํด๋์ค๊ฐ ํ์ํ์ง ์์ ๋ฉ์๋๋ฅผ ๊ตฌํํ ํ๋ฅ ์ด ๋์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
ํตํฉ๋ ์ธํฐํ์ด์ค๋ณด๋ค ์ธ๋ถํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ - ๋น์ทํ ์ธํฐํ์ด์ค๋ฅผ ํ๋๋ก ํตํฉํด์ ๊ด๋ฆฌํด์๋ ์ ๋๋ค.
์ด๋ฌํ ํ๋์ด ์์ง๋๋ฅผ ๋์ด๋ ๊ฒ ๊ฐ์ง๋ง ๋ฐ๋์ ์์ง๋๊ฐ ๋์์ง๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง์ง๋ ์๋๋ค. ์์ง๋์ ์ข ๋ฅ๊ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ธฐ๋ฅ์ ์์ง๋: ์ญํ ๊ณผ ์ฑ ์ ์ธก๋ฉด์์ ๋ฐ๋ผ๋ณด๋ ์์ง๋
- ์์ฐจ์ ์์ง๋: ํน์ ์์ ์ ์ํํ๊ธฐ ์ํด ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์์ง๋
- ํต์ ์ ์์ง๋: ๋ชจ๋ ๋ด ์ปดํฌ๋ํธ๋ค์ด ๊ฐ์ ๋ฐ์ดํฐ, ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ณ ์ํธ ์์ฉํ ๋ ์ด์ ๋ฐ๋ผ ๋ชจ๋์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ์ ์์ง๋
- ์ ์ฐจ์ ์์ง๋: ๋จ๊ณ๋ณ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ ๋์ํ๋๋ก ์ค๊ณ๋ ๊ฒฝ์ฐ์ ์์ง๋
- ๋ ผ๋ฆฌ์ ์์ง๋: ๊ฐ์ ๋ชฉ์ ๋ฌ์ฑ์ ์ํด ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ์ ์์ง๋
ํ์ง๋ง, ๋ฌด์กฐ๊ฑด ์ธ๋ถํ ํ๋ ๊ฒ๋ ์ข์ ๊ฒ์ ์๋๋ฏ๋ก ์ ์ธ์ง์ ์ํด์ผ ํ๋ค.
์์กด์ฑ ์ญ์ ์์น
๐ก๊ตฌ์ฒดํ๊ฐ ์๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- ์์ ๋ชจ๋์ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- ์์ ๋ชจ๋์ด ํ์ ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ค.
- ํ์ ๋ชจ๋์ ์ถ์ํ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
4.2 ์์กด์ฑ
- ์์กด: ๋ค๋ฅธ ๊ฐ์ฒด๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ํ
์ฆ, ์ฌ์ฉํ๊ธฐ๋ง ํด๋ ์์กดํ๋ ๊ฒ์ด๋ค. ์์กด์ ๋ ๋ค๋ฅธ ํํ์ผ๋ก๋ ๊ฒฐํฉ์ด๋ผ๊ณ ํ๋ค. ๊ฒฐํฉ์ด ์ผ๋ง๋ ๊ฐํ๊ฒ ๋์ด ์๋๋์ ๋ฐ๋ผ ‘๊ฒฐํฉ๋’๋ก ํ๊ฐํ ์ ์๋ค. ์ด๋ฌํ ๊ฒฐํฉ๋๊ฐ ์ฝํ ์๋ก ์ข๋ค.
์์กด์ฑ ์ฃผ์ - ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ
ํ์ํ ์์กด์ฑ์ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
class HamburgerChef {
public Food make() {
Bread bread = new WheatBread();
Meat meat = new Beef();
Vegetable vegetable = new Lettuce();
Sauce sauce = new TomatoSauce();
return Hamburger.builder()
.bread(bread)
.meat(meat)
.vegetable(vegetable)
.sauce(sauce)
.build();
}
}
์์ ์์ ์์ ํ๋ฒ๊ฑฐ ์ ฐํ๋ ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ๋ณธ์ธ์ด ์์ฑํด์ ์ฌ์ฉํ๋ค. ์ด๋ฌ๋ฉด Bread, Meat, Vegetable, Sauce ์ธํฐํ์ด์ค ๋ฟ๋ง ์๋๋ผ WheatBread, Beef, Lettuce, TomatoSauce ๊ตฌํ์ฒด๊น์ง ์์กดํ๋ค. ์ฌ์ง์ด๋ Hamburger์ Food๊น์ง ์์กดํ์ฌ ์ด 10๊ฐ์ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค์ ์์กดํ๋ ๊ฒ์ด๋ค.
// ๋งค๊ฐ๋ณ์ ์ฃผ์
class HamburgerChef {
public Food make(
Bread bread,
Meat meat,
Vegetable vegetable,
Sauce sauce) {
return Hamburger.builder()
.bread(bread)
.meat(meat)
.vegetable(vegetable)
.sauce(sauce)
.build();
}
}
// ์์ฑ์ ์ฃผ์
class HamburgerChef {
private Bread bread;
private Meat meat;
private Vegetable vegetable;
private Sauce sauce;
public HamburgerChef(
Bread bread,
Meat meat,
Vegetable vegetable,
Sauce sauce) {
this.bread = bread;
this.meat = meat;
this.vegetable = vegetable;
this.sauce = sauce;
}
public Food make() {
return Hamburger.builder()
.bread(bread)
.meat(meat)
.vegetable(vegetable)
.sauce(sauce)
.build();
}
}
// ์์ ์ ์ฃผ์
@Setter
class HamburgerChef {
private Bread bread;
private Meat meat;
private Vegetable vegetable;
private Sauce sauce;
public Food make() {
return Hamburger.builder()
.bread(bread)
.meat(meat)
.vegetable(vegetable)
.sauce(sauce)
.build();
}
}
์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ธ๋ถ์์ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ๋ฐ๋ ๊ฒ์ ‘์์กด์ฑ ์ฃผ์ ’์ด๋ผ๊ณ ํ๋ฉฐ ์ด๋ฅผ ํตํด ๊ตฌํ์ฒด์ ๋ํ ์์กด์ฑ์ ์ ๊ฑฐํ ์ ์๋ค.
new ์ฐ์ฐ์ ์ฌ์ฉ์ ์์ ํ๋ผ
new ์ฐ์ฐ์ ์์ฒด๊ฐ ๊ฐํ ์์กด์ฑ์ ๋ง๋ ๋ค! ์์ ์์ ์์ ์ด๋ฏธ ๊ฒฝํํ ๋ฐ ์๋ค. 'Bread bread = new WheatBread();' ์ ๊ฐ์ ๋ฐฉ๋ฒ์ ๋นต์ด๋ผ๋ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํจ์๋ WheatBread๋ก ๊ณ ์ ์ํจ๋ค. ์ฆ, ๊ตฌํ์ฒด์ ๊ฐํ ์์กด์ฑ์ ๊ฐ์ง๊ฒ ๋๋ค.
์์กด์ฑ ์ญ์ - ์์กด์ฑ ์ญ์ ์ด ๊ฒฝ๊ณ๋ฅผ ๋ง๋ ๋ค.
5๊ฐ์ง ์์น ์ค ๊ฐ์ฅ ์ค์ํ๋ค.
public class Restaurant {
private HamburgerChef hamburgerChef = new HamburgerChef();
public Food serve() {
return hamburgerChef.make();
}
}
Restaurant๊ฐ HamburgerChef์๊ฒ ํ๋ฒ๊ฑฐ๋ฅผ ๋ง๋ค์ด๋ฌ๋ผ๋ ์ง์๋ฅผ ๋ด๋ฆฐ๋ค.
public class Restaurant {
private Chef chef;
public Restaurant(Chef chef) {
this.chef = chef;
}
public Food serve() {
return chef.make();
}
}
์ด๋, Chef ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๊ธฐ์กด์ ์กด์ฌํ๋ Restaurant, HamburgerChef ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์์กดํ๋๋ก ๋ฐ๊พธ์๋ค. ์ด๋ฌํ ์ํฉ์ ‘์์กด์ฑ ์ญ์ ’์ด๋ผ๊ณ ํ๋ค.
์ด๋ฅผ ํตํด ์ธํฐํ์ด์ค๋ฅผ ์ค์ฌ์ผ๋ก ๊ฒฝ๊ณ๊ฐ ์๊ธฐ๋ฉฐ ๋ชจ๋์ ๋ฒ์๋ฅผ ์ ํ๊ณ ์ํ ๊ด๊ณ๋ฅผ ํํํ ์ ์๋ค.
restaurant ๋ชจ๋์ ์์ ๋ชจ๋, hamburger ๋ชจ๋์ ํ์ ๋ชจ๋์ด ๋๊ณ , ์์ ๋ชจ๋์ ํ์ ๋ชจ๋์ ์์กดํ์ง ์๋๋ค.
→ ์์ ๋ชจ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
์์กด์ฑ ์ญ์ ๊ณผ ์คํ๋ง - ์คํ๋ง์ ์์กด์ฑ ์ญ์ ์ ์ง์ํ์ง ์๋๋ค.
์์กด์ฑ ์ญ์ ์์น์ ์ค๊ณ์ ์์ญ์ด๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ ์จ์ผ ํ๋ค.
์์ ๊ฐ์ ๊ตฌ์กฐ๋ ์ปดํฌ๋ํธ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ์ง์ ํธ์ถํ๊ณ ์์ผ๋ฏ๋ก ์์กด์ฑ ์ญ์ ์ด ์ด๋ค์ง ๊ฒ์ด ์๋๋ค.
์ด๊ฒ์ด ์ฑ ์ ์ ์๊ฐ ์ ์ํ๋ ์์กด์ฑ ์ญ์ ์์น์ ์งํจ ์ค๊ณ ๊ตฌ์กฐ์ด๋ค.
์์กด์ฑ์ด ๊ฐ์กฐ๋๋ ์ด์ - ์์กด์ฑ์ ํน์ง(์์กด์ฑ ์ ์ด)
์ํํธ์จ์ด ์ค๊ณ๋ฅผ ์ํ๋ ค๋ฉด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅํ ๋ ์ํฅ๋ฐ๋ ๋ฒ์๋ฅผ ์ต์ํํ ์ ์์ด์ผ ํจ.
→ ์์กด์ฑ์ ์ ๋ค๋ค์ผ ํ๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด C ์ปดํฌ๋ํธ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ด๋ฅผ ์์กดํ๋ A, B ์ปดํฌ๋ํธ๋ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ๋๋ค. ์ด๋ ๊ฒ ์ฐ์์ ์ผ๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํฅ์ ์ฃผ๋ ๊ฒ์ ‘์์กด์ฑ์ด ์ ์ด๋๋ค’
→ ์์กด์ฑ์ ํ์ดํ์ ์ญ๋ฐฉํฅ์ผ๋ก ์ ์ด๋๋ค.
C ์ปดํฌ๋ํธ์ ์์กด์ฑ ์ญ์ ์ผ๋ก ์์กด์ฑ ์ ์ด๋ฅผ ๋์ ์ ์๋ค.
์ํ ์ฐธ์กฐ๋ฅผ ๋ง๋ค์ง๋ง๋ผ - ์ํ ์ฐธ์กฐ๋ ์ฌ์ค์ ๊ฐ์ ์ปดํฌ๋ํธ๋ผ๋ ์ ์ธ์ด๋ค
์ํ ์ฐธ์กฐ๋ ์์กด์ฑ ์ ์ด์ ์ํฅ ๋ฒ์๋ฅผ ํ์ฅ์ํค๋ ์ฃผ๋ฒ์ด๋ค.
B, C ๊ฐ์ ์ํ ์ฐธ์กฐ๋ก ์ธํด ์ํฅ ๋ฒ์๊ฐ ๋์ด์ก๋ค.
์๋ฐฉํฅ ์ฐธ์กฐ, ์ฌ์ดํด์ ๋ง๋ค์ง๋ง๊ณ ์ค๋ก์ง ๋จ๋ฐฉํฅ ์ฐธ์กฐ๋ฅผ ๋ง๋ค์.
4.3 SOLID์ ๊ฐ์ฒด์งํฅ
SOLID์ ๊ฐ์ฒด์งํฅ์ ์ถ๊ตฌํ๋ ๋ฐ๊ฐ ์ฝ๊ฐ ๋ค๋ฅด๋ค.
SOLID: ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ถ๊ตฌ - ์์ง๋๋ฅผ ๋์ด๊ณ ์์กด์ฑ์ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์ ์ง์ค
๊ฐ์ฒด์งํฅ: ์ญํ , ์ฑ ์, ํ๋ ฅ์ ์ถ๊ตฌ
'๊ฐ๋ฐ์์ > ์๋ฐ-์คํ๋ง ์ค์ฉ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
05. ์ํ ์ฐธ์กฐ (0) | 2025.01.24 |
---|