예제 3을 위한 리팩토링 제안
스택 추적 예제라는 점에서 리팩토링 후보는 먼저 문자열로 스택 추적 요소를 인코딩한 후 이를 공개하는 대신, 스택 추적 요소를 프로그래밍적으로 공개하는 방식이다. 자바 API는 버전 1.4부터 StackTraceElement 클래스를 도입하여 스택 추적 과정에서 프로그래밍적으로 접근할 수 있게 개선했다. 새로운 메서드를 추가했지만, printStackTrace() 메서드와 스택 추적 형식은 기존 클라이언트를 지원하려고 계속 유지하고 있다는 점에 주목하자.
public class Throwable { public void printStackTrace(); public StackTraceElement[] getStackTrace(); // 1.4부터 // 다른 메서드는 생략했다. }
StackTraceElement는 원래 설계에서 ‘누락된 추상화’였다. 자바 1.4에서는 다음과 같이 도입했다.
public final class StackTraceElement { public String getFileName(); public int getLineNumber(); public String getClassName(); public String getMethodName(); public boolean isNativeMethod(); }