반응형
여러 타입에 따라 각기 다른 로직으로 처리해야 하는 경우에 다형성을 적용해서 조건문을 보다 명확하게 분리 할 수 있다.
switch 문을 각기 다른 클래스로 만들어 제거할수 있다.
모든 조건문을 다형성으로 바꿔야 하는 것은 아니다
switch (bird.type)
{
case "유럽 제비":
return "보통이다";
case "아프리카 제비":
return (bird.numberOfCoconuts > 2) ? "지쳤다" : "보통이다";
case "노르웨이 파랑 앵무":
return (bird.voltage > 100) ? "그을렸다" : "예쁘다";
default:
return "알 수 없다";
}
위 같은 switch 문을 아래 처럼 각기 다른 클래스로 만들어 switch 문을 없앤다
class EuropeanSwallow : public Bird
{
void plumage()
{
return "보통이다";
}
};
...
class EuropeanSwallow : public Bird
{
void plumage()
{
return (bird.numberOfCoconuts > 2) ? "지쳤다" : "보통이다";
}
};
...
class EuropeanSwallow : public Bird
{
void plumage()
{
return (bird.voltage > 100) ? "그을렸다" : "예쁘다";
}
};
'리팩터링 > 리팩터링 기법' 카테고리의 다른 글
리팩터링. Use a Builder (0) | 2023.02.26 |
---|---|
리팩터링 기법. 매개변수를 질의 함수로 바꾸기 (Replace Parameter with Query) (0) | 2023.02.25 |
리팩터링. 반복문 쪼개기 (Split Loop) (0) | 2023.02.22 |
리팩터링. 조건문 분해하기 (Decompose Conditional) (0) | 2023.02.21 |
리팩터링. 함수를 명령으로 바꾸기 (Replace Function with Command) (0) | 2023.02.20 |