반응형
어제 이어 오늘도 사소하게 코드를 정리했다. 정리하기 전에 코드 형태는 다음과 같다.
if(obj.getData().equals("01") || obj.getData().equals("02") || obj.getData().equals("03")) {
....
}
문자열이 여러 값 중 하나인지 비교하는 코드이다. 이런 형태의 코드가 곳곳에 있어 어떻게 변경할까 고민하다가 SQL의 in 구문이 떠올라 다음과 같이 변경했다.
if ( Cond.str(obj.getData()).in("01", "02", "03") ) {
...
}
코틀린이었다면 확장 함수를 사용해서 더 간결하게 표현할 수 있었을텐데 하는 아쉬움이 살짝 들었지만 컴파일 속도를 생각하면 이것도 괜찮다.
다음처럼 여러 값이 모두 아닌지 비교하는 코드도 빈번하게 출현한다.
if( !obj.getData().contentEquals("01") && !obj.getData().contentEquals("02") ) {
....
}
이를 위해 notIn() 메서드도 추가했다.
if ( Cond.str(obj.getData()).notIn("01", "02") ) {
...
}
다음은 Str 클래스의 구현 코드다.
public class Cond {
public static StrCond str(String s) {
return new StrCond(s);
}
public static class StrCond {
private String value;
public StrCond(String value) {
this.value = value;
}
public boolean in(String ... values) {
for (String v : values) {
if (v.equals(value)) return true;
}
return false;
}
public boolean notIn(String ... values) {
for (String v : values) {
if (v.equals(value)) return false;
}
return true;
}
}
}