๐ŸŽฐ Design Pattern

Bridge Pattern | ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด

์—ฐ_์šฐ๋ฆฌ 2022. 8. 15. 00:25
๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

     

     

     

    ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ?

    ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ์˜ ์†์„ฑ์„ ์ƒ๊ฐํ•ด๋ณด์ž

    ์Šคํ‚จ๋„ ์žˆ๊ณ , ์บ๋ฆญํ„ฐ ๊ณ ์œ  ์Šคํ‚ฌ๋„ ์žˆ๊ณ , ๊ณตํ†ต์ ์ธ ์บ๋ฆญํ„ฐ ์Šคํ‚ฌ๋„ ์žˆ๊ณ ...

    ์ด ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„๋“ค์„ ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?

    ์•„๋งˆ implments ๋’ค์— ๋ถ™๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด 20๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐˆ์ˆ˜๋„์žˆ๋‹ค ใ…Žใ…Ž

     

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š”๊ฑด '์บ๋ฆญํ„ฐ'(์ถ”์ƒํ™”)์ด๊ณ  '์บ๋ฆญํ„ฐ'์˜ ๊ตฌ์ฒด์ ์ธ ์Šคํ‚จ๊ณผ ์Šคํ‚ฌ(๊ตฌํ˜„์ฒด๋“ค)์„ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜์ž!

     

     

    ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, JDBC๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ

    DriverManager.getConnection, Statement.execute(SQL), connection.prepareStatement(SQL).. ๋“ฑ์ด ๋ชจ๋‘ ์ถ”์ƒํ™”๋œ ๊ธฐ๋Šฅ์ด๊ณ 

    Class.forName("DriverName")์—์„œ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด๋“ค์„ ๊ฐ€์ ธ์˜ค๊ฒŒ๋œ๋‹ค!

     

     

    ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด์ด๋ž€?

    ์ถ”์ƒ์ ์ธ ๊ฒƒ๊ณผ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

    ํฌ๊ฒŒ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)๊ณผ ๊ตฌํ˜„(๊ทœ์•ฝ)์„ ํด๋ž˜์Šค ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•œ ํ›„, ๊ณ„์ธต๊ตฌ์กฐ๋กœ ํ™•์žฅํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์—์„œ

    ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

     

    public static void main(String[] args) {
    	Shape tri = new Triangle(new RedColor());
    	tri.applyColor();
    
    	Shape pent = new Pentagon(new GreenColor());
    	pent.applyColor();
    }
    
    // Triangle filled with color red.
    // Pentagon filled with color green.

     

    ์žฅ์ 

    - ์ถ”์ƒ์ ์ธ ์ฝ”๋“œ์™€ ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

     

    ๋‹จ์ 

    - ๊ณ„์ธต๊ตฌ์กฐ๊ฐ€ ๋Š˜์–ด๋‚˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค

     

     

     

     

    ๊ตฌํ˜„์ฝ”๋“œ

    ๊ธฐ์กด์ฝ”๋“œ

    public interface Champion extends Skin {
        void move();
        void skillQ();
        void skillW();
        void skillE();
        void skillR();
    }
    
    public class KDA์•„๋ฆฌ implements Champion {
        @Override public void move() { System.out.println("KDA ์•„๋ฆฌ move"); }
        @Override public void skillQ() { System.out.println("KDA ์•„๋ฆฌ Q"); }
        @Override public void skillW() { System.out.println("KDA ์•„๋ฆฌ W"); }
        @Override public void skillE() { System.out.println("KDA ์•„๋ฆฌ E"); }
        @Override public void skillR() { System.out.println("KDA ์•„๋ฆฌ R"); }
    
        @Override
        public String getName() {
            return null;
        }
    }
    public class App {
        public static void main(String[] args) {
            Champion kda์•„๋ฆฌ = new KDA์•„๋ฆฌ();
            kda์•„๋ฆฌ.skillQ();
            kda์•„๋ฆฌ.skillR();
        }
    }

     

    ์—ฌ๊ธฐ์„œ ์Šคํ‚จ์ด ํ•˜๋‚˜์”ฉ ๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ๋™์ผํ•˜๊ฒŒ.. ๋น„์Šทํ•˜๊ฒŒ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค!

    ์ฑ”ํ”ผ์–ธ์˜ ๋™์ž‘ ๋ถ€๋ถ„๊ณผ ์Šคํ‚จ ๋ถ€๋ถ„์„ ํ•ฉ์ณ์„œ KDA์•„๋ฆฌ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์–ด ํ™•์žฅ์ด ์–ด๋ ต๋‹ค.

     

     

     

     

    ๋ณ€๊ฒฝ์ฝ”๋“œ

    ์ฑ”ํ”ผ์–ธ ๋™์ž‘๋ถ€๋ถ„๊ณผ ์Šคํ‚จ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ๋‹ค.

    public class DefaultChampion implements Champion {
    
        private Skin skin;
        private String name;
        public DefaultChampion(Skin skin, String name) {
            this.skin = skin;
            this.name = name;
        }
    
        @Override public void move() { System.out.printf("%s %s move\n", skin.getName(), this.name); }
        @Override public void skillQ() { System.out.printf("%s %s Q\n", skin.getName(), this.name); }
        @Override public void skillW() { System.out.printf("%s %s W\n", skin.getName(), this.name); }
        @Override public void skillE() { System.out.printf("%s %s E\n", skin.getName(), this.name); }
        @Override public void skillR() { System.out.printf("%s %s R\n", skin.getName(), this.name); }
    
        @Override
        public String getName() {
            return null;
        }
    }

     

    public class ์•„๋ฆฌ extends DefaultChampion {
        public ์•„๋ฆฌ(Skin skin) {
            super(skin, "์•„๋ฆฌ");
        }
    }
    public class KDA implements Skin{
        @Override
        public String getName() {
            return "KDA";
        }
    }
    public abstract class App implements Champion {
    
        public static void main(String[] args) {
            Champion kda์•„๋ฆฌ = new ์•„๋ฆฌ(new KDA());
            kda์•„๋ฆฌ.skillQ();
            kda์•„๋ฆฌ.skillW();
    
            Champion poolParty์•„๋ฆฌ = new ์•„๋ฆฌ(new PoolParty());
            poolParty์•„๋ฆฌ.skillR();
            poolParty์•„๋ฆฌ.skillW();
        }
    }

     

     

    ๋ฐ˜์‘ํ˜•
    • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
    • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
    • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
    • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
    • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ