private
과 protected
의 차이점은 하위 클래스들이 protected
로 선언된 멤버에는 접근할 수 있지만, private
에는 접근이 안된다는 것입니다.
한편 final class
는 하위 클래스가 존재할 수 없습니다.
따라서 멤버에 protected
를 붙이는 것은 혼란스럽기만하고 무의미합니다.
클래스안의 protected
멤버는 동일한 패키지 내에 있는 다른 클래스에서도 확인 가능하고, 사용할 수 있습니다.
따라서 private
를 사용한 것과는 다르게 의도치 않은 실수가 생길 수 있습니다.
규칙을 어긴 코드
public final class MyFinalClass {
protected String name = "Fred"; // 규칙을 어긴 코드
protected void setName(String name) { // 규칙을 어긴 코드
// ...
}
}
규칙을 준수한 코드
public final class MyFinalClass {
private String name = "Fred";
public void setName(String name) {
// ...
}
}
예외
@VisibleForTesting
주석이 달린 멤버는 코드를 테스트에 사용할 수 있도록 의도적으로 접근제어자를 낮춘 행위이기 때문에 이 규칙은 무시됩니다.
public final class MyFinalClass {
@VisibleForTesting
protected Logger logger; // 규칙을 준수한 코드
@VisibleForTesting
protected int calculateSomethingComplex(String input) { // 규칙을 준수한 코드
// ...
}
}
If you like SONARKUBE, don’t forget to give me a star.