Computer Science/프로그래밍 언어 기초

무한 루프(Infinite Loop)의 위험성

UNarD 2025. 4. 22. 12:42

🌀 무한 반복문, 진짜 괜찮은 걸까?

"while(true) 뭐 어때요, 그냥 계속 돌리면 되는 거 아닌가요?"

단순히 계속 반복한다는 건 쉽지만,
컴퓨터 입장에서는 어마어마한 자원 소모가 될 수 있어요!
지금부터 무한 루프의 위험성과 똑똑한 사용법을 함께 정리해볼게요 😊


⚠️ 무한 루프가 시스템에 미치는 영향

항목 설명
CPU 폭주 조건 없이 계속 반복되면 CPU가 100%를 향해 달립니다. 다른 작업은 버벅이고, 팬이 미친 듯이 돌아가요.
메모리 누수 반복문 안에서 객체를 계속 만들거나 리스트에 값을 추가하면, GC가 처리할 틈도 없이 메모리가 가득 찹니다. 결국 OutOfMemoryError가 터질 수도!
앱/시스템 멈춤 UI가 무한 루프에 묶이면? 사용자는 아무것도 못합니다. 입력도 클릭도 안 먹혀요. (응답 없음!)
비정상 종료 에러 처리가 안된 무한 반복은 같은 예외를 계속 발생시켜 로그가 넘치고, 프로그램이 다운되기도 해요.
탈출 조건 없음 실수로 빠진 종료 조건 하나가 전체 시스템을 무너뜨릴 수 있어요. 디버깅? 정말 어렵습니다.

💡 예시 코드로 보는 위험한 무한 루프

while (true) {
    System.out.println("계속 출력 중...");
}

단순하지만...
멈추지 않으면 CPU와 메모리를 잠식하는 괴물이 됩니다

💬 반복문을 안전하게 사용하는 습관

습관 설명
명확한 종료 조건 반복 횟수나 탈출 조건을 꼭 작성해 주세요.
자원 사용 최소화 루프 안에서 객체를 새로 만들거나, 큰 데이터를 반복해서 불러오지 마세요.
break, return 적극 활용 특정 조건에서 빠져나올 수 있도록 탈출구를 마련해 두세요.
디버깅용 로그 활용 무한 루프가 의심되면 로그를 찍어보는 것도 큰 도움이 됩니다.
반복 간 휴식 (sleep) 자바, 파이썬 등 대부분의 언어는 sleep() 제공 → CPU를 쉬게 해줄 수 있어요.

🛌 스레드를 쉬게 하자! sleep()의 활용

무한 루프도 휴식이 필요합니다!
계속 반복하면 지치니까, 적당히 쉬어가면서 반복하세요 ☕

✅ 기본 패턴

while (true) {
    작업 수행
    1초 쉬기 (sleep 1000ms)
}

💡 언어별 sleep 예시

언어 사용 예
Java Thread.sleep(1000);
Python time.sleep(1)
JavaScript await new Promise(r => setTimeout(r, 1000)) (async)

🧩 언제 쓰나요?

  • ✅ 서버에서 주기적으로 상태 체크할 때
  • ✅ 애니메이션, 슬라이더 같은 GUI 처리할 때
  • ✅ 센서, 하드웨어 모니터링 시에도 활용돼요

📌 sleep 없이 무한 반복하면?

증상 설명
전력 낭비 계속해서 CPU가 쉬지 않고 작동해 배터리 소모↑
팬 과열 노트북 팬이 미친 듯이 돌아가고 발열 발생
시스템 버벅임 다른 작업까지 느려지고, 전체 시스템에 악영향

☕ 마무리

무한 반복은 컴퓨터의 엔진처럼 강력하지만, 통제되지 않으면 재앙이 될 수 있습니다.
항상 종료 조건과 휴식을 넣어주세요 🙏