'전략'에 해당되는 글 1건

  1. 2007.03.03 Replace Conditional Logic with Strategy by 김민재
오늘 3주만에 RTP 스터디 모임을 가졌다. 8명 중 4명만 나왔지만,, 개인적으로는 여러 개념들을 익힐 수 있는 좋은 시간을 가졌던거 같다. 요즘 화이트보드 쓰는 재미에 땀내며 얘기를 한지라.. 다녀와서는 집에서 골골했다.

Strategy
패턴은 Composite 패턴과 더불어 설계 패턴 중 그 입지가 대단히 중요하다.
전략이라는 단어의 무게감만큼이나..

RTP 책에서는 Loan 클래스의 capital() 메소드를 리팩토링하면서 Strategy패턴을 to 혹은 toward 하는 방법을 설명하고 있다. 그것도 아주 효율적으로.. 역시 켄트벡, 워드 커닝햄, 마틴 파울러의 덕담이 빈말은 아니었다는걸 느낀다.

혹자는 이런 말을 한다.. 프로그래밍은 if else만 쓰면 된다고,, 사실은 내가 프로그래밍을 처음 했을 때 들은 얘기다. 지금 생각해 보면 말도 안된다. if else를 거의 제거하면(쓸때는 꼭 써야겠지..) 프로그래밍을 조금 할 줄 안다가 맞는 소리인듯..

이 카탈로그도 복잡한 if-else를 Strategy 패턴으로 바꾸는 과정이다. 그래서 자연스럽게 Strategy 패턴에 다다르거나 지향하면 되는 것이다.

CapitalStrategy란 클래스 없이 있던 Loan에 전략 참모를 두고,, Loan 스스로는 컨텍스트 클래스가 된다. 전략 참모는 객체 조합 방식으로 has-a 한다. 위임이다.

그런 다음에 마틴파울러의 저수준 리팩토링(Introduce Parameter Object, Extract Parameter, Replace Type Code with SubClasses)을 사용하면서 진행하면 된다.

매 카탈로그마다 개인적으로 가장 중요하다 싶은 것은 스케치동기이다. 이 카탈로그도 스케치를 보면 한눈에 알 수 있는 것처럼, 복잡한 if-else를 composition(객체조합)과 inheritance(상속)를 적절히 사용함으로써 빛나는 Strategy 패턴에 이르렀다.

여기서 또하나 중요한 것은 Extract Parameter이다. 조슈아도 언급했듯이 이 카탈로그는 "짧고 달콤한 리팩토링"이다. 여기서는 loan의 stretegy를 파라메타로 뽑음으로써 strategy의 종류를 클라이언트가 결정할 수 있게 되었다. 이것이 IoC의 근간인 것이다.

자바지기도 스프링을 설명하면서 Stretegy 패턴과 같이 생각하라고 조언했는데, 이제야 제대로 이해가 되었다.
신고
Posted by 김민재

티스토리 툴바