가독성 높은 코드 만들기 방법 #1 – 멤버 변수의 개수를 줄여라!

한개의 클레스에서 멤버변수가 많을 수록 가독성이 떨어 집니다.
코드 분석시, 한 class 안에서 변수들 어떻게 읽히고, 쓰이고, 그것들의 관계가 어떻게 되는지 추적 해야 하기 때문인데, 그 수가 많을 수 록 마구 뭉쳐진 실타레 처럼 분석하기 어렵습니다.
즉 가독성이 떨어지면 분석하는데 시간이 많이 걸립니다.그리고 “가독성이 좋다” 는 결국 “모듈화가 잘 되어 있다” 가 됩니다.

아래 예제는 선과 원을 그리는 가독성이 낮은 코드의 예제 입니다.

class Line {

	int startX, startY;
	int endX, endY;
	int colorR, colorG, colorB;

	public void setStart(int x, int y){

		startX = x;
		startY = y;
	}

	public void setEnd(int x, int y){

		endX = x;
		endY = y;
	}

	public void setColor(int r, int g, int b){

		colorR = r;
		colorG = g;
		colorB = b;		
	}
	
	public void draw() {
		// Implementation required
	}
}


class Circle {
	
	int centerX, centerY;	
	int radius;
	int colorR, colorG, colorB;
	int borderThickness;
	int borderColorR, borderColorG, borderColorB;

	public void setCenter(int x, int y){

		centerX = x;
		centerY = y;
	}

	public void setRadius(int r){

		radius = r;
	}

	public void setColor(int r, int g, int b){

		colorR = r;
		colorG = g;
		colorB = b;
	}

	public void setBorderThickness(int thickness) {
		
		borderThickness = thickness;
	}	

	public void setBorderColor(int r, int g, int b){

		borderColorR = r;
		borderColorG = g;
		borderColorB = b;	
	}

	public void draw(){
		// Implementation required
	}
}


int main() {

	Line line = new Line();
	line.setStart(10, 10);
	line.setEnd(20, 40);
	line.setColor(255,0,0);
	line.draw();

	Circle circle = new Circle();
	circle.setCenter(20, 40);
	circle.setRadius(10);
	circle.setColor(0,0,255);
	circle.setBorderThickness(2);
	circle.setBorderColor(0,255, 0);
	circle.draw();
}

위의 코드에서 Line class는 멤버변수(startX, startY, endX …) 가 7개 이고, circle은 10개가 됩니다. 그럼 위의 코드를 리펙토링 해보겠습니다.
멤버변수들 에서 X(statX ..), Y(startY ..) 로 끝나는 좌표 값들과 들과 R,G,B 로 끝나는 Color 값들을 묶을수가 있겠네요. 묶는 기준은 항상 같이 사용 된다고 판단 되기 때문 입니다. 좌표는 X, Y가 항상 같이 쓰이고 Color 의 r,g,b 또한 그렇지요.
그럼 아래와 같이 좀더 가독성이 좋은 코드가 됩니다.

class Point{

	int x;
	int y;

	public Point(int xx, int yy){
		x = xx;
		y = yy;
	}
}


class Color{

	int r;
	int g;
	int b;

	public Color(int rr, int gg, int bb) {
		r = rr;
		g = gg;
		b = bb;
	}
}


class Line {

	Point start;
	Point end;
	Color color;

	public void setStart(Point point){
		
		start = point;
	}

	public void setEnd(Point point){

		end = point;
	}

	public void setColor(Color rgb){

		color = rgb;		
	}

	public void draw() {
		// Implementation required
	}

}


class Circle {
	
	Point center;
	int radius;
	Color color;

	int borderThickness;
	Color borderColor;

	public void setCenter(Point point){

		center =  point;
	}

	public void setRadius(int r){

		radius = r;
	}

	public void setColor(Color rgb){

		color = rgb;
	}

	public void setBorderThickness(int thickness) {
		
		borderThickness = thickness;
	}	

	public void setBorderColor(Color rgb){

		borderColor = rgb;
	}

	public void draw(){
		// Implementation required
	}
}


int main() {

	Line line = new Line();
	line.setStart(new Point(10, 10));
	line.setEnd(new Point(20, 40));
	line.setColor(new Color(255,0,0));
	line.draw();

	Circle circle = new Circle();
	circle.setCenter(new Point(20, 40));
	circle.setRadius(10);
	circle.setColor(new Color(0,0,255));
	circle.setBorderThickness(2);
	circle.setBorderColor(new Color(0,255, 0));
	circle.draw();
}

결국 Line class 는 멤버 변수 개수가 7 -> 3 개로 Circle는 10 -> 5개로 줄었습니다.
위의 코드에 만족 하시나요? 제 눈에는 좀 더 가독성 높은 코드를 만들 수 있어 보이네요. 다음에는 해당 코드로 “가독성 높은 코드 만들기 방법 #2” 를 올리겠습니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중