TIL - 0620

Monkey patch is the anti pattern?

monkey patch 를 찾다보면 anti pattern 이라는 글을 몇번 봤었는데 왜 안티패턴인지에 대해 알아보려 한다.

안티패턴?

몽키패턴이 evil이라고 불리는건 무분별한 사용때문이라는 의견들이 많았다. 물론 아래와 같은 문제점들을 고려해야 한다.

  • 모듈을 업데이트 한후 일부 메소드가 변경되면 모듈에 작성된 패치가 제대로 동작하지 않을 수 있음 -> 주요 버그를 만들거나 적용된 ㅐ치에 따라 웹사이트/앱 충돌 발생
  • 두개이상의 모듈을 한 메서드에 동시 적용하는 경우 어떤 컴포턴트/모듈이 실행되는지에 따라 몽키 패치 의미가 없음
  • 코드를 보는데 있어서 혼란스러움을 야기 시킬수 있음 -> 설치된 모듈과 실제 동작간의 차이점으로 인하여

그렇다면 어떻게 사용해야할까?

‘적당히’ 사용해야한다는 답을 많이 볼수 있었다. (안 그런게 있…을려나) 결과적으로 unittest.mock 번역을 하면서 봤던 것처럼 mock을 함으로서 실제 코드 동작을 예상하는 것이 아니라 내가 예상한대로 테스트를 하는 것이기 때문에 실제와 차이가 있을 수 있다

참고

Monkey patch bad things Monkey patch pros and cons