이클립스와 같은 IDE에서는 새로운 메소드를 참조하는 코드를 만들면, 퀵픽스 기능을 이용해서 해당 메소드를 자동으로 만들게 할 수 있다. 예를 들어 테스트를 만들고 있는데, 아직 만들지 않은 메소드를 사용하는 검증 코드를 먼저 만들면, 참조할 메소드가 없으니 에러가 난다. 그때 퀵픽스 기능을 이용해서 메소드를 추가하면 편리하게 해당 클래스에 필요한 메소드가 나타난다.

이클립스의 기본 설정은 메소드 바디 안에 간단한 자동생성된 메소드라는 커멘트만 남기고 만다.

이를 그대로 두고 사용하면 TDD를 포함한 테스트 작성시에는 물론이고, 자동 메소드 생성기능을 이용해서 코드를 만드는 습관이 있는 개발자들은 당황스러운 결과를 맞게 될 수 있다. 자동 생성된 코드는 일단 컴파일 에러에서 벗어나게 해준다. 그리고 의미없는 값(null, 0)을 리턴한다. 이럴 경우 운 좋게 테스트를 그냥 통과해 버리거나, 당장에는 별 문제없이 전체 코드가 동작해버리는 수가 있다. 처음 그 메소드가 필요한 상황을 그런 식으로 넘어가 버리면 나중에 찾기 힘든 심각한 버그를 만들 수 있다.

그래서 이런 경우를 위해서 유용하게 사용할 수 있는 방법이 자동생성되는 메소드 안에 throw new UnsupportedOperationException()을 넣도록 해주는 것이다.

이클립스라면 Preference – Java – Code Style – Code Templates 안에 Code/Method Body에 이를 추가해주면 된다.

 

이렇게 하면 TDD에서건 일반 코딩에서건 자동생성 기능을 사용해서 빈 메소드를 만들고선 깜빡하고 그냥 지나치지 않게 된다. 그 메소드를 호출할 때마다 아직 지원되지 않는 예외가 던져져서 그 메소드를 만든 이유를 확인해보고, 필요한 코드를 넣게 되기 때문이다. TDD라면 컴파일에러는 피했지만, 테스트는 실패하는 경우가 되므로 역시 유용하다.

 

나는 이 팁을 오래전에 Rod Johnson이 쓴 J2EE Development without EJB에서 배웠다. 그 때 이 팁을 보고 상당히 감탄했던 기억이 난다. 사실 그 전에는 UnsupportedOperationException이라는게 있는 줄도 몰랐는데, 이런 경우 적용하기에 적절하다는 것도 알게 되었다. 그 뒤로는 이클립스를 새로 세팅할 때마다 가장 먼저 이 설정을 넣는다. 참여하는 프로젝트의 팀원에게도 항상 이것을 넣도록 요구했는데, 대부분 잘 따라주었고 사용하면서 만족스러워했던 것 같다.

 

오늘 Kent Beck의 Twitter를 보다가 같은 얘기를 발견했다.

KentBeck: putting "throw new UnsupportedOperationException();" in generated method bodies saves me a lot of searching when i’m distracted

JUnit Max를 개발하느라 꽤나 많은 개발에 시간을 보내고 있는 켄트 벡에게도 이 방법은 매우 절실하게 느껴졌나보다. 물론 TDD를 하고 있고, 이클립스에서 개발을 하니 당연히 테스트 코드를 먼저 만들고, 컴파일 에러를 없애기 위해 코드자동 생성기능을 활용하고 있을 것이다.

 

이어서 이런 글도 올라왔다.

i also set an exception breakpoint on UnsupportedOperationException. this lets me code in a debugger with real data values in front of me.

이것은 켄트 벡에게서 새롭게 배우게 된 팁이다. 이 익셉션이 발생할 때 디버거가 동작하도록 브레이크 포인트를 잡아 놓으면, 그 구현되지 않은 코드에 대해 작업하는 상황에서 현재 어떤 데이터들이 존재하는지를 확인할 수 있다. 멋진 방법이라고 생각된다. 코딩을 위해서 필요한 가장 이상적인 환경을 디버거를 이용해서 자연스럽게 만들어주는 것이다. 이건 DDD(Debugging Driven Development)가 아닐까? 개발과정으로서의 디버깅이라.. 멋진데?

 

JUnit Max를 쓰면서 느꼈던 것처럼, 툴의 발전과 함께 개발방법과 전략도 함께 발전하는 것 같다. 이런 생각을 해낼 수 있는 것이 창조적인 사고를 가진 사람의 태도이고, 동시에 게으른 개발자의 특징이기도 하다.

Related posts:

  1. 유쾌한 이슈처리 재촉 메일

Facebook comments:

to “자동생성되는 메소드에 throw new UnsupportedOperationException() 넣기”

  1. I was able to find good information from your blog articles.

  2. that would be the end of this article. Right here you will locate some internet sites that we consider you will appreciate, just click the hyperlinks over

  3. May I simply say what a relief to discover someone who genuinely understands what they’re talking about over the internet. You definitely realize how to bring an issue to light and make it important. More and more people really need to check this out and understand this side of the story. I was surprised you are not more popular since you surely have the gift.

  4. The very next time I read a blog, I hope that it doesn’t fail me as much as this particular one. I mean, I know it was my choice to read, nonetheless I genuinely thought you would probably have something helpful to talk about. All I hear is a bunch of whining about something you can fix if you were not too busy searching for attention.

  5. the time to read or go to the content material or websites we’ve linked to beneath the

  6. Buy Celexa 20 Mg http://abuycialisb.com – cialis 5 mg Canadian Pharmacy Norx Com Buy Cialis Viagra A 40 Anni

  7. that will be the end of this write-up. Here you will find some websites that we believe you will appreciate, just click the hyperlinks over

  8. Sites of interest we have a link to

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha