Software Lab

캐싱 변수 본문

코드 리펙토링

캐싱 변수

아임코더 2022. 6. 22. 16:51
class Circle{

    double radius;
    double area;
    
    public Circle(double radius){

        this.raduis = radius;
        this.area = radius * radius * 3.14;             
    }


    public void getArea(){

        return this.area;
    }
    
    
    public void setRadius(double radius){

        this.radius = radius;
        this.area = radius * radius * 3.14;
    }
}

<성능 우선>

 

class Circle{

    double radius;

    public Circle(double radius){

        this.radius = radius;
    }

   
    public double getArea(){

        return this.radius * this.radius * 3.14;
    }
    
    
    public void setRadius(double radius){
    
        this.radius = radius;
    }
}

<가독성 우선>

 

 

<가독성 우선>에서 변수 radius값이 결정되면 area는 자동으로 값이 결정되므로 불필요하다.

변수가 많을수록 가독성은 나쁘다.
코드를 해석할 때, 변수가 어떻게 사용되고 있는지 파악해야 하는데, 당연히 많은 변수는 더 많은 시간이 필요로 한다. area와 같이 불필요한 변수를 제거하여 가독성을 높인다.

하지만 성능을 위해 일부러 불필요한 변수를 사용하는 경우도 있다.
만약 <성능 우선>에서 getArea 함수가, 자주 호출되어서 전체 프로그램 성능 저하에 크게 기여 하다면 처리 속도를 개선할 필요가 있다. 그렇다면 불필요하지만 area 같은 캐싱 변수를 만들어 성능을 좋게 한다.

불필요한 변수를 사용하는 경우, 개발자가 실수로, 결함을 만들 가능성이 크다.
예를 들면 <성능 우선>에서 setRadius 함수를 추가할 때, 실수로 radius만 갱신하고, area(22번 줄)는 갱신하지 않을 수 있기 때문이다.

Comments