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

이건호·2025년 4월 8일
0

✅ 메서드 체이닝(Method Chaining) 개념

📌 정의

  • 객체 지향 프로그래밍에서 여러 메서드를 하나의 문장에서 연속으로 호출하는 방식을 의미.
  • 메서드를 호출할 때마다 그 결과로 동일 객체를 반환하여 다음 메서드를 이어서 호출할 수 있음.

📌 특징

  • 가독성 증가: 메서드를 연달아 호출할 수 있어 코드가 더 간결하고 직관적으로 보일 수 있음.
  • 객체의 일관성 유지: 동일한 객체에서 메서드를 연속으로 호출할 수 있으므로 상태 관리가 일관됨.
  • 빌더 패턴에서 자주 사용됨: 특히 Java에서 객체 생성을 간편하게 하기 위해 빌더 패턴과 함께 사용됨.

💡 예제 (Java)

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

    public Person setName(String name) {
        this.name = name;
        return this; // 현재 객체를 반환하여 메서드 체이닝을 가능하게 함
    }

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

    public void printPerson() {
        System.out.println("Name: "+  name + ", Age: " + age);
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("Alice").setAge(30).printPerson();
    }
}

📌 출력

Name: Alice, Age: 30
  • 여기서 setName()setName() 메서드가 Person 객체를 반환하기 때문에 메서드 체이닝이 가능함.

💡 예제 (JavaScript)

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    setName(name) {
        this.name = name;
        return this; // 현재 객체를 반환하여 체이닝 가능하게 함
    }

    setAge(age) {
        this.age = age;
        return this;
    }

    printPerson() {
        console.log(`Name: ${this.name}, Age: ${this.age}`);
        return this;
    }
}

const person = new Person();
person.setName("Alice").setAge(30).printPerson();

📌 출력

Name: Alice, Age: 30

🎯 메서드 체이닝의 장점

  1. 간결한 코드 작성: 불필요한 변수를 줄이고 코드가 깔끔해짐.
  2. 객체의 일관성 유지: 객체의 상태를 일관되게 관리하기 쉬움.
  3. 가독성 향상: 연속적인 작업 흐름을 쉽게 파악할 수 있음.

⚠️ 주의 사항

  • 동일한 객체를 반환하는 메서드를 구현해야 함: 메서드 체이닝을 사용하려면 메서드들이 this 객체를 반환해야 함.
  • 디버깅이 어려울 수 있음: 체이닝이 길어지면 디버깅 과정에서 원인 파악이 어려울 수 있음.
  • 불변 객체의 경우 사용 불가: 예를 들어, String 클래스는 불변(immutable) 객체이기 때문에 체이닝을 사용해도 원본 객체는 변하지 않음.

📌 Spring Framework에서의 사용 예시

@RequestMapping(value = "/example", method = RequestMethod.GET)
public ResponseEntity<String> example() {
    return ResponseEntity
            .status(HttpStatus.OK)
            .header("Content-Type", "application/json")
            .body("{\"message\":\"Hello, World!\"}");
}
profile
주니어 자바 개발자 이건호입니다!

0개의 댓글