일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- xcode앱만들기 #swift #uikit
- JDBCUPDATE
- 이클립스로오라클데이터출력
- xcode #swift #app만들기이미지 #ios앱만들기
- jwt #세션 #토큰 #로그인유지 #java
- JDBC수정
- 오라클데이터수정자바
- 이클립스에서sql데이터삽입
- replaceall여러문자 #javareplaceall
- xcode #swift #ios앱만들기 #swift배열
- 이클립스에서SQL
- 자바정수변환
- 자바SQLUPDATE
- swift화면전환
- 이클립스에서오라클데이터
- jdbc셀렉트
- 이클립스에서오라클데이터수정
- jdbcconnection_id오류
- xcode #swift공부
- 이클립스에서sql자료넣기
- jdbc
- jdbc값검색
- JDBC데이터삽입
- xcode앱만들기 #xcode기초
- 자바SQL
- jdbcselect
- xcode 깃오류
- 이클립스커넥션아이디오류
- DATE데이터타입
- JDBCinsert
- Today
- Total
Yim-HaEun
[Java 개념 공부] case 문에서의 sc.close();와 System.exit(0);의 역할 본문
오늘은 HashMap을 이용해 ToDoList를 만드는 문제를 풀어봤습니다.
HashMap을 이용한 문제는 나중에 올려볼게요.
HashMap과 case문을 활용해서 ToDo List를 출력을 하는 중에
sc.close();와 System.exit(0);역할이 갑자기 궁금해져서 질문하고, 배운 개념을 정리해보려고합니다.
개념을 완전히 알기 전까지 들었던 생각은
'close();와 exit();이 다 종료하겠다는 건데 왜 같은 개념을 두번 쓰지?' 였습니다.
오라클을 읽어보니 두개 다 완전 다른 역할이더라고요
(당연한건데 저처럼 개념을 몰랐던 분들은 궁금해하실수도 있는 부분)
케이스3은 번호를 받으면 프로그램을 아예 종료시킵니다.
이때, 제가 알고있던 개념은 sc.close(); 뿐이어서 System.exit(0);을 굳이 왜쓰는지 궁금했어요.
sc.close();
: Closes this scanner.
sc는 제가 Scanner.sc = new Scanner(System.in);의 sc 이고 그걸 닫아 종료한다는 뜻입니다.
즉, 입력값을 받는 행위를 종료한다는 뜻
System.exit(0);
:This method calls the exit method in class Runtime
런타임을 종료해 프로그램이 끝나도록 설정해줍니다.
돌아가고있는 JVM을 종료합니다.
클래스 런타임에서 exit메소드를 불러옵니다.
System.exit(0)을 써주지않으면
코드 순서를 보자면,
[3 입력시 돌아가는 순서]
System.exit(0);을 넣지않았으니
case번호를 입력하라는 반복문으로 다시 올라갑니다.
(break; 문은 case를 종료하는 뜻이라 case 3를 종료하고 while 다시 수행함.)
sc.close();로 스캐너를 닫았기 때문에 더이상 번호를 받지 못한다며 오류가 나요.
(궁금증 해결!)
while문으로 다시 올라가기 전에
런타임을 아예 종료시켜버리는 System.exit(0); 을 넣어
프로그램을 완전 종료해줍니다.
코드를 하나하나 따라가보기 전엔
sc.close();개념도 제대로 알지 못했었고
System.exit(0);이란 것도 그 역할을 오늘 처음 알았어요.
sc.close();는 그냥 당연히 '닫아' 라고만 생각했었는데
Scanner만 닫는거였다는 걸 이제서야 인지했습니다.. ㅎㅎ
생각않고 코딩하면 이런 문제가 생기네요.
+
근데
이렇게 sc.close();를 지우고 System.exit(0);만 작성해도
프로그램 종료가 됩니다.
사실 강제종료 느낌이라 sc.close();는 안써도 됩니다.
물어보니 강사님도 이야기하셨는데 제가 못들었어요 하하..
그래도 혹시 모르니까 sc.close();를 하는 습관을 가집시다.
두 명령문의 역할도 제대로 익혔으니 이제 이 문제로 오류 낼 일은 없길 바라며
이 글이 도움이 됐으면 좋겠네요
그럼 안녕
'Java > 공부' 카테고리의 다른 글
세션과 JWT토큰에 대해서(Refresh Token) //나의 코드 확인하기 (2) | 2024.10.21 |
---|---|
StringBuilder란? 효율적으로 문자열을 수정,추가,삭제하기 (0) | 2024.09.22 |
[Java 개념 공부] 기본 API (StringTokenizer, Wrapper,Date)/ Object (0) | 2023.09.13 |