본문 바로가기

Java

코드 가독성을 어떻게 높일 수 있을까

728x90

몇년 전, 새로운 환경으로 오게되면서 코드리뷰도 처음 받게되고 오래된 히스토리를 분석하는 일도 많았다.

그런 과정에서 느낀 몇가지 규칙들을, 나중에 잊지 않기위해서 혹은 누군가에게는 도움이 될 수 있을것 같아서 남긴다.

 

참고로 클린코드랑은 조금 다르고 하위하위호환이 맞지않을까 싶다.

 

규칙

deps는 되도록 낮춘다

가끔 이런 코드를 볼 수 있다.

if(obj != null) {
	if(obj2 != null) {
		if(obj3 != null) {
                ...
            }
    }
}

 

개인적으로 이렇게 if 중첩이 있으면, 조건안의 조건 식으로 생각을 하게되는 편이다.

 

아래와 같이 하나씩 먼저 예외적인것들을 걷어내주는게 좀 더 눈에 잘 들어온다.

 

if(obj == null) {
	return;
}

if(obj2 == null) {
	return;
}

if(obj3 == null) {
	return;
}

...

 

 

조건을 쓸때는 상수를 먼저 사용하자

if문안에 조건이나, boolean 값을 만들때 사용하는 조건식에는 상수를 먼저 써줘야한다.

NPE(NullPointException)를 조금이라도 줄이는 방법이다.

 

아래와 같은 메소드가 있다고 가정한다.

public String appendText(String text) {
	// "no" 인 경우 예외처리
    if(text.equals("no")) {
    	return;
    }
    
    ...
}

 

text 매개변수가 null이라면 npe가 발생할 것이다.

 

하지만 아래와 같이 고친다면?

public String appendText(String text) {
	// "no" 인 경우 예외처리
    if("no".equals(text)) {
    	return;
    }
    
    ...
}

"no"를 먼저 사용하는것으로 조건식을 변경해주면 exception이 발생하지도 않고, 조건 의도와 맞아 떨어진다.

장애가 발생할 수 있는 리스크를 줄이자.

 

트랜잭션 처리는 최소 범위로 해주자

트랜잭션은 성능이나 Lock과 직결되는 부분이기 때문에 필요 없는 부분은 덜어내주는게 좋다.

 

 

Util을 잘 활용하자.

StringUtils, CollectionUtils 등 null체크와 공백체크를 동시해 하지 않아도 유틸을 사용하면 

하나의 메소드로 처리할 수 있고, 가독성이 올라간다.

 

ex)

1. CollectionUtils

list == null || list.isEmpty()

=> CollectionUtils.isEmpty(list)

 

2. StringUtils

str == null || str.trim().equals("")

=> StringUtils.isBlank(str);

 

고정된 String 필드를 받아야 한다면 Enum을 활용

쉬운 부분이지만, 내가 신입땐 몰랐던 것처럼 모르는 사람이 많을 수 있다고 생각한다.

예를들어 api를 위한 DTO를 생성할때 "N"이나 "Y"값으로 받는 필드가 있다면,

class RequestDTO {
	...
    
    private String useYn;
    
    ...
}

useYn이라는 Y혹은 N만 받는 필드가 있다고 가정한다.

만약에 위처럼 String으로 선언해버리면 "y"라던가 "no"라던가 의도치 않은 값까지 받을 수 있고,

이를 계속 예외처리 해줘야한다.

 

하지만 아래처럼 바꿔준다면

class RequestDTO {
	...
    
    private CodeYn useYn;
    
    ...

	enum CodeYn {
    	Y, N
    }
}

useYn 필드는 Y나 N이 아닌경우 에러를 응답한다.

추가적으로 예외처리 할 필요가없다.

 

변수 선언을 미리 하지 말자

for문 안이나, 당상 쓰지 않는 변수를 미리 선언한다면 가비지 객체가 될 수 있다.

 

 

한번에 많은양의 select는 DB에 부담을준다

환경마다 다르겠지만 select할때 인덱싱과 리미트는 항상 꼭 고려해주자.

난 1000건을 기준으로 잡는다.

 

 

적을게 너무 많아서 계속 작성 중...

728x90