switch
문에 case
의 구현이 중복되거나 if chain
이 중복된 코드를 갖는 경우, 중복 코드에서 끝나는 게 아니라 최악의 경우 코딩 에러라고 까지 볼 수 있습니다.
만약 정말로 같은 로직이 필요한 경우였다면, 케이스를 하나로 합치거나 switch
문의 경우, case를 함께 써서 같은 코드에 도달하도록 해야합니다.
규칙을 어긴 코드
switch (i) {
case 1:
doFirstThing();
doSomething();
break;
case 2:
doSomethingDifferent();
break;
case 3: // 규칙을 어긴 코드; case 1의 구현과 중복됩니다
doFirstThing();
doSomething();
break;
default:
doTheRest();
}
if (a >= 0 && a < 10) {
doFirstThing();
doTheThing();
}
else if (a >= 10 && a < 20) {
doTheOtherThing();
}
else if (a >= 20 && a < 50) {
doFirstThing();
doTheThing(); // 규칙을 어긴 코드; 첫번째 조건과 중복됩니다
}
else {
doTheRest();
}
예외
코드가 1줄인 if 체인의 블록은 무시됩니다. 또한 마찬가지의 이유로 1줄의 코드를 갖는 switch block
도 예외로 간주됩니다.
if (a == 1) {
doSomething(); // 이런 경우 문제가 되지 않습니다. 보통 이런 경우는 가독성을 올리기위해 사용되는 경우가 많습니다.
} else if (a == 2) {
doSomethingElse();
} else {
doSomething();
}
그러나 이 예외는 else-s
가 없는 if
체인일 때는 적용되지 않습니다.
마찬가지로 default:
가 없는 switch-es
케이스에 코든 블락이 같은 코드라면 예외로 적용되지 않습니다.
이런 경우 규칙 {rule:java:S3923}이 반응합니다.
if (a == 1) {
doSomething(); // 규칙을 어긴 코드, 어떤 목적을 갖고 만들어진 코드일지 모르나, 아직은 의미가 없습니다.
} else if (a == 2) {
doSomething();
}
If you like SONARKUBE, don’t forget to give me a star.