Search

๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด

๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด(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๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๋„ํ˜•์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.