가끔 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;
}
}
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
[Java] 참조(Reference)와 주소의 관계 (6) | 2020.07.24 |
---|---|
[JPA] 엔티티의 연관관계 시행착오 (0) | 2020.05.21 |
[Java] 내가 사용하는 GC 알고리즘은 무엇일까? (0) | 2020.04.07 |
[Java] JMM 에 대한 글들 (0) | 2020.03.25 |
[Java 11] 자바11 에서 테스트가 깨진다!? (0) | 2020.03.04 |