2023.08.19

브릿지 패턴

브릿지 패턴이란, 구현시 추상층으로 분리하여 독립적으로 변형 및 확장 가능한 구조를 가지는 패턴입니다. 상속과 합성을 이용해서 유연하게 객체를 지정할 수 있고 서로 다른 인터페이스를 통합해서 추상화합니다.


구현부 클래스와 기능부 클래스가 분리되어서 그 사이를 브릿지로 연결하는 것과 같다. 대부분 큰 규모의 시스템에서 하위의 클래스로 나누기에 너무 길고 많은 경우에 사용된다.


장점

계층 구조를 나누어서 오류 찾기와 관리 면에서 작은 클래스에서 관리하기 쉽게 한다. 또한, 구현부에서 로직을 바꾸어도 추상화된 계층에서는 영향을 받지 않기 때문에 구현을 안전하게 수정할 수 있다.


단점

디자인이 복잡해지는 문제가 있다.


구현

public interface Color {
	public void applyColor();
}

public abstract class Shape {
	protected Color color;

	public Shape(Color color) {
		this.color = color;
	}

	abstract public void applyColor();
}


위에서 모양(Shape) 클래스는 색깔 인터페이스를 가지고 있고, applyColor() 메소드를 abstract(추상) 으로 두어서 구현을 위임하는 형태이다. 이제 위와 같이 추상화된 부분은 상속을 통해서 구현하게 된다.


public class Cycle extends Shape {
	public Cycle(Color color) {
		super(color);
	}

	@Override
	public void applyColor() {
		System.out.println("원하는 기능을 넣는다.");
		color.applyColor();
	}
}


여기서 Shape의 applyColor가 있고, color의 applyColor가 있다. 만약 Cycle을 생성할때 color에 기능을 따로 구현해둘수도 있다.


public class GreenColor implements Color {
	public void applyColor() {
		System.out.println("그린!");
	}
}

public class BridgeTest {
	public static void main(String[] args) {
		Shape cycle = new Cycle(new GreenColor());
		cycle.applyColor();
	}
}

//출력 결과
//원하는 기능을 넣는다.
//그린!


이런 식으로 추상화된 부분과 구현이 독립적으로 다른 계층 구조를 가지고, 클라이언트 어플리케이션으로 부터 구현부를 숨길 수 있게 된다.



Leave a comment