Design Patterns - Method Chaining Pattern

2021. 2. 4. 12:29Developments/Design Pattern

  이번에는 Method Chaining Pattern에 대해 알아보겠습니다. 정식(?) Design Pattern으로 인정되지 않는 경우도 있어 Method Cascading 혹은 Fluent Interface라고도 합니다.


Method Chaining Pattern

  Method Chaining Pattern이란 이름에서 알 수 있듯이 메서드가 체인처럼 연결되어있는 경우입니다. 말로하는 설명보다 직접 예시를 보여드리면 이해가 훨씬 쉬울 것 같은데요. 가장 대표적인 예시인 Java의 StringBuilder를 이용해 알아보겠습니다.

public class Test {
	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder(); // StringBuilder 생성
		sb.append("Hello").append(" ").append("World!"); // StringBuilder에서 메서드체인을 이용해 계속 append();
		System.out.println(sb.toString()); // 완성된 StringBuilder를 출력
	}
}

  위에서 StringBuilder를 생성하고 sb에 원하는 문자열을 append할 때 Method Chaining Pattern이 사용되고 있습니다. 이게 가능한 이유는 보통은 위와 같은 append의 기능을 하는 메서드는 return type이 없는 void를 사용하는 경우가 많은데, 여기서는 appendreturn typeStringBuildersb 자기 자신이기 때문입니다. 실행 결과를 보시면 아래 사진과 같이 sbappendHello World!가 정상적으로 출력되는 모습을 볼 수 있습니다. 

StringBuilder 실행 결과

  이를 구현하기 위한 코드를 알아보겠습니다. 코드도 굉장히 간단합니다.

public class MethodChainPattern {
	public MethodChainPattern() {} // 생성자

	public MethodChainPattern m1() {
	    // m1이 한번 호출될 때마다 Hello World! 출력
		System.out.println("Hello World!");
		return this; // 클래스 자기 자신 반환
	}

	public static void main(String[] args) {
		MethodChainPattern mcp = new MethodChainPattern();
		mcp.m1().m1().m1().m1(); // MethodChainPattern을 이용한 m1 연쇄 호출
	}
}

  단순히 Hello World!를 출력하기위한 메서드는 원래  return type이 없는 void형식을 많이 이용하는데, 위와 같이 Class자기 자신을 반환하는 형식을 주어서 return this;를 통해 Method Chaining Pattern을 완성하였습니다. 그리고 main에서 사용하는 방법으로는 위와 같이 m1()을 연쇄적으로 호출하면 사용할 수 있습니다. 실행결과는 예상대로 아래와 같이 m1을 호출한 횟수만큼 Hello World!가 출력됩니다.

MethodCahinPattern 샐행 결과

  만약 위와같이 Method Chaining Pattern을 이용하지 않는다면 코드는 다음과 같이 바뀝니다.

public class MethodChainPattern {
	public MethodChainPattern() {} // 생성자

	public void m1() {
    	// m1이 한번 호출될 때마다 Hello World! 출력
		System.out.println("Hello World!");
	}

	public static void main(String[] args) {
		MethodChainPattern mcp = new MethodChainPattern();
		mcp.m1();
		mcp.m1();
		mcp.m1();
		mcp.m1();
	}
}

  물론 위 코드도 아무 문제 없이 잘 실행되고, 실행 결과도 똑같습니다. 하지만 Method Chaining Pattern을 사용한 경우가 코드도 짧고 코딩하기에 더 편하겠죠? 또한 위 예시는 아주 간단한 예시를 들어 Method Chaining Pattern이 무엇인지 알려준 것이기 때문에 훨씬 복잡한 작업을 하게 된다면 기존의 코드보다 훨씬 편하게 코딩을 할 수 있을 것입니다.

 

'Developments > Design Pattern' 카테고리의 다른 글

Design Patterns - Factory Method Pattern  (0) 2021.02.04
Design Patterns - Singleton Pattern  (0) 2021.01.23