규칙 5. 줄여 쓰지 않는다.
클래스, 메서드, 변수 이름을 지을 때 줄여 쓰지 말라는 원칙이다.
이름을 줄이기 위해 'teamName'을 'tn'과 같이 약어를 사용하는 방식으로 줄이지 말라는 것이다.
private String teamName; // o
private String tn; // x
그렇다고 마냥 길이를 늘이라는 것은 아니다. 우리는 메서드나 변수의 이름을 최대한 줄일 필요가 있다. 굉장히 모순되는 것 같지만 그렇지 않다.
메서드의 책임을 분리한다.
메서드나 변수의 의미를 명확하게 하기 위해 임의로 축약하는 것은 안되지만, 하나의 메서드가 수행하는 일을 줄여 메서드의 이름을 줄이는 것이다.
다음과 같이 이름과 나이를 변경하는 메서드가 있다.
public void updateNameAndAge(String name, int age) {
,,,
}
이 코드를 이름을 변경하는 메서드와 나이를 변경하는 메서드로 분리하여 보았다. 메서드의 이름이 짧아짐과 동시에 이름과 나이를 바꾸는 두 가지 책임을 가지는 메서드에서 각각 한 가지의 책임만 가지는 메서드로 바뀌었다. 이렇게 여러 개의 책임을 가지는 메서드들은 그 책임을 나눔으로 인해 메서드명 축약이 가능하다.
public void updateName(String name) {
,,,
}
public void updateAge(int age0 {
,,,
}
시그니처를 활용한다.
메서드의 시그니처와 오버로딩으로 메서드명을 줄일 수 있다.
다음은 member 를 각각 code와 name으로 찾는 예제이다.
두 메서드는 code 와 name 각각 다른 필드로 Member를 찾고 있지만, 둘 다 String 타입 의 인자를 하나만 갖고 있어 컴파일 오류가 발생한다.
public Member findMember(String code) {
,,,
}
public Member findMember(String name) {
,,,
}
이 오류를 해결하기 위해 다음과 같이 수정했다. 하지만 오히러 메서드명만 길어지고 말았다.
public Member findMemberByCode(String code) {
,,,
}
public Member findMemberByName(String name) {
,,,
}
앞서 우리는 메서드 시그니처와 오버로딩을 이용해 메서드명을 줄인다고 했다.
메서드 오버로딩을 하기 위해선 인수의 갯수가 다르거나, 인수의 자료형이 달라야 한다. 우리는 인수의 개수를 변경할 수 없기 때문에 인수의 자료형을 변경하기로 하자.
두 인수의 자료형이 모두 문자열인데 어떻게 변경할까? 객체지향 생활체조 규칙 3번의 '원시타입과 문자열을 포장하라' 그리고 규칙 8번 '일급 컬렉션을 사용하라' 규칙을 따르다 보면 자연스럽게 두 인수의 자료형이 달라지게 된다. code를 별도의 Code 클래스로 포장하고, name을 별도의 Name 클래스로 분리하면 된다.
그러면 다음과같이 메서드명도 짧고, 컴파일 오류도 나지 않으면서 의미도 명확한 메서드가 만들어지게 된다.
public Member findMember(Code code) {
,,,
}
public Member findMember(Name name) {
,,,
}
참고자료