"null"은 "Optional"에서 사용되선 안됩니다.
null로 인해 에러가 발생할 수 있을 때 Optional을 사용하는 것이 Optional의 컨셉입니다.
그런 면에서 null을 대체하며, Optional을 사용한다면 사용하는 쪽에서 이 값이 null일 수도 있다는 걱정이 들게해선 안됩니다.
규칙을 어긴 코드
public void doSomething () {
Optional<String> optional = getOptional();
if (optional != null) { // 규칙을 어긴 코드
// optional을 이용해 뭔가 동작을 함
}
Optional<String> text = null; // 규칙을 ...
아파치 공통 라이브러리에서 "DateUtils.truncate"은 사용해선 안됩니다
Java8에 도입된 ZonedDateTime 클래스를 사용하여 날짜를 잘라내는 것이 CommonsLang의 DateUtils 클래스보다 훨씬 빠릅니다.
참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 8보다 낮은 경우(java8) 검사하지 않습니다.
규칙을 어긴 코드
public Date trunc(Date date) {
return DateUtils.truncate(date, Calendar.SECOND); // 규칙을 어긴 코드
}
규칙을 준수한 해결책
public Date trunc(Date date) {
Instant instant = date.toInstant();
...
람다에선 타입을 사용하는 것이 좋습니다.
코딩 컨벤션을 공유하는 것은 팀의 협업을 효과적이게 하는데 도움이 될 수 있습니다.
람다 인수에 타입을 적용하는 것은 선택 사항이지만, 코드를 더 명확하고 쉽게 읽을 수 있게 해줍니다.
규칙을 어긴 코드
Arrays.sort(rosterAsArray,
(a, b) -> { // 규칙을 어긴 코드
return a.getBirthday().compareTo(b.getBirthday());
}
);
규칙을 준수한 해결책
Arrays.sort(rosterAsArray,
(Person a, Person b) -> {
return a.getBirthday().compareTo(b...
"java.time"은 날짜와 시간을 표기하는데에만 사용되어야 합니다
Date와 Calendar 클래스는 낡고, 비웃음을 많이 받아온 클래스입니다.
특히 이 클래스들은 멀티 스레드 환경에서 항상 혼란스럽고 적절하게 사용하기가 어려웠습니다.
이를 대체하기 위해 JodaTime이 많이 사용되었지만, 이제는 훨씬 더 나은 선택지가 내장되어 있습니다.
Java 8의 JSR 310 부터는 다음과 같은 클래스들을 제공합니다.
클래스
사용처
LocalDate
a date, without time of day, offset, or zone
LocalTime
the tim...
Try-with-resources 구문을 사용하는 것이 좋습니다.
Java 7부터 Closeable 리소스가 안전히 종료되는 것을 보장하는 try-with-resources 구문을 도입했습니다.
새로운 구문은 방탄 조끼에 가깝기 때문에, 이전 버전의 try/catch/finally을 사용하는 것보다 선호되어야 합니다.
이 규칙은 Closeable 리소스가 try-with-resources구문에서 열려 있는지를 확인합니다.
참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 7보다 낮은 경우(java7) 자동으로 비활성화됩니다.
규칙을 어긴 코드
FileReader fr = null;
BufferedReader br = null;
try {
fr = ne...
표준 Functional Interface들을 재정의하면 안 됩니다.
커스텀한 String 클래스를 작성할 이유가 없는 것처럼, 기존의 표준 Functional Interface 를 다시 정의할 이유가 없습니다.
이름을 새로 지음으로서 약간의 추가적인 문맥을 더 넣어 줄 수 있기 때문에, 그렇게 하는 것이 매력적이게 보일 수 있습니다.
하지만 장기적으로 유지 보수를 하는 프로그래머들이 재정의 된 Functional Interface와 표준 Functional Interface가 뭐가 다른지 궁금해 할 수 있고, 혼란의 원인이 될 수 있습니다.
규칙을 어긴 코드
@FunctionalInterface
public interface MyInterface { // 규칙을 어긴 코드
...
Lambdas 대신 메소드 참조를 사용하는게 좋습니다.
메소드/생성자 참조는 일반적으로 람다를 사용하는 것보다 더 간결하고 가독성이 높아지므로, 이를 사용하는 것이 좋습니다.
드물게 어떤 종류의 함수인지 더 구체적으로 설명하기위해 람다를 유지하는게 괜찮을 수도 있습니다.
마찬가지로 null 체크는 Objects::isNull 또는 Objects::nonNull 메서드에 대한 참조로 대체할 수 있으며, 타입 캐스팅은 SomeClass.class::cast로 변경할 수 있습니다.
더불어 instanceof는 인스턴스는 SomeClass.class::isInstance로 대체할 수 있습니다.
참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 8보다 낮...
람다를 사용할 때, 입력 매개 변수가 하나라면 괄호를 제거해야 합니다.
람다가 입력 매개 변수를 하나만 가지고 있을 때, 이를 표현할 수 있는 방법이 두가지 있습니다.
매개변수에 괄호를 씌우는 방법과 안씌우는 방법. 이렇게 두가지입니다.
더 간단한 구문은 괄호를 사용하지 않는 것입니다.
괄호가 있는 것보다 훨씬 간결하고 가독성도 좋습니다.
그러므로 이를 사용하는 것이 좋습니다.
참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 8보다 낮은 경우(java8) 자동으로 비활성화됩니다.
규칙을 어긴 코드
(x) -> x * 2
규칙을 준수한 해결책
x -> x * 2
If you like SONARKUBE, don’t forget to giv...
전체 글 239개, 30 페이지