-
클린코드 함수 - switch 문개발/프로그래밍 2020. 9. 27. 19:54
switch 문 은 보통 함수가 길어질수밖에없다. 그래서 최대한 단 한번만 사용하는것이 좋다.
Money calculatePay(Employee e){ switch(e.type){ case COMMISIONED return calculateCommisionedPay(e); case HOURLY return calculateHourlyPay(e); case SALARIED return calculateSalariedPay(e); default : throw InvalidEmployeeType(e.type); } }
위와같은 switch 문은 여러 문제점을 가지고있다.
동일한 구조를 가진 여러 함수들을 만들어야할 가능성이 많기 떄문이다.
isPayday(Employee e, Date date)
고용 타입에따라 또 switch 문을 구현해야 급여일인지 아닌지 리턴하는 함수를 만들수있을것이고
deliverPay(Employee e, Money pay)
고용 타입에따라 또 switch 문을 구현해야 급여를 지급하는 함수를 만들것이다.
이런 식으로 아주 많은 switch 문을 만들어야 할지 모른다.
고용 타입이 또하나 생기게된다면 모든 switch문을 돌며 수정해야할것이다.
클린코드에서는 switch문을 추상 팩토리에 숨기길 권장한다.
추상 팩토리에서는 switch문을 통해 적절한 Employee 인스턴스를 생성할것이다.
abstract class Employee{ abstract bool isPayday(); abstract Money calculatePay(); abstarct void deliverPay(Money pay); }
Employee 추상클래스를만들고
추후에 고용 타입에따라 Employee를 오버라이드 해서 추상 함수를 구현하면 된다.
interface EmployeeFactory{ Employee makeEmployee(EmployeeRecord r); }
class EmployeeImpl implements EmployeeFactory{ makeEmployee(EmployeeRecord r){ switch(r.type){ case COMISSIONED: return ComissionedEmployee(r); case HOURLY: return HourlyEmployee(r)l case SALARIED: return SalariedEmployee(r); default: throw InvalidEmployee(r.type); } } }
CommissionedEmployee 같은 각각 파생 클래스들은 Employee 추상 클래스를 오버라이드해서 각각 맞게 구현 하면된다.
그러고 변경사항이 생길시 추후에는 저 팩토리만 수정하면 될것이다.
이렇게 되면 단 하나의 switch 문을 사용해서 여러 기능을 구현할수있게 된다.
'개발 > 프로그래밍' 카테고리의 다른 글
클린코드 - 오류,예외처리 (0) 2020.10.07 클린코드 - 객체와 자료구조 (0) 2020.10.06 vscode 비주얼 스튜디오 코드 형식맞추기 - 가로줄크기, 글자크기, 들여쓰기 설정 (0) 2020.10.04 클린코드 함수 - 추상화 (0) 2020.09.27 클린코드 함수 - 적절한 인수값(Parameter) (0) 2020.09.27