๋ธ๋ฆฌ์ง ํจํด(Bridge Pattern)
๋ธ๋ฆฌ์ง ํจํด์ ์ถ์ํ(Abstraction)์ ๊ตฌํ(Implementation)์ ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋ณํ๊ณผ ํ์ฅ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ตฌ์กฐ ํจํด์
๋๋ค. ๋ง์น ๋ค๋ฆฌ๊ฐ ๋ ์ง์ญ์ ์ฐ๊ฒฐํ๋ฏ์ด, ์ถ์ํ์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด์๋ ๋ ๊ณ์ธต ๊ฐ์ ์ฐ๊ฒฐ์ ์ ์งํฉ๋๋ค.
์ฃผ์ ๋ชฉ์
โข
์ถ์ํ์ ๊ตฌํ์ ๋ถ๋ฆฌํ์ฌ ๋
๋ฆฝ์ ์ธ ํ์ฅ ๊ฐ๋ฅ
โข
๋ฐํ์์์ ๊ตฌํ์ ๊ต์ฒดํ ์ ์๋ ์ ์ฐ์ฑ ์ ๊ณต
โข
ํด๋ผ์ด์ธํธ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๊ตฌํ ๋ณ๊ฒฝ ๊ฐ๋ฅ
ํน์ง
โข
์ธํฐํ์ด์ค์ ๊ตฌํ๋ถ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
โข
์๋ก์ด ๊ตฌํ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋ ์์ ๋ถํ์
โข
๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ๊ฒฝ์ฐ์ ์ ์ฉ
์์ ์ฝ๋
// ๊ตฌํ๋ถ ์ธํฐํ์ด์ค
interface DrawAPI {
void drawCircle(int radius, int x, int y);
}
// ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ํด๋์ค
class RedCircle implements DrawAPI {
public void drawCircle(int radius, int x, int y) {
System.out.println("๋นจ๊ฐ ์ ๊ทธ๋ฆฌ๊ธฐ");
}
}
// ์ถ์ํ ํด๋์ค
abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI) {
this.drawAPI = drawAPI;
}
abstract void draw();
}
// ์ถ์ํ์ ํ์ฅ ํด๋์ค
class Circle extends Shape {
private int radius;
public Circle(int radius, DrawAPI drawAPI) {
super(drawAPI);
this.radius = radius;
}
void draw() {
drawAPI.drawCircle(radius, 0, 0);
}
}
Java
๋ณต์ฌ
์ฝ๋ ํด์ค
์ ์์ ์ฝ๋๋ ๋ธ๋ฆฌ์ง ํจํด์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค:
โข
DrawAPI (๊ตฌํ๋ถ ์ธํฐํ์ด์ค): ์์ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ธํฐํ์ด์ค์
๋๋ค.
โข
RedCircle (๊ตฌ์ฒด์ ๊ตฌํ): DrawAPI ์ธํฐํ์ด์ค๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ ํด๋์ค์
๋๋ค.
โข
Shape (์ถ์ํ): ์ถ์ ํด๋์ค๋ก, DrawAPI๋ฅผ ์ฐธ์กฐํ์ฌ ๋ํ์ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
โข
Circle (๊ตฌ์ฒด์ ์ถ์ํ): Shape๋ฅผ ์์๋ฐ์ ์ค์ ์์ ๊ทธ๋ฆฌ๋ ํด๋์ค์
๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด ๋ํ์ ๊ทธ๋ฆฌ๋ ๋ฐฉ์(๊ตฌํ๋ถ)๊ณผ ๋ํ์ ์ข
๋ฅ(์ถ์ํ)๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, BlueCircle์ด๋ GreenCircle ๊ฐ์ ์๋ก์ด ๊ตฌํ์ ์ถ๊ฐํ๊ฑฐ๋, Rectangle๊ณผ ๊ฐ์ ์๋ก์ด ๋ํ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ ํ์๊ฐ ์์ต๋๋ค.