본문 바로가기
리팩토링

[리팩토링] 분류 코드를 하위 클래스로 치환

by NYO_O 2023. 11. 6.
반응형

분류 코드마다 동작이 다른 경우 "분류 코드를 하위 클래스로 치환" 리팩토링을 적용할 수 있다.

 

 

필요한 상황은?

분류 코드마다 객체가 다른 동작을 한다.

 

 

문제는?

switch문을 사용해서 동작을 구분한다.

public class Shape {
	private final int typeCode;
	...
	public void draw() {
		switch (typeCode) {
			case LINE:
				...
				break;
			case RECTANGLE:
				...
				break;
			case OVAL:
				...
				break;
			default:
				;
		}
	}
	...
}
public abstract class shape {
    ...
    public abstract void draw();
}

public class ShapeLine extends Shape {
    ...
    @Override
    public void draw() {
        ...
    }
}

public class ShapeRectangle extends Shape {
    ...
    @Override
    public void draw() {
        ...
    }
}

public class ShapeOval extends Shape {
    ...
    @Override
    public void draw() {
        ...
    }
}

 

해법은?

분류 코드를 하위 클래스로 치환해서 다형적 메서드를 작성한다.

 

 

 

결과는?

동작이 클래스별로 나뉜다.

클래스 개수가 늘어난다.

 

 

방법은?

1. 분류 코드를 자기 캡슐화한다. 분류 코드를 나타내는 필드를 직접 보여주는 게 아니라, Getter 메소드를 통해 보여준다.

2. 분류 코드를 바탕으로 인스턴스를 작성하고 있다면 팩토리 메소드를 작성한다.

3. 분류 코드 값 마다 하위 클래스를 작성한다.

4. 분류 코드 필드를 삭제한다.

5. 기존 클래스의 분류 코드 Getter 메소드를 추상 메소드로 만든다.

반응형