CS/CS

메서드 체이닝(Method Chaining)

annovation 2024. 12. 5. 11:53

메서드 체이닝(Method Chaining) 

 

메서드 체이닝(Method Chaining)이란 한 객체의 메서드 호출이 연속적으로 이어질 수 있도록 설계된 프로그래밍 패턴입니다.
즉, 하나의 메서드를 호출한 결과로 반환된 객체가 또 다른 메서드를 호출할 수 있게끔 설계된 방식입니다.

 

  • 객체 상태 변경이나 연산을 연속적으로 수행할 수 있음
  • 메서드가 자기 자신의 객체(혹은 관련된 객체)를 반환하여 다음 메서드 호출을 가능하게 함
  • 가독성 향상 : 중첩된 코드를 줄이고 직관적으로 표현 가능

 


예제

 

1. 메서드 체이닝 없이

public class User {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("Alice");
        user.setAge(25);

        System.out.println(user);
    }
}

 

2. 메서드 체이닝 사용

public class User {
    private String name;
    private int age;

    public User setName(String name) {
        this.name = name;
        return this; // 현재 객체(User)를 반환
    }

    public User setAge(int age) {
        this.age = age;
        return this; // 현재 객체(User)를 반환
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User()
            .setName("Alice") // 메서드 체이닝
            .setAge(25);      // 메서드 체이닝

        System.out.println(user); // 출력: User{name='Alice', age=25}
    }
}

 

  • 메서드는 호출 결과로 현재 객체 또는 다른 객체를 반환
  • 반환된 객체가 다시 메서드를 호출할 수 있는 상태가 되어 연속적인 호출이 가능

3. Stream API

Java의 Stream API도 메서드 체이닝을 적극 활용

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream.of(1, 2, 3, 4, 5)
            .filter(n -> n % 2 == 0) // 짝수 필터링
            .map(n -> n * n)         // 제곱 계산
            .forEach(System.out::println); // 출력
    }
}

요약

메서드 체이닝은

  • 메서드 호출 결과로 객체를 반환하여 연속적인 호출을 가능하게 하는 패턴
  • 가독성을 높이고 코드의 간결성을 제공
  • 단, 사용 시 적절한 설계와 제한이 필요

출처

OpenAI ChatGPT (https://openai.com)

 

반응형

'CS > CS' 카테고리의 다른 글

CRUD  (0) 2025.01.07
버퍼 (Buffer)  (0) 2025.01.04
명령형(imperative) VS 선언형(declarative) 프로그래밍  (1) 2024.12.05
레이어드 아키텍처 응용 (Layered Architecture)  (0) 2024.12.03
TDD (Test-Driven Development) feat. JUNIT  (0) 2024.12.02