본문 바로가기
Web/OOP

[OOP] 메서드 체이닝(Method Chaining)

by 클레어몬트 2024. 8. 22.

ㅇ메서드 체이닝(Method Chaining): 각 메서드가 객체 자신(또는 다른 객체)의 참조값을 반환함으로써 다음 메서드를 이어서 계속 호출하는 패턴

 

한 객체의 메서드를 연속적으로 호출할 수 있도록 설계된 구조이다. 메서드 체이닝은 코드의 가독성을 높이고, 코드를 간결하게 유지하는 데에 도움을 준다.

 

 

예시1) 단순히 값을 누적해서 더하는 기능을 제공하는 ValueAdder 클래스

package lang.string.chaining;

public class ValueAdder {
    private int value;

    public ValueAdder add(int addValue) {
        value += addValue;
        return this; // 자신의 참조값을 반환해서 메서드 체이닝에 이용
    }

    public int getValue() {
        return value;
    }
}

 

 

case1

package lang.string.chaining;

public class MethodChainingMain1 {
    public static void main(String[] args) {
        ValueAdder adder = new ValueAdder();

        // add 메서드의 반환값 사용 x
        adder.add(1);
        adder.add(2);
        adder.add(3);

        int res = adder.getValue();
        System.out.println("result = " + res);
    }
}

 

 

case2

package lang.string.chaining;

public class MethodChainingMain2 {
    public static void main(String[] args) {
        ValueAdder adder = new ValueAdder();

        // add 메서드의 반환값 사용 o
        ValueAdder adder1 = adder.add(1);
        ValueAdder adder2 = adder1.add(1);
        ValueAdder adder3 = adder2.add(1);

        int res = adder3.getValue();
        System.out.println("result = " + res);
        // 모두 다 같은 참조값이다
        System.out.println("result = " + adder);
        System.out.println("result = " + adder1);
        System.out.println("result = " + adder2);
        System.out.println("result = " + adder3);
    }
}

 

 

case3

package lang.string.chaining;

public class MethodChainingMain3 {
    public static void main(String[] args) {
        ValueAdder adder = new ValueAdder();
        int res = adder.add(1).add(2).add(3).getValue();
        System.out.println("result = " + res);
    }
}

 

 

 

3개의 case 모두 같은 결과가 나오지만, 메서드 체이닝을 활용한 3번째 case가 가독성이 가장 좋다

2번 case의 출력값

 

 

 

 

예시2) StringBuilder 클래스

package lang.string.builder;

// 메서드 체이닝 사용
public class StringBuilderMain1_2 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        String str = sb.append("A").append("B").append("C").append("D")
        .insert(4, "Java")
        .delete(4, 8)
        .reverse()
        .toString();

        System.out.println("String = " + str);
    }
}

 

 

"만드는 사람이 수고로우면 쓰는 사람이 편하고, 만드는 사람이 편하면 쓰는 사람이 수고롭다"

배민 사내에 걸려있는 아주 중요한 문구이다. 메서드 체이닝은 구현하는 입장에서는 번거롭지만 사용하는 개발자는 편리해진다. 참고로 자바의 라이브러리와 오픈 소스들은 메서드 체이닝 방식을 종종 사용한다.

 

 

 

 

 

 

 

참고 및 출처: 김영한의 실전 자바 - 중급 1편

https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-1