리팩터링/리팩터링 기법

리팩터링. 조건문을 다형성으로 바꾸기(Replace Conditional with Polymorphism)

developer-tj 2023. 2. 23. 12:00
반응형

여러 타입에 따라 각기 다른 로직으로 처리해야 하는 경우에 다형성을 적용해서 조건문을 보다 명확하게 분리 할 수 있다.

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) ? "그을렸다" : "예쁘다";
    }
};