메서드 체이닝 - Method Chaining
메서드 체이닝에 대해서 코드를 통해서 알아보자.
public class ValueAdder {
private int value;
public ValueAdder add(int addValue) {
value += addValue;
return this;
}
public int getValue() {
return value;
}
}
=> 단순히 값을 누적해서 더하는 기능을 제공하는 클래스이다.
자기 자신(this)의 참조값을 반환한다.
public class MethodChainingMain1 {
public static void main(String[] args) {
ValueAdder adder = new ValueAdder();
adder.add(1);
adder.add(2);
adder.add(3);
int result = adder.getValue();
System.out.println("result=" + result);
}
}
=> 실행결과 6이 나온다. 이번에는 ValueAdder 메서드의 반환값을 사용해보자.
public class MethodChainingMain2 {
public static void main(String[] args) {
ValueAdder adder = new ValueAdder();
ValueAdder adder1 = adder.add(1);
ValueAdder adder2 = adder.add(2);
ValueAdder adder3 = adder.add(3);
int result = adder3.getValue();
System.out.println("result=" + result);
System.out.println("adder=" + adder);
System.out.println("adder1=" + adder1);
System.out.println("adder2=" + adder2);
System.out.println("adder3=" + adder3);
}
}
=> 이번에도 결과는 6이 나온다. 참조값을 확인해보자.
=> 자기 자신을 반환하므로 참조값이 모두 똑같다.
처음 방식보다 불편하고, 코드도 잘 안읽힌다. 왜 이런 방식을 사용하는걸까?
int result = adder.add(1).add(2).add(3).getValue();
add() 메서드를 호출하면 ValueAdder 인스턴스 자신의 참조값이 반환된다. 이 반환된 참조값을 변수에 담아두지 않아도 되나. 대신에 반환된 참조값을 즉시 사용해서 바로 메서드를 호출할 수 있다.
메서드 호출의 결과로 자기 자신의 참조값을 반환하면, 반환된 참조값을 사용해서 메서드 호출을 계속 이어갈 수 있다. 이러한 기법을 메서드 체이닝이라 한다.
메서드 체이닝 방식은 메서드가 끝나는 시점에 바로 .을 찍어서 변수명을 생략할 수 있다.
메서드 체이닝이 가능한 이유는 자기 자신의 참조값을 반환하기 때문이다. 메서드 체이닝을 사용하면 코드를 간결하게 작성할 수 있다.
StringBuilder와 메서드 체인(Chain)
StringBuilder는 메서드 체이닝 기법을 제공한다.
append() 메서드를 보면 자기 자신의 참조값을 반환한다.
public StringBuilder append(String str) {
super.append(str);
return this;
}
이전에 만들었던 StringBuilderMain 코드를 살펴보자.
StringBuilder sb = new StringBuilder();
sb.append("h");
sb.append("e");
sb.append("l");
sb.append("l");
sb.append("o");
다음과 같이 변경할 수 있다.
StringBuilder sb = new StringBuilder();
sb.append("A").append("B").append("C").append("D")
.insert(4, "Java")
.delete(4, 8)
.reverse()
.toString();
* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 중급] 자바 래퍼 클래스 (0) | 2024.08.22 |
---|---|
[Java 중급] 래퍼 클래스 - 기본형의 한계 (0) | 2024.08.22 |
[Java 중급] String 최적화 (0) | 2024.08.20 |
[Java 중급] StringBuilder - 가변 String (0) | 2024.08.13 |
[Java 중급] String 클래스 - 불변 객체 (0) | 2024.08.13 |