PositionLiteralsFirstInComparisons
우선순위 : 3
Position literals first in comparisons, if the second argument is null then NullPointerExceptions can be avoided, they will just return false.
equals()를 통한 비교를 할 때는 항상 상수 값을 앞에 두어야 한다.
만일 두번째 인자가 null인 경우에는 NullPointerException이 발생하지 않으며
단순히 false를 리턴하게 된다.
하지만 상수가 아닌 참조타입의 변수가 앞에 오게 되면 이 변수가 null인 경우
NullPointerException이 발생하게 된다.
샘플 코드
UnnecessaryLocalBeforeReturn
우선순위 : 3
Avoid the creation of unnecessary local variables
불필요한 지역변수를 만들지 말라.
모든 변수는 메모리를 사용하는 만큼 가급적이면 꼭 필요한 변수만
필요할 때 만들어서 사용하는 것이 좋을 것이다. 이 것이 힘들다면
절대 필요하지 않을 것 같은 변수는 만들지 않는 것이 좋을 것이다.
샘플 코드
1 2 3 4 5 6 | public class Foo { public int foo() { int x = doSomething(); return x; // instead, just 'return doSomething();' } } |
AvoidConstantsInterface
우선순위 : 3
An interface should be used only to characterize the external behaviour of an implementing class: using an interface as a container of constants is a poor usage pattern and not recommended.
인터페이스란 클래스가 외부와 어떤 행위를 하도록 하는 내용으로 구현되어야만 한다.
단지 상수를 저장해놓는 컨테이너로만 사용되는 인터페이스는 권장되지 않는다.
샘플 코드 (나쁜 예)
UseCollectionIsEmpty
우선순위 : 3
The isEmpty() method on java.util.Collection is provided to determine if a collection has any elements. Comparing the value of size() to 0 does not convey intent as well as the isEmpty() method.
컬렉션 객체에 엘리먼트들이 없다는 것을 확인하기 위해서는 size() == 0 보다는
isEmpty() 사용이 권장된다. size()를 통한 비교는 isEmpty()에 비해 그 의도가
명확하게 전달되지 않는다.
샘플코드
부연설명
일반적으로 isEmpty() 메소드와 size() 메소드의 성능상의 차이는 없는 것으로 보아도
좋습니다. 다만 메소드 명에서 드러나는 ‘의도’가 isEmpty쪽이 좀 더 분명하다는
장점이 있습니다. 참고로 ArrayList에 구현된 isEmpty() 메서드와 size() 메서드의
내용은 다음과 같습니다.
ReturnEmptyArrayRatherThanNull
우선순위 : 1
For any method that returns an array, it is a better to return an empty array rather than a null reference. This removes the need for null checking all results and avoids inadvertent NullPointerExceptions.
배열을 리턴하는 메소드에서 배열에 엘리먼트가 없더라도
null 보다는 빈 배열을 리턴하는 것이 좋다.
이렇게 하는 것은 불필요한 null 체크를 피할 수 있을 뿐만 아니라
의도하지 않은 NullPointerException이 발생하지 않도록 할 수도 있다.
샘플 코드
'Development > JAVA' 카테고리의 다른 글
[Spring] 작은 사이트 구축 과정에서 발생한 소소한 에러들... (0) | 2016.04.19 |
---|---|
[디비파기 | PMD] AvoidInstantiatingObjectsInLoops 외 3건 (0) | 2016.04.11 |
[디비 파기 | PMD] FinalFieldCouldBeStatic 외 4건 (0) | 2016.03.26 |
[디비 파기 | PMD] ConstructorCallsOverridableMethod외 4건 (0) | 2016.03.19 |
[디비 파기 | PMD] NullAssignment 외 3건 (0) | 2016.03.13 |