[JAVA] - 스택 오버플로우(Stack Overflow)

박주찬·2024년 6월 7일

JAVA

목록 보기
1/1

재귀 호출이란?

함수(또는 메서드)가 자기 자신을 호출하는 프로그래밍 기법을 말합니다.
일반적으로 재귀 호출은 복잡한 문제를 단순한 형태로 쪼개서 해결할 수 있는 유용한 방법입니다. 그러나 잘못 사용하면 무한 루프 에 빠지거나 스택 오버플로우(Stack Overflow)를 일으킬 수 있습니다.



아래 코드는 재귀 호출을 잘못 사용한 예제입니다.

// 무한 루프에 빠지게 된 코드
@Override
public int keyword_delete(int reviewno) {
    int cnt = this.keyword_delete(reviewno);
    return cnt;
}

스프링에서 실행 결과
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
	at dev.mvc.keyword.KeywordProc.keyword_delete(KeywordProc.java:37) ~[main/:na]
    ㅋㅋㅋ

이 코드에서는 keyword_delete 메서드가 자기 자신을 계속 호출하고 있습니다. 이로 인해 무한 재귀 호출이 발생하며, 결국에는 스택 오버플로우가 발생합니다.

올바른 수정 방법

재귀 호출을 사용하려면 재귀 호출의 종료 조건(Base Case)을 명확히 정의해야 합니다.




결론

재귀 호출은 강력한 도구지만, 잘못 사용하면 프로그램이 비정상적으로 동작할 수 있습니다.

1시간동안 keywordDAO 이걸 안쓴걸 깜빡해서 고생했는데 암튼 이걸 조심해야 하겠네요

 @Override 
  public int keyword_delete(int reviewno) {
    int cnt = this.keywordDAO.keyword_delete(reviewno);
    return cnt;
  }
profile
Diamond

0개의 댓글