반응형
분류 코드마다 동작이 다른 경우 "분류 코드를 하위 클래스로 치환" 리팩토링을 적용할 수 있다.
필요한 상황은?
분류 코드마다 객체가 다른 동작을 한다.
문제는?
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 메소드를 추상 메소드로 만든다.
반응형
'리팩토링' 카테고리의 다른 글
[리팩토링] 분류 코드를 상태/전략 패턴으로 치환 (0) | 2023.11.06 |
---|---|
[리팩토링] 분류 코드를 클래스로 치환 (0) | 2023.11.06 |
[리팩토링] 클래스 추출 (0) | 2023.11.06 |
[리팩토링] 자바 코딩 규약 (Java Coding Conventions) 8가지 (0) | 2023.11.06 |
[리팩토링] 메소드 추출 (0) | 2023.11.06 |