Skip to content

Latest commit

 

History

History
84 lines (59 loc) · 2.58 KB

File metadata and controls

84 lines (59 loc) · 2.58 KB

브릿지 패턴은 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있도록 하는 패턴이다. 즉, 기능과 구현에 대해 별도의 클래스로 구현하여 서로의 코드에 간섭하지 않고 변형, 확장할 수 있도록 하는 것이다.


예시 코드

@AllArgsConstructor
public abstract class Pizza {

    private String name;
    private Recipe recipe;

    public String result(){
        return recipe.getName() + " " + name;
    }
}

public class CheesePizza extends Pizza {
    public CheesePizza(Recipe recipe){
        super("치즈 피자", recipe);
    }
}

public class  PineapplePizza  extends Pizza {
    public  PineapplePizza (Recipe recipe){
        super("파인애플 피자", recipe);
    }
}

Pizza가 있다. 그리고 Pizza를 상속받은 CheesePizza PineapplePizza 가 있다. 피자는 name과 recipe를 속성으로 가지고, result() 메서드를 호출하면 recipe.getName()이 어떤 값을 반환하는 지에 따라 결과가 달라진다.


public interface Recipe {
    String getName();
}

public class DeliciousRecipe implements Recipe{

    @Override
    public String getName() {
        return "맛있는";
    }
}

public class NormalRecipe implements Recipe{

    @Override
    public String getName() {
        return "그냥";
    }
}

Recipe는 인터페이스이고 피자에 수식어를 달아주는 역할을 한다. Recipe을 인터페이스로 구현했기 때문에 Pizza는 Recipe을 자유자재로 바꿔낄 수 있다. Pizza의 종류가 변해도, 새로운 Recipe가 추가돼도, 기존의 코드를 바꿀 필요가 없다.


public class App {

    public static void main(String[] args) {

        DeliciousRecipe deliciousRecipe = new DeliciousRecipe();
        NormalRecipe normalRecipe = new NormalRecipe();

        Pizza pizza1 = new Pizza("파인애플 피자", deliciousRecipe);
        Pizza pizza2 = new Pizza("치즈 피자", normalRecipe);

        System.out.println("pizza1.result() = " + pizza1.result());
        System.out.println("pizza2.result() = " + pizza2.result());
    }
}

브릿지 패턴을 사용하면 이런식으로 다양한 종류의 피자를 만들 수 있다. 피자에서 레시피를 추상화하여 독립적인 클래스를 만들었기 때문이다.

링크로 가면 코드를 볼 수 있다.