문제 : switch/case문 내 조건에 같은 변수명 생성을 시도
switch (dataStructure) {
case "List":
ArrayList<String> recipe = new ArrayList<String>();
//내용
break;
case "Set":
LinkedHashSet<String> recipe = new LinkedHashSet<>();
//break;
하지만 위와 같이 동일할 recipe변수를 사용하려 할 경우, recipe변수는 이미 존재한다는 에러메시지가 출력된다.
그래서 switch/case 문으로 나누더라도, 독립된 블록으로 간주되지 않는다고 생각하여 "Set"case문의 recipe 변수명을 recipeSet으로 변경하여 해결하려고 하였다.
그러나, "Set"case문 내 do-While문에서 선언했었던 recipe는 'recipe' 변수가 초기화되지 않았을 수 있다는 에러메시지를 다시 보았다.
단순히 각 case문 내 변수의 이름을 다르게 생성하면 문제를 해결할 수는 있었지만, 의문을 해결하고 싶어 먼저 팀원에게 이러한 의문사항을 공유했고, 한 팀원에게서 "중괄호{}로 묶어두면 초기화한 값이 중괄호 안에서만 유효하다"는 내용을 확인했다.
각각의 case에 중괄호{}를 감싸면 에러가 발생하지 않았다.
switch (dataStructure) {
case "List": {
ArrayList<String> recipe = new ArrayList<String>();
//내용
break;
}
case "Set": {
LinkedHashSet<String> recipe = new LinkedHashSet<>();
//내용
break;
}
}