몽키패치는 원래 소스코드를 변경하지 않고 실행 시 코드 기본 동작을 추가, 변경 또는 억제하는 기술이다. 쉽게 말해 어떤 기능을 위해 이미 있던 코드에 삽입하는 것이다.
자바스크립트의 endwWith 함수를 예를 들어보자. 이 함수는 어떤 문자열에서 특정 문자열로 끝나는지를 확인할 수 있으며, 그 결과를 true 혹은 false로 반환한다. 만약 이 함수가 없었다면 이 기능을 어떻게 구현했을까
첫 번째 방법은 유틸리티 객체를 만드는 것이다.
var Utility = {
endsWith : function(string,suffix){
return string.indexOf(suffix, string.length - suffix.length) !== -1;
}
};
var isSuffix = Utility.endsWith('Hello world','ld');
다른 방법은 String 내장 객체에 함수를 정의하는 것인데, 이게 바로 몽키패치이다.
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
var isSuffix = 'hello world'.endsWith('ld');
몽키패치의 다른 예로 console.log에 타임스탬프를 찍어보면
var log = console.log;
console.log = function() {
log.apply(console, [(new Date()).toString()].concat(arguments));
};
몽키패치를 사용하면 console.log를 재정의 또는 확장하여 타임스탬프를 찍는 console.log를 만들 수 있다.
몽키패치는 기존 코드와의 충돌이 있을 수 있기 때문에 종종 위험한 기술로 간주된다.