1. 몽키패치란


몽키패치는 원래 소스코드를 변경하지 않고 실행 시 코드 기본 동작을 추가, 변경 또는 억제하는 기술이다. 쉽게 말해 어떤 기능을 위해 이미 있던 코드에 삽입하는 것이다.

자바스크립트의 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를 만들 수 있다.

2. 몽키패치의 단점


몽키패치는 기존 코드와의 충돌이 있을 수 있기 때문에 종종 위험한 기술로 간주된다.