BE/Java

[Java] 체인호출

baek-dev 2025. 3. 24. 18:45

 

자바에서 체인 호출(Method Chaining)이란?

 

자바에서 체인 호출(Method Chaining)이란 객체의 메서드를 호출한 후, 그 결과로 받은 객체를 이용하여 바로 다른 메서드를 연속해서 호출하는 방식을 말함.

간단히 표현하면, 메서드가 연속적으로 연결되어 호출되는 형태임.

 

일반적으로 다음과 같은 형태를 말함.

객체.method1().method2().method3();

 

 


체인 호출의 원리와 구조

 

체인 호출은 다음 두 가지 핵심 원리로 동작함.

메서드가 반드시 객체(주로 자기 자신, 즉 this)를 반환해야 함.

반환받은 객체를 통해 다음 메서드를 계속 호출하는 방식임.

 

즉, 이런 구조임.

object.method1().method2().method3();

 

위 코드가 실행되는 과정:

1. object.method1() 메서드 호출

2. method1이 객체를 반환함 → 그 객체를 이용해 바로 .method2() 호출

다시 객체를 반환하고, 이 과정을 반복함.

 


체인 호출의 실제 예제

 

아래의 예시로 쉽게 이해할 수 있음.

 

일반적인 방식 (체인 호출을 하지 않을 경우)

public class Order {
    private String item;
    private int quantity;
    private double price;

    public void setItem(String item) {
        this.item = item;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public void setPrice(int price) {
        this.quantity = price;
    }
}

 

이 클래스를 사용하려면:

Order order = new Order();
order.setItem("Book");
order.setQuantity(3);
order.setPrice(15000);

여러 번 호출해야 하므로 코드가 길어지고 가독성도 떨어짐.

 

체인 호출 방식으로 개선한 예제

 

메서드들이 자신(this)을 반환하도록 설계하면 다음과 같음:

public class Order {
    private String item;
    private int quantity;
    private int price;

    public Order setItem(String item) {
        this.item = item;
        return this;
    }

    public Order setQuantity(int quantity) {
        this.quantity = quantity;
        return this;
    }

    public Order setPrice(int price) {
        this.price = price;
        return this;
    }
}

 

이제 아래처럼 간결하고 가독성 있게 표현 가능함:

Order order = new Order()
                    .setItem("Book")
                    .setQuantity(3)
                    .setPrice(15000);

위 코드는 같은 기능을 수행하지만 훨씬 간결하고 읽기 좋음.

 


자바 표준 라이브러리에서의 체인 호출 예시

 

자바 표준 라이브러리에서도 이미 체인 호출이 널리 사용됨.

 

대표적인 예는 다음과 같음:

 

① StringBuilder 클래스의 체인 호출

String result = new StringBuilder()
    .append("안녕하세요.")
    .append(" ")
    .append("반갑습니다.")
    .toString();

 

② Java Stream API의 체인 호출 (Java 8 이상)

List<String> result = Arrays.asList("kim", "lee", "park")
    .stream()
    .map(String::toUpperCase)
    .filter(s -> s.startsWith("K"))
    .collect(Collectors.toList());

이러한 방식으로 여러 메서드를 연결하여 데이터를 효율적으로 처리함.

 


체인 호출의 장점

 

체인 호출을 사용하면 다음과 같은 장점이 있음:

가독성 향상: 메서드를 연속 호출함으로써 코드가 깔끔해짐.

간결한 코드 작성: 임시 객체 변수를 반복해서 선언하지 않아 코드가 짧아짐.

유창한(Fluent) 인터페이스 제공: 특히 객체 초기화 또는 설정 과정에서 직관적이고 명확한 코드 작성 가능.

 


체인 호출 사용 시 주의점

 

하지만 체인 호출을 사용할 때도 주의사항이 있음:

메서드의 반환값을 this가 아닌 다른 객체로 반환하면 혼란을 줄 수 있으므로 명확한 설계 필요함.

지나친 메서드 체이닝은 오히려 가독성을 떨어뜨릴 수 있음. 적당한 수준에서 사용하는 것이 중요함.

null을 반환할 가능성이 있는 메서드가 있으면, 체인 호출 중 NullPointerException이 발생할 수 있으므로 유의해야 함.

 


체인 호출을 적용할 때 추천하는 상황

객체 초기화 과정에서 여러 설정 메서드를 연속적으로 호출할 때

빌더(Builder) 패턴을 구현할 때

데이터 처리 로직에서 Stream API를 사용하여 간결하게 표현할 때

 


요약 정리

체인 호출은 객체가 메서드를 연속으로 호출하는 방식으로, 메서드가 객체(대부분 자신)를 반환할 때 사용 가능함.

코드가 간결해지고 읽기 쉬워지는 장점이 있지만, 지나치게 사용하거나 반환 객체가 다를 경우 혼란을 줄 수 있으므로 주의가 필요함.

Java의 기본 라이브러리인 StringBuilderStream API에서 널리 사용되는 대표적 기법임.

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] ArrayDeque  (0) 2025.04.02
[Java] 비동기 처리 (try-catch)  (0) 2025.03.28
[Java] File I/O  (0) 2025.03.18
[Java] BufferedReader  (0) 2025.03.17
[Java] StringTokenizer  (0) 2025.03.16