1~4 줄이 좋다! 말이 쉽지 ..
함수는 한 가지만 해야하고 한 가지만 잘하고 한 가지만을 해야한다.
의미 있는 이름으로 함수를 작성할 수 있다면 그 함수는 여러 작업을 하는 함수이다.
함수를 한 가지 작업만 하기 위해 만들려면?
1. 함수당 추상화 수준은 하나로 한다.
fun calculatePay(e: Employee): Money {
return when (e.type) {
Type.COMMISSIONED -> calculateCommissionedPay(e)
Type.HOURLY -> calculateHourlyPay(e)
Type.SALARIED -> calculateSalariedPay(e)
else -> throw InvalidEmployeeType(e.type)
}
}
이 코드의 문제는 3가지가 있다.
1. 함수가 길다.
새 직원 유형을 추가하면 더 길어진다.
2. 한 가지 작업만 하지 않는다.
3. SRP 위반
코드를 변경할 이유가 여럿이기 때문에
4. OCP 위반
이 코드를 다형성을 사용해서 Employee를 추상 클래스로 하는 각 직원의 계산을 스스로 하게 만들게 추상화 한다.
플래그 인수는 추하다.. 함수가 벌써 부터 2가지 일을 한다는 것이다.
예시로는 유저 정보 확인하는 함수에 session을 초기화하는 동작을 추가하는 것이다.
문제가 발생 시 찾기가 힘들다..
if(delete1() == ok) {
if(delete2() == ok) {
if(delete3() == ok) {
...
위와 같이 오류 코드를 사용하면 여러 겹으로 충접이 될 수 있다.
try{
delete();
delete1();
delete2();
catch(Exception e){
logger.log(e.message());
try-catch 블록은 추함으로 메소드로 분리한다.
try{
delete123();
catch(Exception e){
logError(e);
프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.
개발자의 마음가짐으로 좋은 문구인 것 같다.
함수는 동사이며, 클래스는 명사다.
이야기를 만드는 것 처럼 함수인 동사를 잘 만들어야 매끄럽게 이야기 할 수 있다.