[넥스트스텝] 반복문 내 객체생성은 성능을 저하시킬까?

2021. 9. 2. 08:27개발공부/테스트 주도 개발

반복문 내 객체생성은 성능을 저하시킬까?

리뷰어 분이 반복문 내에서 객체가 초기화 되는 부분을 리펙토링 해보라고 피드백 주셨습니다.
다른 부분을 리펙토링 할때도 객체 초기화는 반복문 내에서 하면 안된다는 제약이 생겨
불편해지기 시작했습니다. 예를 들어 Car Names를 List로 받아서 Car 객체를 createCar을 이용해 초기화 해줘야 할 때
반복문 안에 객체 초기화도 같이 들어가야 합니다.

    public static Cars createCars(String[] carNames, List<Car> cars) {
        for (String carName : carNames) {
            cars.add(Car.createCar(carName, new ArrayList<Boolean>()));
        return new Cars(cars);
    }

그러면 우리는 객체 초기화를 반복문 내부/외부 중 어떤 방식을 지향해야할까요?
구글링 해본 결과 성능은 사실 크게 차이가 없고 지역변수의 스코프는 항상 최소화 되어야 한다라는
코드정신?을 지킨다면 될거라 생각듭니다.

아래는 제가 리펙토링 피드백 받은 코드인데, for문 내 초기화 해주지 않고 외부 선언 후 변수에 내재화시켜서
for 문 내 호출만 해주면 성능이 개선될 수 있어 리펙토링을 요청하신 것 같습니다.

//리펙토링 전
    protected void playGame(){
        for (int i = 0; i < gameCount; i++) {
            ResultView.printResult(
                    cars.moveCars(new RandomNumCondition())
            );
        }
    }
//리펙토링 후
    private RandomNumCondition randomNumCondition;

    protected void playGame(){
        randomNumCondition=new RandomNumCondition();
        for(int i=0;i<gameCount; i++){
            ResultView.printResult(
            cars.moveCars(randomNumCondition)
            );
        }
    }

참고자료: