design pattern #10 Structural pattern - Facade
복잡하고 많은 class 들을 사용하여 작업을 하는 경우, client 에게 필요한 기능만을 따로 빼고 나머지는 감춰서 제공하는 class 가 facade class 이다. 사용자 입장에서 복잡도를 낮추고, 필요한 기능만 제공한다는 장점이 있고, 변경이나 라이브러리 대체가 필요한 경우, 이 facade 만 수정 혹은 대체하면 된다는 장점이 있다. facade class 가 어디서든 다 사용되는 god class 가 되어 의존도가 높아지거나, facade class 자체가 커질 위험이 있다는 단점이 있다. 아래 예제를 보면 main 함수에서는 VideoConversionFacade 클래스만 사용하고 있고, 나머지 codec, sound, 등등은 facade 클래스가 처리 한다. public class VideoFile { private String name ; private String codecType ; public VideoFile(String name) { this . name = name; this . codecType = name.substring(name.indexOf( "." ) + 1 ); } public String getCodecType() { return codecType ; } public String getName() { return name ; } } public interface Codec { } public class MPEG4CompressionCodec implements Codec { public String type = "mp4" ; } public class OggCompressionCodec implements Codec { public String type = "ogg" ; } public class CodecFactory { pu...