꾸준히 기록하자

[Java] Good Coding (PMD) 본문

IT/Java

[Java] Good Coding (PMD)

seungwonlee 2022. 12. 27. 14:13
728x90

PMD는 기본으로 제공하는 규칙 세트로 프로젝트 전체 코드를 스캔해 문제가 될 수 있는 코드를 찾아주는 도구 말하자면 나쁜 코딩을 보고하는 정적 소스 코드 분석 도구입니다. 참고로 규칙 세트는 사용자가 만들 수도 있습니다.

 

PMD에서 기본으로 제공하는 규칙 세트를 가지고 check code 하여 알아낸 정보를 공유하고자 합니다.

참고로 기본적으로 알아두면 좋을 거 같은 내용으로 작성했습니다.

 

1. 매개 변수 재할당 방지

AvoidReassigningParameters: Avoid reassigning parameters such as 'name'

아래 예제 코드블록과 같이 매개 변수인 name의 값을 변경해 받은 메시지입니다.

public static void main(String[] args) {
    String name = "짱구";
    String rtnName = testCase(name);
    System.out.println(rtnName);
}

public static String testCase(String name) {
    if ("짱구".equals(name)) {
        name = "신짱구";
    }
    return name;
}

아래 예제 코드블록과 같이 수정하면 메시지가 사라집니다.

public static String testCase(String name) {
    String rtnName = name;
    if ("짱구".equals(rtnName)) {
        rtnName = "신짱구";
    }
    return rtnName;
}

 

2. 불필요한 문자열 ValueOf

UselessStringValueOf: No need to call String.valueOf to append to a string.

아래 예제 코드블록과 같이 변수 value01처럼 작성했을 때 받은 메시지입니다.

value02처럼 수정하면 메시지가 사라집니다.

public static void main(String[] args) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("name", "짱구");
	
    String value01 = "신"+ String.valueOf(map.get("name"));
    String value02 = "김" + map.get("name");
    
}

 

3. 비교에서 literals 우선순위, 비교 시 literals 퍼스트

PositionLiteralsFirstInComparisons, LiteralsFirstInComparisons: Position literals first in String comparisons

아래 예제 코드 블록과 같이 비교 시 받은 메시지입니다.

public static void main(String[] args) {
    String value01 = "짱구";
    System.out.println(value01.equals("짱구"));
}

아래 예제 코드블록과 같이 수정하면 메시지가 사라집니다.

System.out.println("짱구".equals(value01));

 

4. 비효율적인 문자열 버퍼링

InefficientStringBuffering: Avoid concatenating nonliterals in a StringBuffer/StringBuilder constructor or append().

아래 예제 코드 블록과 같이 append안에 더하기 기표(+)를 사용해 문자열을 추가했기 때문에 받은 메시지입니다.

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();
    String val = "못말려";
    sb.append("짱구는 " + val);
    System.out.println(sb);
}

아래 예제 코드블록과 같이 수정하면 메시지가 사라집니다.

sb.append("짱구는 ").append(val);

 

제가 수정한 코드블록들은 정답이 아닌 이렇게 작성했더니 메시지가 사라졌다 정도로만 참고하시면 됩니다.

 

끝.

반응형

'IT > Java' 카테고리의 다른 글

[Java] Regular expression  (0) 2023.03.10
[Java] Call by Value & Reference  (0) 2023.01.15
[Java] distinct()  (0) 2022.12.15
[Java] Iterator()  (0) 2022.11.02
[Java] StringUtils.equals()  (0) 2022.09.15
Comments