메서드와 필드의 이름은 같아선 안되고, 대소문자 몇 개로 구분해선 안됩니다

 

특정 클래스의 메소드와 필드, 그리고 그 클래스의 상위 클래스에 있는 메소드와 필드들에 대해, 대소문자 몇 개로 구분하게 하는 것은 사용자에게 큰 혼란을 줍니다. 더불어 같은 클래스 내부에서 접근 제어자도 같은데 메소드 이름과 필드의 이름을 정확히 같게 만들거나, 대소문자로 구분하게 하는 것도 혼란스럽게 만듭니다.

메소드의 이름이 유사할 경우, 슈퍼클래스 메소드를 오버라이드하려고 한 것인지, 새로운 메소드를 추가하고 싶었던 것인지 의도를 파악할 수 없습니다.

만약 새로운 메소드를 추가하고 싶었던 것이라면, 네이밍이 최악이었다는 반증입니다. 메소드 이름은 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. :star2:

원문으로 바로가기

Star This Project