참고: https://nemomemo.tistory.com/40
의미그대로 메서드들을 체인으로 엮듯이 아래처럼 엮어 호출되는 프로그래밍 패턴.
- 객체지향프로그래밍(OOP)에서 여러 함수를 호출하는 일반적인 방식
- 특정 메소드 리턴값을 변수에 저장없이 단일 명령문에 리턴값의 메소드 호출을 연결해서 사용
A.method1().method2(a,b).method3()..
메소드 리턴 객체를 받고 이 리턴 객체의 메소드를 호출하는 방법을 반복한다.
=> A.method1()의 리턴값에서 method2(a.b)메소드 호출 -> method2()의 리턴값에서 method3()메소드 호출
참고: https://developerntraveler.tistory.com/116
연속적인 코드 줄에서 개체의 메서드를 반복적으로 호출하는 것을 의미한다.
가게(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
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();
메소드 체이닝을 적용한 후를 확인해보면 코드가 조금 더 간결해진 것을 확인할 수 있습니다.
그러나 이렇게 작성된 코드는 하나의 라인에 너무 많은 일이 일어날 수 있어 디버깅을 하기가 어렵다는 단점이 있습니다.
적절히 상황에 맞게 이용하는 것이 중요할 것입니다.