StackWalker — 스택 워커 클래스
StackWalker — 스택 워커 클래스
StackWalker는 스택을 탐색(walk)하는 도구예요. walk 메서드는 현재 스레드의 StackFrame 순차 스트림을 열고, 주어진 함수를 적용해 StackFrame 스트림을 탐색해요. 스트림은 스택의 맨 위(스택이 생성된 실행 지점)부터 맨 아래까지 순서대로 스택 프레임 요소를 보고해요. walk 메서드가 반환되면 StackFrame 스트림은 닫혀요. 닫힌 스트림을 재사용하려 하면 IllegalStateException이 던져져요. StackWalker의 스택 워킹 옵션은 반환될 StackFrame 객체의 정보를 결정해요.
본문
public static StackWalker getInstance() — 기본 옵션으로 StackWalker 인스턴스를 반환해요.
public static StackWalker getInstance(StackWalker.Option option) — 지정된 단일 옵션으로 StackWalker 인스턴스를 반환해요.
public static StackWalker getInstance(Set<StackWalker.Option> options) — 지정된 옵션 집합으로 StackWalker 인스턴스를 반환해요.
public static StackWalker getInstance(Set<StackWalker.Option> options, Predicate<Class<?>> filter) — 지정된 옵션과 클래스 필터로 StackWalker 인스턴스를 반환해요.
public <T> T walk(Function<? super Stream<StackWalker.StackFrame>, ? extends T> function) — 현재 스레드의 스택 프레임 스트림을 열어 주어진 함수를 적용하고 그 결과를 반환해요. 함수가 반환되면 스트림이 닫혀요. 이 메서드가 스택 프레임 스트림을 안전하게 탐색하는 권장 방식이에요.
public void forEach(Consumer<? super StackWalker.StackFrame> action) — 현재 스레드의 각 스택 프레임에 대해 주어진 액션을 수행해요.
public Class<?> getCallerClass() — getCallerClass()를 호출한 메서드의 호출자 클래스를 반환해요. 이 옵션(RETAIN_CLASS_REFERENCE)이 켜진 StackWalker에서만 사용할 수 있어요.
SHOW_HIDDEN_FRAMES, SHOW_REFLECT_FRAMES, RETAIN_CLASS_REFERENCE 같은 Option을 조합해 스택 탐색 동작을 제어할 수 있어요. Thread.getAllStackTraces()보다 가볍고 안전하게 현재 스택을 탐색하는 용도로 사용돼요.