본문 바로가기
~2024.10

메소드 체이닝(Method Chaining) 정리(예제 포함)

by HJfan 2024. 3. 9.

01. 개념 및 의미

"메소드 체이닝은 한 객체의 메소드를 연속적으로 호출하는 프로그래밍 패턴이다.

 이는 각 메소드가 현재 객체를 참조하는 'this' 또는 'self'를 반환함으로써 가능하게 한다."

 라고 합니다. 백문불여일견, 설명만 봐서는 이해가 안 되니 바로 예제 코드를 작성해 봅시다.


02. 예제

//Method Chaining 적용 java 코드

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

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

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

    public void print() {
        System.out.println("이름: " + name + ", 나이: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("홍길동").setAge(30).print();
    }
}

 

예제 코드를 통해 Method Chaining에 대해 설명하기 전, 다른 방법(getter/setter를 사용)으로 동일한

동작을 하도록 구현한 예제 코드도 살펴보겠습니다.

//getter&setter을 적용한 java 코드

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

    // Getter 메서드
    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }

    // Setter 메서드
    public void setName(String name) {
        this.name = name;
    }

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

    public void print() {
        System.out.println("이름: " + name + ", 나이: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("홍길동");
        user.setAge(30);
        user.print();
    }
}

03. 예제를 통한 설명

두 예제의 차이가 보이시나요?

메소드 체이닝 방식을 사용한 예제에서는 setName과 setAge 메소드에서 입력 받은 값을 User라는 클래스의

멤버 변수인 name과 age에 저장 후 this를 return 합니다. 그에 비해 getter/setter 방식을 사용한 예제에서는

setName과 setAge 메소드에서 값을 받아 멤버 변수에 저장하고, getName과 getAge라는 메소드가 멤버 변수의

값을 return하고 있습니다. 그리고 main 메소드의 코드에도 차이가 있습니다.

 

User 클래스의 인스턴스인 user 객체를 생성하는 단계까지는 동일하지만, 한 줄로 메소드를 호출하여 필드에 값을

저장 후 출력까지 하는 Method Chaining 예제와는 달리, getter/setter 예제는 동일한 결과를 얻기 위해 3줄의

코드를 작성한 것을 볼 수 있습니다.

 

Method Chaining 방식으로 코드를 구현하는 방법을 익혀둔다면, 코드의 가독성 향상에 큰 도움이 될 것입니다.

단, 메소드 체이닝 방식으로 코드를 구현하기 위해선 반드시 this를 return해야 하고, 이는 반환값을 다른 용도로

사용하고 싶을 때 제약이 될 수도 있으니 자신이 목표하는 동작을 미리 파악하고, 적절히 사용하는 것이 중요하답니다.