코드의 효율성, 잘 구성된 아키텍처, 테스트의 용이성 등과 같이 좋은 코드는 여러가지 제약조건을 가지고 있다.
단순히 이해하기 쉬운 코드가 최선은 아니다. 그럼에도, 차선을 위해서 우리는 코드를 읽기 쉽게 작성하는 것이 좋다.
assert((!(bucket=FindBucket(key)))||!bucket->IsOccupied());
위의 코드보다, 아래의 코드가 이해하기 쉽듯. 이해하기 쉬운 코드가 중요하다.
bucket = FindBucket(key);
if(bucket!=null) assert(!bucket->IsOccupied());
→ 코드가 짧을수록, 좋은 코드는 아니다.
이제부터 좋은 코드. 사용하고싶어지는 코드를 작성하는 방법에 대해 알아보자
이름은 일종의 설명문으로 간주해야한다. 충분한 공간은 아니지만 변수, 함수, 클래스등의 이름을 잘 고민하고 결정지을 필요가 있다.
그 로드맵은 다음과 같다.
물론, 지나치게 화려하면 속빈강정이다. split → explode는 오히려 로직을 더욱 추상적으로 만들 수 있다.
for(int i = 0; i<clubs.size(); i++){
for(int j = 0; j<members.size();j++){
if(clubs[i].getMembers().contains(members[j]){
....
}
}
}
-> 다음으로 변경하는 것이 좋다.
for(int ci = 0; ci<clubs.size(); ci++){
for(int mi=0; mi<members.size(); mi++){
if(clubs[ci].getMembers().contains(members[mi]){
...
}
}
}