본문 바로가기

Domain/디자인패턴

[디자인패턴] 퍼사드 패턴(Facade Pattern)

퍼사드 패턴(Facade Pattern)

퍼사드 패턴은 가장 객체지향의 기본적인 패턴이다. 복잡한 코드를 뒤에 숨기고 간략화 된 인터페이스를 제공하는 패턴이다. 여러 클래스를 퍼서드 클래스 안에서 클래스들을 초기화해주고 특정 작업을 수행하면 된다.

 

예제

예를 들어, 사용자의 위치 정보를 얻어 해당 위치에 필요한 정보를 서버에 요청하여 받아온 뒤, 해당 값을 Json으로 바꾸는 과정이 존재한다.

public class Example{
    public static void main(String[] args){
    	double[] location = new GeoLocation().getLocation();
        InternetConnection conn = new InternetConnection();
        conn.connect();
        Map<String,Object> data = new Json().parse(data);
        conn.disconnect();
    }
}

public class GeoLocation{
    public double[] getLocation(){
    	double[] location = {10,100};
        return location;
    }
}

public class InternetConnection{
    public void connect(){
    	System.out.println("대충 뭐 인터넷 연결한다는 코드..")
    }
    public void disconnect(){
    	System.out.println("대충 뭐 인터넷 연결 중지한다는 코드..")
    }
}

public class Json{
    public Map<String,Object> getLocation(){
    	Map<String,Object> result = new HashMap();
        result.put("address", "서울시 강서구");
        return result;
    }
}

위에서 사용자 측인 Example에서는 해당 순서를 지켜가며 이곳 저곳에서 사용된다고 할 경우, 매우 번거롭고 코드가 지저분해질 것이다.

 

개선

public class Example{
    public static void main(String[] args){
    	new Facade().getDate();
    }
}

public class Facade{
    public getData(){
        double[] location = new GeoLocation().getLocation();
        InternetConnection conn = new InternetConnection();
        conn.connect();
        Map<String,Object> data = new Json().parse(data);
        conn.disconnect();
    }
}

위처럼 복잡한 코드는 Facade 내부에서 처리하고 실제 사용하는 Example 클래스 측에서는 간단하게 객체 생성 후 메서드만 호출하면 된다. 이를 통해 복잡한 과정이 Facade(외관)에 의해 가려지게 되었다.

 

 

요약

  • 퍼서드 클래스를 생성하여 복잡한 코드를 숨기고 간단한 인터페이스를 통해 같은 기능을 제공한다.