<선 요약>
- 개념은 알되 위험하니 쓰진 말자
<설명>
- Function Chaining 이라고도 불림.
- Method 나 Function을 연달아 써서 code 양(amount) 을 간소하게 함.
- 다른 method 결과를 호출하기 위해 object 자체를 return 하는 object method.
- this/that 등의 parent 문법에 효과적.
<단점>
(1) Debugging 이 까다로움.
* break point를 간결히 표현한 지점에 둘 수 있을수도 없을 수도 있으므로, 어디서 어떻게 문제가 발생하였는지 알 수 없을 수 있음.
==> 되도록 중간 변수가 있는 별도의 줄바꿈을 두어, 그 부분을 monitoring process로 조사하는 방안이 있음.
* 많은 IDE가 method 호출을 검사 가능 객체로 평가하지 않기에 debugging 어려움.
(2) chain 된 object를 변경하거나, 다른 object의 API와 유사하다면 상당한 혼란이 야기됨.
(3) method가 null 이 아닌 유효한 object를 return 한다는 보장이 없음.
(4) 많은 obejct에 의존할 수 있기에 위험.
==> 여러 식료품 점으로 구성된 obejct인 foodStore가 있다. foodStore.getLocalStore() 는 가장 가까운 상점의 정보를 보여한 object 를 매개변수에 return 한다. getPriceforProduct (anything) 는 해당 object의 method 이다.
==> 여기서 foodStore.getLocalStore (parameters) .getPriceforProduct (anything) 를 호출하면, foodStore 뿐 아니라 localStore에도 의존하게 됨.
==> getPriceforProduct (anything) 가 변경되면 foodStore 뿐 아니라 chained method 를 호출한 클래스도 변경해야 함.
** 항상 클래스 간 느슨한 결합을 목표로 해야함.
<예제 1>
아래는 선과 원을 그리는 java code의 일부다.
// 코드의 일부를 발췌한 Example Method
int main(){
Line line = new Line();
line.setStart(new Point(10, 10));
line.setEnd(new Point(20, 40));
line.setColor(new Color(255,0,0));
line.draw();
Circle circle = new Circle();
circle.setCenter(20, 40);
circle.setRadius(10);
circle.setColor(0,0,255);
circle.setBorderThickness(2);
circle.setBorderColor(0,255,0);
circle.draw();
}
Method Chaining 을 통해 다음으로 요약이 가능하다.
int main(){
Line.from(10, 10).to(20. 40).withColor(255, 0, 0).draw();
Circle
.at(20, 40)
.withRadius(10)
.withColor(0, 0, 255)
.withBorder(Border.withThickness(2).withColor(0, 255, 0).build())
.draw();
}
<예제 2>
일반적인 JavaScript example
<!DOCTYPE html>
<html>
<head>
<title>HTML Console</title>
</head>
<body>
<h3> Output Console </h3>
<p> Output </p>
<div id="output"></div>
<div id="opError" style="color : #ff0000"></div>
<script>
var content =''
var error = ''
var opDiv = document.querySelector('#output')
var opErrDiv = document.querySelector('#opError')
// actual javascript code
try {
let s = 'HELLO WORLD JavaScript is Awesome'
s = s.toLowerCase()
s = s.replace(/ /g, '|') // grobally replace all spaces
s = s.trim()
content += "Value of s: " + JSON.stringify(s) + '<br>'
}
catch (err) {
error += err
}
finally {
// display on output console
opDiv.innerHTML = content
opErrDiv.innerHTML = error
}
</script>
</body>
</html>
Method Chainging 을 적용한 JavaScript Example
<!DOCTYPE html>
<html>
<head>
<title>HTML Console</title>
</head>
<body>
<h3> Output Console </h3>
<p> Output: </h3>
<div id="output">
</div>
<div id="opError" style="color : #ff0000">
</div>
<script>
var content = ''
var error = ''
var opDiv = document.querySelector('#output')
var opErrDiv = document.querySelector('#opError')
// actual javasript code
try {
let s = 'HELLO WORLD JavaScript is Awesome'
s = s
.toLowerCase()
.replace(/ /g, '|')
.trim()
content += "Value of s: " + JSON.stringify(s) + '<br>'
}
catch (err) {
error += err
}
finally {
// display on output console
opDiv.innerHTML = content
opErrDiv.innerHTML = error
}
</script>
</body>
</html>
<출처 1> https://okky.kr/articles/565735?note=1662962
<출처 2> https://www.tutorialspoint.com/method-chaining-in-javascript
<출처 4>
'Programing > Knowledge' 카테고리의 다른 글
[Knowledge] Runtime (런타임) (0) | 2022.09.12 |
---|---|
[Knowledge] Parity Bit (0) | 2022.09.08 |
[Knowledge] Token (토큰) (0) | 2022.08.25 |
[Knowledge] Domain Specify Language (DSL) (0) | 2022.08.20 |
댓글