오늘 코드 리뷰도 지난 코드 리뷰에 이어 간단한 자동차 경주 게임 코드에서 시작한다.
프로그래밍을 하다 보면 다음 코드와 같이 한 줄에 점(dot, .)을 2개 이상 사용하는 경우가 있다.
public class ResultView {
private String getTopRankedCar(List<Car> carList) {
String topCarString = "";
int maxPosition = getMaxPosition(carList);
for(int i=0; i<carList.size(); i++) {
if(carList.get(i).getPosition()==maxPosition) topCarString += carList.get(i).getCarName() + ", ";
}
return topCarString.substring(0, topCarString.length()-2);
}
private int getMaxPosition(List<Car> carList) {
int maxPosition = 0;
for(int i=0; i<carList.size(); i++) {
if(maxPosition < carList.get(i).getPosition()) maxPosition = carList.get(i).getPosition();
}
return maxPosition;
}
}
위 코드 중 ''carList.get(i).getPosition()" 코드를 보면 점(.)을 두 개 사용하고 있다. 이와 같이 특정 객체의 데이터에 접근할 때 점(.)을 무분별하게 사용하는 경우가 있다.
객체지향 생활 체조 원칙에서도 "한 줄에 점을 하나만 찍는다."와 같은 원칙을 지킬 것을 요구한다.
위 코드에서 점(.)을 하나만 사용하라고 하면 반드시 이렇게 변경하는 사람도 있을 것이다.
private String getTopRankedCar(List<Car> carList) {
String topCarString = "";
int maxPosition = getMaxPosition(carList);
for(int i=0; i<carList.size(); i++) {
Car car = carList.get(i);
if(car .getPosition()==maxPosition) topCarString += car .getCarName() + ", ";
}
return topCarString.substring(0, topCarString.length()-2);
}
위와 같이 리팩토링하면 점(.)이 하나이기 때문에 원칙에 어긋나지 않는다고 할 수 있지만 꼼수를 통한 해결책이지 완벽한 해결방법은 아니다.
이 문제를 해결하기 위한 힌트는 객체지향 생활 체조 원칙의 하나인 규칙 8: 일급 콜렉션 사용을 사용해 해결해 본다.
일급 Collection을 적용했을 때와 적용하지 않았을 때의 장,단점을 비교해 보면 좋겠다.
위 샘플 예제는 코드스쿼드 에서 새롭게 진행 중인 마스터즈 코스에서 발췌한 코드입니다. 코드스쿼드의 마스터즈 코스는 코드 리뷰 방식의 개인별 맞춤 학습 방법입니다.
0개의 의견 from FB
1개의 의견 from SLiPP
carList를 List로 갖고 있지 말고 CarList와 같은 클래스를 통해 캡슐화를 실현해야 한다고 생각합니다.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.