[문제]
Q. 현재 코드는 view단에서 "삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N)" 출력문의 대답을 받기 전부터 이미 controller에 기능을 요청하여 데이터가 삭제된 상태이다.
<추가 요청사항>
1) 해당 출력문에서 Y를 입력받은 경우에만 데이터를 삭제
2) Y/N 이외의 대답을 받은 경우 (데이터 삭제 없이) 재입력 요청
3) N을 입력받은 경우 데이터 삭제 없이 회원 삭제 화면을 빠져나갈 것
// 회원 삭제 화면
public void deleteMember() {
System.out.println("회원을 삭제합니다.");
System.out.print("삭제할 회원의 아이디: ");
String userId = sc.nextLine();
System.out.print("삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N): ");
char answer = sc.nextLine().toUpperCase().charAt(0);
int result = mc.deleteMember(userId);
if(answer == 'Y') {
if(result > 0) {
System.out.println("성공적으로 삭제되었습니다.");
} else {
System.out.println("일치하는 아이디가 없으므로 삭제할 수 없습니다.");
}
}
}
[해결 방법 1]
해당 구문은 다중 반복문이 아닌 if와 반복문이므로 굳이 반복문에 이름을 붙일 필요가 없다
1) "삭제 후 복구할 수 없습니다~" 출력문부터 섹션을 나누기
2) break와 return을 이용해 내가 원하는 곳으로 가게 하기
위의 방법을 통해 충분히 요구사항에 맞춰 활용 가능함!
// 회원 삭제 화면
public void deleteMember() {
System.out.println("회원을 삭제합니다.");
System.out.print("삭제할 회원의 아이디: ");
String userId = sc.nextLine();
// answer 변수를 먼저 선언해 줌
// -> 반복문 안에서 선언할 경우 반복문 밖에서는 해당 변수를 쓰지 못하게 되므로
char answer = ' ';
while (true) {
System.out.print("삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N): ");
answer = sc.nextLine().toUpperCase().charAt(0);
if(answer == 'Y') {
// 'Y'를 입력받았을 때 controller에서 데이터를 삭제함
int result = mc.deleteMember(userId);
if(result > 0) {
System.out.println("성공적으로 삭제되었습니다.");
// break는 해당 "반복문"을 빠져나가게 하므로 즉, while문을 빠져가게 됨
break;
} else {
System.out.println("일치하는 아이디가 없으므로 삭제할 수 없습니다.");
// return은 해당 메소드를 호출했던 곳으로 돌아가게 하므로
// 나의 코드상 switch문에 들어갔다가 break를 만나 프로그램 종료됨
return;
}
}
else if (answer == 'N') {
System.out.println("회원 삭제를 취소하셨습니다. 메뉴 화면으로 돌아갑니다.");
break;
} else {
System.out.println("Y 또는 N만 입력하실 수 있습니다. 다시 입력해 주세요.");
}
}
}
[해결 방법 2]
다만!
추후 반복문을 2번 사용해야 할 경우가 있다면 결과가 다를 수 있다
반복문 1
반복문2
break;
break는 해당 반복문을 1개 빠져나가기 때문에
반복문 2에서 break를 걸면 반복문1로 돌아가게 되고,
반복문 2에서 반복문 1을 다시 실행시켜야 하는 경우가 있을 경우
다른 코드들과 겹쳐 어떻게 해야 할지 모르는 난감한 상황이 된다
이럴 때는
반복문에 이름을 설정해서 간단하게 다중 반복문 탈출이 가능하다
// 회원 삭제 화면
public void deleteMember() {
System.out.println("회원을 삭제합니다.");
System.out.print("삭제할 회원의 아이디: ");
String userId = sc.nextLine();
char answer = ' ';
// 반복문에 이름 설정해 주기
// while 반복문의 이름: whileout
whileout :
while (true) {
System.out.print("삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N): ");
answer = sc.nextLine().toUpperCase().charAt(0);
if(answer == 'Y') {
int result = mc.deleteMember(userId);
if(result > 0) {
System.out.println("성공적으로 삭제되었습니다.");
// whileout을 빠져나가게 해라
break whileout;
} else {
System.out.println("일치하는 아이디가 없으므로 삭제할 수 없습니다.");
// whileout을 빠져나가게 해라
break whileout;
}
}
else if (answer == 'N') {
System.out.println("회원 삭제를 취소하셨습니다. 메뉴 화면으로 돌아갑니다.");
// whileout을 빠져나가게 해라
break whileout;
} else {
System.out.println("Y 또는 N만 입력하실 수 있습니다. 다시 입력해 주세요.");
}
}
}
코딩은 산 넘어 산쓰,,~
지만 새로운 기능 하나를 알게 될 때마다 유레카 외치게 되는 매력이 있다
똑똑해지는 나
제법 멋있음...
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/004.gif)