Function hook 테크닉 (템플릿 메소드 패턴)

Posted by epicdev Archive : 2012. 10. 8. 21:57

오늘은 Function hook 테크닉을 소개하고자 합니다.

테크닉의 명칭은 제가 그냥 이 테크닉을 알게된 코드의 주석에서 따온 거구요, 이 테크닉에 대한 정식 명칭이 있는지는 잘 모르겠습니다.

이 테크닉은 제가 JDK의 HashMap 코드를 보다가 접하게 되었습니다만 사실 예전부터 그냥 인지하지 못하고 가끔씩 사용하던 패턴이었고,

실제로 다른 분들도 많이 사용하시리라 생각합니다.


업데이트 (2013.03.20)

역시나 이 테크닉 또한 디자인 패턴이었군요. 템플릿 메소드 패턴이라고 불리는 디자인 패턴입니다.

자세한 내용은 아래의 링크를 참고하시길...

http://en.wikipedia.org/wiki/Template_method_pattern


우선 제가 접한 코드를 보도록 하겠습니다.



위의 코드에는 HashMap의 생성자들과 init이라는 함수가 있습니다.

init()은 HashMap의 생성자들의 맨 마지막에 호출이 되는 함수입니다.

그런데 이상하게도 init()의 body는 텅 비어있습니다.

텅 비어있는 함수를 왜 생성자 마지막에 호출하는 것일까요?


init()의 javadoc에는

Initialization hook for subclasses. This method is called in all constructors and pseudo-constructors

라고 적혀있습니다.


즉, 이 init()은 하위 클래스에서 추가적인 초기화 코드가 필요할 경우 init()을 오버라이드해서 사용할 수 있도록 미리 상위 클래스에서 만들어 놓은 함수입니다.

이렇게 하게되면 굳이 하위 클래스에서 모든 생성자를 override해서 초기화 코드를 넣지 않아도 됩니다.

그냥 간단하게 init()이라는 함수만 override해서 초기화코드를 넣으면 되는 것입니다.

이러한 function hook 테크닉은 초기화 코드 뿐만 아니라, 상속 후 기능 확장이 예상되는 부모클래스의 다양한 곳에서 사용 될 수 있습니다.


정리하자면, function hook 테크닉은 어떤 부모 클래스를 만들 때 하위 클래스에서 확장이 필요할 것 같은 부분을 부모 클래스를 설계 할 때 미리 파악해서

하위 클래스가 좀 더 수월하게 부모 클래스를 확장시킬 수 있도록 도와주는 테크닉이라고 할 수 있겠습니다.

'Archive' 카테고리의 다른 글

오픈소스 라이센스의 종류  (0) 2013.02.12
우분투 창 버튼 오른쪽으로 옮기기  (0) 2012.12.22
KAIST 셔틀 for Android  (0) 2012.09.15
Word Cloud 생성기  (0) 2012.09.08
SVN Branch & Merge 헷갈릴 때 참고할만한 글  (0) 2012.09.06