728x90

1. Sections of code should not be commented out.

2. This block of commented-out lines of code should be removed.

[오류내용]

// CASE 1
/* resultMap.put("RESULT_CD", output.get("result_cd")); */

// CASE 2
/*
	for(int i=0; i<10; i++){
    	...~~~~~~
        ...~~~~~~~~~
    }
 */

// CASE 3
/*
	resultMap.put(RESULT_MSG, output.get("result_msg"));
	// 정상적으로 API가 성공한 경우
	if(output.get("result_cd").equals(RESULT_CODE_200)) {
		resultMap.put("STATUS", output.get("status"));
	} 
 */

[해결방법]

프로그래밍 주석은 삭제처리하면 된다.

이유는 납득이 안간다. ㅋㅋ

쓰레기 코드가 있어서 좋을건 없지만 지우면 된다.

 

728x90
반응형
728x90

1. Source files should not have any duplicated blocks.

2. This block of commented-out lines of code should be removed.

[오류내용]

// CASE 1
/* resultMap.put("RESULT_CD", output.get("result_cd")); */

// CASE 2
/*
	for(int i=0; i<10; i++){
    	...~~~~~~
        ...~~~~~~~~~
    }
 */

// CASE 3
/*
	resultMap.put(RESULT_MSG, output.get("result_msg"));
	// 정상적으로 API가 성공한 경우
	if(output.get("result_cd").equals(RESULT_CODE_200)) {
		resultMap.put("STATUS", output.get("status"));
	} 
 */

[해결방법]

프로그래밍 주석은 삭제처리하면 된다.

이유는 납득이 안간다. ㅋㅋ

쓰레기 코드가 있어서 좋을건 없지만 지우면 된다.

 

728x90
반응형
728x90

1. Modifiers should be declared in the correct order.

2. Reorder the modifiers to comply with the Java Language Specification.

[오류내용]

// CASE 1
private final static String DS_SEARCH = "dsSearch";

// CASE 2
final static String DS_SEARCH = "dsSearch";

// CASE 3
final String DS_SEARCH = "dsSearch";

[해결방법]

자바에서는 표준문법을 따르길 원하며 위와 같이 썼을 경우 문제가 발생되지 않은 경우도 있지만 프로그래밍의 가독성을 위해서라도 아래와 같은 순서대로 선언해서 쓰기를 권장한다.

  1. Annotations
  2. public
  3. protected
  4. private
  5. abstract
  6. static
  7. final
  8. transient
  9. volatile
  10. synchronized
  11. native
  12. strictfp
// CASE 1
private static final String DS_SEARCH = "dsSearch";

// CASE 2
public String DS_SEARCH = "dsSearch";

// CASE 3
private String DS_SEARCH = "dsSearch";

 

아래 링크도 참고하시면 좋을듯..

https://sealove3904.tistory.com/m/30

 

[소나큐브] Field names should comply with a naming convention

[오류내용] 아래 오류 5가지 케이스에 모두 해당하는 동일한 해결방안으로 간다. 1. Rename this field "GET_TOKEN_URL" to match the regular expression '^[a-z][a-zA-Z0-9]*$'. 2. Make this final field static too. 3. Field names shoul

sealove3904.tistory.com

 

728x90
반응형
728x90

[오류내용]

Immediately return this expression instead of assigning it to the temporary variable "result".
Local variables should not be declared and then immediately returned or thrown

[해결방법]

return xxxxxAppService.selectList("XXXX.selectHolidayList", paramDto);

 

728x90
반응형
728x90

[오류내용]

Null pointers should not be dereferenced
A "NullPointerException" could be thrown; "map" is nullable here.

[해결방법]

		HashMap<String, Object> map = new HashMap<>(); 
		
		if(dsList.getRowCount() > 0) {    //공지사항 수신팀 등록
			map = (HashMap<String, Object>) dsList.getRowToMap(0);
			resultCount += commonAppService.insert("AFSZ2030F00.savePwiImtmL",map);
		}
		
		String pwiImtrNo = StringUtil.nvl(map.get("PWI_IMTR_NO"), "");  //공지사항 번호

 

프로젝트마다 Object 나 String 변수 Null 체크하는 유틸을 사용하면 된다.

물론 오픈소스 사용도 가능하다.

728x90
반응형
728x90

[오류내용]

Remove this unused import 'javax.transaction.Transactional'.
Unnecessary imports should be removed.

[해결방법]

해당 클래스에서 사용하지 않은 import 이므로 라인 삭제로 해결하면 된다.

 

 

 

728x90
반응형
728x90

[오류내용]

Format specifiers should be used instead of string concatenation.

Printf-style format strings should be used correctly.

 

[해결방안]

CASE 1 : 

logger.debug( "ifKey1 : {}", ifKey2 );

CASE 2 : 

System.out.println( String.format("ifKey1 : %s", ifKey2) );

 

 

 

 

 

slf4j Logger 사용법은 아래 링크 참고하길 바란다.

https://www.slf4j.org/api/org/slf4j/helpers/MessageFormatter.html

 

MessageFormatter (SLF4J 2.0.1 API)

Formats messages according to very simple substitution rules. Substitutions can be made 1, 2 or more arguments. For example, MessageFormatter.format("Hi {}.", "there") will return the string "Hi there.". The {} pair is called the formatting anchor. It serv

www.slf4j.org

 

String.format 관련 자세한 사용법은 아래 링크 참고하길 바란다.

https://sealove3904.tistory.com/31?category=968915 

 

String.format() 사용방법

API 문서를 번역하면 지정된 형식 문자열과 인수를 사용하여 형식이 지정된 문자열을 반환합니다. 반환한 로케일 항상 Locale.getDefault() 입니다. [실행결과] [첨부파일] 더 자세한 내용은 아래 링크

sealove3904.tistory.com

 

 

728x90
반응형
728x90

[오류내용]

Use isEmpty() to check whether the collection is empty or not.

Collection.isEmpty() should be used to test for emptiness

 

[해결방안]

로직상으로는 위와 같이 체크해도 문제는 없었으나  size() 로 체크할 경우 시간비용이 많이 든다고 한다.

ArrayList 의 isEmpty() 를 사용해보았으나 list 값이 null 일 경우 java.lang.NullPointerException 이 발생했다.

 

아파치에서 제공해주는 모듈(org.apache.commons.collections.CollectionUtils)을 사용해서 테스트하니 list 가 null, list.size == 0 일 경우 모두 체크해주었다.

 

수정된 코드는 아래와 같이 하면 된다.

if( !CollectionUtils.isEmpty(list) ) {

    ~~~~~~~~~~~

}

 

 

728x90
반응형
728x90

[오류내용]

아래 오류 5가지 케이스에 모두 해당하는 동일한 해결방안으로 간다.

 

1. Rename this field "GET_TOKEN_URL" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

2. Make this final field static too.

3. Field names should comply with a naming convention.

4. Class variable fields should not have public accessibility.

5. Make target a static final constant or non-public and provide accessors if needed.

[해결방법]

private final String GET_TOKEN_URL = "/auth/v1";

 

위 멤버변수의 선언은 변수를 값을 재할당(값변경)하지 않으면서 클래스 내부적으로 쓰겠다는 의미이다.

그리고 Method 에서 변수를 사용할때마다 값이 새로 할당이 되는게 문제이다. 메모리 낭비인 셈이죠.

변수의 용도로 보았을때는 

private static final String GET_TOKEN_URL = "/auth/v1";  으로 변경하는게 맞다.

 

만약 다른 클래스에서 참조가 된다면

public static final String GET_TOKEN_URL = "/auth/v1"; 으로 변경하는 방안도 생긴다.

 

즉. 용도에 맞게 변경해야된다는 건데..

 

이러한 구문으로도 변경될 수도 있을 것 같다.

 

private String getTokenUrl = "/auth/v1";

 

public String getTokenUrl(){

    return getTokenUrl;

}

 

변수의 용도를 생각해보고 각자 위 방식중 하나를 택해서 하면 될 듯하다.

 

728x90
반응형

+ Recent posts