🏭 에러공장 11편 - StackOverflowError 오류 해결법

StackOverflowError재귀 함수 호출이 끊임없이 반복되어 JVM의 스택 메모리 한계를 넘을 때 발생합니다.

Exception in thread "main" java.lang.StackOverflowError

컴파일은 문제없이 통과하지만, 실행 중에 재귀가 무한 반복되면 메모리가 넘쳐 터지는 거죠!


❓ 대표 발생 사례

✅ 1. 종료 조건이 없음

public void callMyself() {
    callMyself();  // 🔥 무한 호출 → StackOverflowError
}

✅ 2. 종료 조건이 잘못됨

public void countdown(int n) {
    if (n == 0) return;
    countdown(n + 1);  // ❌ 탈출을 못하고 증가 중
}

✅ 3. 상호 재귀

void a() { b(); }
void b() { a(); }

✅ 4. 깊은 재귀

탈출 조건은 있지만 너무 깊은 호출 (ex. 피보나치, 하노이탑)


🛠 해결 전략

  • 종료 조건을 명확히 설정
  • 디버깅으로 종료 지점이 도달하는지 확인
  • 가능하면 반복문(loop)으로 구조 변경
  • -Xss로 JVM 스택 메모리 키우기 (근본해결 아님)
java -Xss2m MyProgram  // 스택 메모리 2MB 설정

📌 전체 설명 보기

👉 https://koynalpha-dev.tistory.com/entry/error11


🏷️ 추천 태그

Java, StackOverflowError, 재귀 함수 오류, 무한 호출, call stack 초과, 재귀 탈출 조건, 에러공장, 자바 디버깅


👉 다음 글 예고

에러공장 12편: NumberFormatException - 숫자처럼 생겼지만 숫자가 아냐!