특정 클래스의 메소드와 필드, 그리고 그 클래스의 상위 클래스에 있는 메소드와 필드들에 대해, 대소문자 몇 개로 구분하게 하는 것은 사용자에게 큰 혼란을 줍니다. 더불어 같은 클래스 내부에서 접근 제어자도 같은데 메소드 이름과 필드의 이름을 정확히 같게 만들거나, 대소문자로 구분하게 하는 것도 혼란스럽게 만듭니다.
메소드의 이름이 유사할 경우, 슈퍼클래스 메소드를 오버라이드하려고 한 것인지, 새로운 메소드를 추가하고 싶었던 것인지 의도를 파악할 수 없습니다.
만약 새로운 메소드를 추가하고 싶었던 것이라면, 네이밍이 최악이었다는 반증입니다. 메소드 이름은 action을 지향해야합니다. 그래서 동사를 포함해야합니다. 아래의 경우 애처롭게도 메소드와 멤버 변수가 같은 이름을 갖고 있고, 이를 대소문자 몇 개 변형하여 구분하고 있습니다. 하지만 public 메서드의 이름을 변경하는 작업은 이 메소드를 사용하는 호출자의 작업에 지장을 주는 행동입니다. 따라서 이런 경우에는 멤버 변수의 이름을 바꾸는 것이 좋습니다.
규칙을 어긴 코드
public class Car{
public DriveTrain drive;
public void tearDown(){...}
public void drive() {...} // 규칙을 어긴 코드; 필드 이름과 중복됩니다.
}
public class MyCar extends Car{
public void teardown(){...} // 규칙을 어긴 코드; tearDown 메소드를 override 하려 했던건가요? 의도가 뭐죠...?
public void drivefast(){...}
public void driveFast(){...} // Huh?
}
규칙을 준수한 해결책
public class Car{
private DriveTrain drive;
public void tearDown(){...}
public void drive() {...} // 필드의 접근 제어자를 낮춰 해결했습니다.
}
public class MyCar extends Car{
@Override
public void tearDown(){...}
public void drivefast(){...}
public void driveReallyFast(){...}
}
If you like SONARKUBE, don’t forget to give me a star.