{Java}

21.08.04{코딩일기} 빨간에러쥬르륵 java StackOverflowError 해결

Davey 2021. 8. 4. 23:17
728x90

 

내가 만든 게임 발표20분 직전 갑자기
특정 객체를 실행시키자마자
StackOverflowError 에러가 길게 떴다.
init()을 시도하면 빨간줄이 수십줄...

# 사건정의

다시봐도 심장쫄깃하다..
이게 만약 내가 CTO이고
신규게임 론칭 발표당일직전
벌어진 에러라면 미친다..

응? 6 ㅇㅅㅇ 왜구랩 JVM아?


스크롤 압박이 느껴진다..HEAP이 분화구처럼 터져서 STACK을 뚫을기세..ㅋㅋㅋ 내가 선언한 참조객체의 경우 HEAP의 변수를 참조하기때문에 저렇게 변수참조 호출을 하는데, 종료가 함수가 없으니깐 터진거다.

 

일단 문제원인부터 말하자면
부모Ground클래스에 생성된 자식클래스 ArcadeStoneMountain객체 호출이 원인이었다.
부모클래스에서는 자식클래스를 호출할 수 없는게 원칙
그래서 해당 호출을 종료시켜줘야했으나
그러지 못했기 때문에 벌어진 헤프닝.

# 문제정의

검색해서 찾아보니 StackOverflowError 에러는 재귀호출 에러였는데,
예를들면 ArcadeGround 클래스를 호출하는 ArcadeStoneMountain클래스 객체를
public ArcadeStoneMountain stm = new ArcadeStoneMountain();
위와같이 ArcadeGround클래스에 생성했더니 재귀호출 에러가 발생했다.

# 문제원인

Ground클래스에서 ArcadeStoneMountain을
사용하는 메소드가 전무했고,
나는 그냥 호출만 하도록
인스턴스만 생성한 상태여서
에러가 발생했다.

# 문제해결

ArcadeStoneMountain의 부모클래스 ArcadeGround가 아닌,
다른 자식ArcadeDesert 클래스에
public ArcadeStoneMountain stm = new ArcadeStoneMountain();
위와같이 동일한 코드를 입력하고 객체를 호출했을땐 아무 문제가 없었다.
그래서 우선 ArcadeGround에선 ArcadeStoneMountain클래스 내부 메소드가
사용할 필요가 없기때문에 코드를 삭제했더니
아주 정상적으로 잘 작동했다.

Copyright ⓒ 2021 by bluevulpe All Contents cannot be copied without permission.

728x90