메서드 체이닝

hyunwoo·2023년 1월 23일
0

🌳 Java 지식

목록 보기
17/21

참고: https://nemomemo.tistory.com/40

(간단) Method Chaining (= 메서드 체이닝, 메서드체인)

의미그대로 메서드들을 체인으로 엮듯이 아래처럼 엮어 호출되는 프로그래밍 패턴.

  • 객체지향프로그래밍(OOP)에서 여러 함수를 호출하는 일반적인 방식
  • 특정 메소드 리턴값을 변수에 저장없이 단일 명령문에 리턴값의 메소드 호출을 연결해서 사용

예시

A.method1().method2(a,b).method3()..

메소드 리턴 객체를 받고 이 리턴 객체의 메소드를 호출하는 방법을 반복한다.
=> A.method1()의 리턴값에서 method2(a.b)메소드 호출 -> method2()의 리턴값에서 method3()메소드 호출

참고: https://developerntraveler.tistory.com/116



메서드 체이닝 설명(1)

연속적인 코드 줄에서 개체의 메서드를 반복적으로 호출하는 것을 의미한다.

예제

가게(store)에는 enter, leave 메서드가 있다.

const store = {
    name: "see you",
    opacity: 30,
    peopleCount: 0,
    enter(n) {
        this.peopleCount += n;
    },
    leave(n) {
        this.peopleCount -= n;
    }
};

만약 2명의 손님이 들어오고, 1명의 손님이 나가고 다시 2명의 손님이 들어왔다면 아래와 같이 구현할 수 있다.

store.enter(2);
store.leave(1);
store.enter(2);

이 경우 메서드 체이닝을 사용하면 다음과 같이 사용할 수 있다.

store.enter(2).leave(1).enter(2);


참고: https://my-devblog.tistory.com/5

메서드 체이닝 설명(2)

OOP에서 여러 메서드를 이어서 호출하는 문법입니다.

메서드가 객체(this)를 반환하여 여러 메소드를 순차적으로 선언할 수 있도록 합니다.

메서드 체이닝을 이용하면 코드가 간결해져 하나의 문장처럼 읽히게 할 수 있다는 장점이 있고 장기적으로는 유지보수에 도움이 됩니다.

예시

아래에 메소드 체이닝을 적용한 가상의 DBConnector 클래스를 구현하였습니다.

클래스 (DBConnector - Javascript)

class DBConnector {
    constructor(host, port, user, passwd) {
        this.host = host;
        this.port = port;
        this.user = user;
        this.passwd = passwd;
    }

    setHost(host) {
        this.host = host;
        return this;
    }

    setPort(port) {
        this.port = port;
        return this;
    }

    setUser(user) {
        this.user = user;
        return this;
    }

    setPasswd(passwd) {
        this.passwd = passwd;
        return this;
    }

    connect() {
        console.log('host: ' + this.host + '\n' +
                    'port: ' + this.port + '\n' +
                    'user: ' + this.user + '\n' +
                    'passwd: ' + this.passwd);
    }
}

메서드 체이닝을 적용하기 전

const dbc = new DBConnector();
dbc.setHost('127.0.0.1');
dbc.setPort('8080');
dbc.setUser('username');
dbc.setPasswd('passwd');
dbc.connect();

메서드 체이닝을 적용한 후

const dbc = new DBConnector().setHost('127.0.0.1').setPort('8080').setUser('username').setPasswd('passwd').connect();

메소드 체이닝을 적용한 후를 확인해보면 코드가 조금 더 간결해진 것을 확인할 수 있습니다.

그러나 이렇게 작성된 코드는 하나의 라인에 너무 많은 일이 일어날 수 있어 디버깅을 하기가 어렵다는 단점이 있습니다.

적절히 상황에 맞게 이용하는 것이 중요할 것입니다.

0개의 댓글