"if", "for", "while", "switch" 그리고 "try" 와 같은 제어문은 너무 깊게 중첩되어서는 안됩니다.

중첩된 if, for, while, switch 그리고 try 구문은 “스파게티 코드” 라고 알려진 코드를 만드는 핵심 요소입니다. 이러한 코드들은 읽거나 리팩토링하기 힘들고, 그러므로 유지보수하기도 어렵습니다. 규칙을 어긴 코드 기본 임계값인 3에서: if (condition1) { // 규칙을 준수한 코드 - depth = 1 /* ... */ if (condition2) { // 규칙을 준수한 코드 - depth = 2 /* ... */ for(int i = 0; i < 10; i++) { // 규칙을 준수한 코드 - ...

더보기

표현식(Expressions) 은 너무 복잡해서는 안됩니다.

표현식(Expressions) 의 복잡도는 &&, ||, 그리고 삼항연산자 ? ifTrue : ifFalse 의 숫자에 의해 정의될 수 있습니다. 코드를 이해할 수 있을 정도로 단일 표현식의 복잡도를 너무 높지 않게 유지해야합니다. 규칙을 어긴 코드 기본 임계값인 3에서: if (((condition1 && condition2) || (condition3 && condition4)) && condition5) { ... } 규칙을 준수한 코드 if ( (myFirstCondition() || mySecondCondition()) &&...

더보기

"StandardCharsets" 상수가 우선시 되어야 합니다

JDK7부터 java.nio.charset.StandardCharsets 클래스를 도입했습니다. 이 클래스에는 Java 플랫폼의 모든 구현에서 사용 가능할 수 있도록 보장된 모든 문자 집합에 대한 상수를 제공합니다. ISO_8859_1 US_ASCII UTF_16 UTF_16BE UTF_16LE UTF_8 이러한 상수는 다음과 같은 경우보다 우선되어 사용되어야 합니다 “UTF-8”과 같은 문자열 대신 사용되어야 합니다. 이러한 문자열을 사용하면 실제로는 절대 일어나지 않을 UnsupportedEncodingException을 위해 catch/throw를 고려해야한다는 단점이 있습...

더보기

가능하면 "Stream" 체이닝은 간단하게 표현되어야 합니다

Stream API를 사용할 때, 콜 체인은 가능한 한 단순화되어야 합니다. 그렇게 하는 것이 코드를 읽기 쉽게 만들고 불필요한 임시 객체를 만들지 않습니다. 이 방법은 아래와 같은 경우에서 대체할 수 있는 방법이 있을 때 알림을 울립니다. Original Preferred stream.filter(predicate).findFirst().isPresent() stream.anyMatch(predicate) stream.filter(predicate).findAny().isPresent() ...

더보기

Boxing과 Unboxing이 곧장 번복되선 안됩니다

Boxing은 int 값을 소유하는 유사 객체에 넣는 과정을 의미합니다. 반대로 Unboxing은 이러한 객체에서 값을 갖고오는 과정입니다. Boxing과 Unboxing을 수행하는 동안 값 자체에는 아무런 변화가 없습니다. 그러므로 아무 의미없는 행동입니다. 이는 Java에서 암묵적으로 처리하는 autoboxing과 auto-unboxing을 수행할 때도 마찬가지입니다. 규칙을 어긴 코드 public void examineInt(int a) { //... } public void examineInteger(Integer a) { // ... } public void func() { int i ...

더보기

메소드는 너무 복잡해서는 안됩니다.

메소드의 순환 복잡성은 정의된 임계치를 넘어서는 안됩니다. 복잡한 코드는 제대로 동작하지 않을 수 있으며, 이해하기 어렵기 때문에 유지보수하기도 어렵습니다. 예외 클래스가 많은 수의 필드를 가지는 경우, 이는 클래스가 분할되어야 함을 나타낼 수 있지만, 이 규칙은 equals 와 hashCode 메소드가 높은 복잡성을 가지더라도 무시합니다. If you like SONARKUBE, don’t forget to give me a star. :star2: 원문으로 바로가기

더보기

반복문은 하나를 초과한 "break" 또는 "continue" 구문을 포함할 수 없습니다.

좋은 구조적 프로그래밍을 위해서는 반복문에서 break 와 continue 구문의 수를 제한합니다. 반복문에서 오직 하나의 break 또는 continue 구문을 가지는 것은 최적의 코딩을 용이하게 합니다. 만일 둘 이상의 구문이 존재하는 경우 가독성을 높이기 위해 코드를 리팩토링 해야합니다. 규칙을 어긴 코드 for (int i = 1; i <= 10; i++) { // 규칙을 어긴 코드 - 2 개의 continue 구문 - 2개의 구문 사이에 로직을 추가하고 싶은 유혹을 느낄 수 있습니다. if (i % 2 == 0) { continue; } if (i % ...

더보기

메소드는 너무 많은 매개변수를 가져서는 안됩니다.

긴 매개변수 목록은 해당 매개변수들을 래핑하기 위한 새로운 구조가 필요하거나, 함수가 너무 많은 작업을 수행하고 있음을 나타내는 것일 수 있습니다. 규칙을 어긴 코드 매개변수의 최댓값이 4인 경우: public void doSomething(int param1, int param2, int param3, String param4, long param5) { ... } 규칙을 준수한 해결책 public void doSomething(int param1, int param2, int param3, String param4) { ... } 예외 아래의 어노테이션들이 달린 메소...

더보기