Programing/JVM(Java, Kotlin)
[Java] Scope shadowing과 DCL51-J
나모찾기
2020. 4. 21. 11:31
가끔 sonarqube 돌려보면 DCL51-J 에 대한 코드 냄새가 잡힌다.
예를 들면 아래와 같다. 5번째 라인에서 지역변수 value를 사용하면 멤버변수인 value와 이름이 동일한데 사용했다고 경고를 한다.
public class Foo {
private String valueType;
public void foo(SomeParameter someParameter) {
ValueType valueType = someParameter.getValueType();
if (valueType != null) {
this.valueType = valueType.name();
}
}
}
이럴 경우 어떠한 방법이 좋을까?
방법1. 지역 이름을 바꾼다. - 쉬우면서 명시적인 방법이다.
public class Foo {
private String valueType;
public void foo(SomeParameter someParameter) {
ValueType value = someParameter.getValueType();
if (value != null) {
this.valueType = value.name();
}
}
}
만약 이게 가독성이 떨어지는 경우가 있다면 다른 방법을 써야 한다.
생각나는 것은 setter나 값을 가져오는 helper 메서드를 사용하는 것이다.
public class Foo {
private String valueType;
private void setValue(ValueType valueType) {
if (valueType != null) {
this.valueType = valueType.name();
}
}
public void foo(SomeParameter someParameter) {
setValue(someParameter.getValueType());
}
}
import javax.annotation.Nullable;
public class Foo {
private String valueType;
public void foo(SomeParameter someParameter) {
this.valueType = getValueBy(someParameter.getValueType());
}
@Nullable
private String getValueBy(ValueType valueType) {
if (valueType != null) {
return valueType.name();
}
return null;
}
}