๋ฐฑ์๋(Back-End) ๊ฐ๋ฐ/Java
[JAVA] ๋์์ธ ํจํด - ๋ธ๋ฆฟ์ง ํจํด(Bridge)
rabo93
2025. 5. 28. 13:17
๋ธ๋ฆฟ์ง ํจํด(Bridge Pattern)
- ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ ํด๋์ค์ ๊ตฌํ์ ๋ด๋นํ๋ ์ถ์ ํด๋์ค๋ก ๊ตฌ๋ณ
- ๋ธ๋ฆฌ์ง ํจํด์ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ์ฌ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝ ์์ด ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์
⇒ ์ฌ์ฉ ์์
- ๊ธฐ์กด ์์คํ ์ ๋ถ์์ ์ธ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ์ง์์ ์ผ๋ก ์ถ๊ฐํ ๋
- ๋ถ๋ชจ ์ถ์ ํด๋์ค๊ฐ ๊ธฐ๋ณธ ๊ท์น ์ธํธ๋ฅผ ์ ์ํ๊ณ , ๊ตฌ์ฒด์ ์ธ ํด๋์ค๊ฐ ์ถ๊ฐ ๊ท์น์ ์ถ๊ฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ๋ค์ํ UI API ๊ตฌํ, ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ
⇒ ์ฅ์
- ํด๋์ค ๊ณ์ธต์ ๋ถ๋ฆฌํ ๋ ์์ ํ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐํฉํ์ง ์๋๋ค. ์ด๋ฅผ ํตํด ํด๋์ค์์ ๊ตฌํ๊ณผ ์ถ์ ๋ถ๋ถ 2๊ฐ์ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ ์ ์๊ณ , ๋ถ๋ฆฌ๋ 2๊ฐ์ ์ถ์ ๊ณ์ธต๊ณผ ๊ตฌํ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ธ ํ์ฅ์ด ๊ฐ๋ฅ
- ๋ฐํ์ ์์ ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ ์ง ์ ํํ ์ ์๋ค.
- ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋ค๋ฉด ๊ธฐ๋ฅ์ ์ธ๋ถ๋ก๋ถํฐ ์จ๊ธธ ์ ์๋ ์๋ ํจ๊ณผ๋ ์ป์
⇒ ๋จ์
- ์ถ์ํ๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒฝ์ฐ ์ฝ๋ ๋์์ธ ์ค๊ณ๊ฐ ๋ณต์กํด์ง๋ค
⇒ ๋ฐ๋ผ์!
๊ฐ์ฒด๋ฅผ ๊ตฌํ ์ธํฐํ์ด์ค / ์ถ์ ํด๋์ค ๋ถ๋ฆฌ
ใด ํ์ฅ
ใด ํ์ฅ
...
// ------- ๋ฆฌ๋ชจ์ฝ ์ถ์ ํด๋์ค (๋ถ๋ชจ) -------
public abstract class Remote {
// ์์กด์ฑ ์ถ๊ฐ
protected final Device device;
public Remote(Device device) {
this.device = device;
}
public abstract void power();
}
//---------- ๋๋ฐ์ด์ค ์ธํฐํ์ด์ค -----------
public interface Device {
void on(); //์ผ๋ ๋ฉ์๋
void off(); //๋๋ ๋ฉ์๋
boolean isOn(); //์ผ์ ธ์๋์ง ์ํ
void runApp(String App); //App์ ๋ฐ๋ฅธ ์๋ ๋ฉ์๋
}
//--------- ํ์ฅ๋ ๋ฆฌ๋ชจ์ฝ ์ถ์ํ ํด๋์ค ----------
//์ผ๋ฐ๋ฆฌ๋ชจ์ฝ
public class BasicRemote extends Remote {
public BasicRemote(Device device) {
super(device);
}
// ์ถ์ํด๋์ค ์ค๋ฒ๋ผ์ด๋ฉ
@Override
public void power() {
if(device.isOn()) {
device.off();
} else {
device.on();
}
}
}
//์ค๋งํธ๋ฆฌ๋ชจ์ฝ
class SmartRemote extends Remote {
public SmartRemote(Device device) {
super(device);
}
@Override
public void power() {
if(device.isOn()) {
device.off();
} else {
device.on();
}
}
public void runApp(String app) {
device.runApp(app);
}
}
//--------- ๋๋ฐ์ด์ค ๊ตฌํ ----------
// TV
public class TV implements Device {
private boolean on = false;
@Override
public void on() {
on = true;
System.out.println("TV is on");
}
@Override
public void off() {
on = false;
System.out.println("TV is off");
}
@Override
public boolean isOn() {
return on;
}
@Override
public void runApp(String App) {
if(isOn()) {
System.out.println("TV Run App " + App);
} else {
System.out.println("TV is not on");
}
}
}
// ...๋ค๋ฅธ ๋๋ฐ์ด์ค๋ค ๋ด๋ถ ์ฝ๋๋ ๊ฐ์ผ๋ฏ๋ก ์๋ต
// ---------- ๋ฉ์ธ ํด๋์ค (๋ฐํ์) -----------------
public class main {
public static void main(String[] args) {
Device tv = new TV();
Remote basicRemote = new BasicRemote(tv);
basicRemote.power();
SmartRemote smartRemote = new SmartRemote(tv);
smartRemote.power();
smartRemote.runApp("Youtube");
smartRemote.power();
smartRemote.runApp("Netplix");
}
}