함수를 만드는 첫째 규칙은 ‘작게!’다. 함수를 만드는 둘째 규칙은 ‘더 작게!’다.
함수는 한 가지를 해야 한다. 그 한가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
한 가지라는건 함수가 한가지 추상화 수준을 실행해야 한다는걸 말합니다.
함수가 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일 해야 합니다.
내려가기
규칙 : 한 함수 다음에는 추상화 수준이 한 단계 더 낮은 함수가 와야합니다.
Switch 문을 숨기는 방법
Switch 문은 어쩔 수 없이 N 가지 일을 수행합니다.
polymorphism을 이용해 저차원 클래스에 숨기고 다형적 객체를 생성하는 방식으로 변경하여 최대한 외부에 노출이 안되게 할 수 있습니다.
함수 이름은 길고 서술적인게 짧고 어려운 이름보다 좋습니다. 또한 일관성을 유지 해야합니다.
함수에서 이상적인 인수 개수는 0개(무항)다.
함수의 인수는 적으면 적을 수록 좋습니다.
단항 함수를 사용하는 케이스는 인수에 질문을 던지거나 인수를 다른 걸로 변환하거나 할 때 사용할 수 있습니다.
1
2
3
// 단항 형식
boolean fileExists("MyFile")
InputStream fileOpen("MyFile")
이항 함수를 사용하는 케이스에는 assertEquals(experted, actual)
같은 경우가 있습니다.
인수를 줄이기 위해 인수 일부를 클래스 변수로 선언하는 방법도 있습니다.
부수 효과를 일으키지 마라!
함수가 한가지 일만 하는 것처럼 이름을 지어놓고 안에서는 추가적으로 다른 일을 하는 경우 시간적인 겹합이나 순서 종속성을 초래하게 됩니다.
일반적으로 출력 인수 사용은 지양해야합니다.
오류 코드보다 예외 코드를 사용하라!
1
if (deletePage(page) == E_OK)
위 명령 함수에서 오류코드를 반환할 경우 오류 코드를 바로 처리해야한다는 문제를 주고 명령 + 질문을 수행합니다.
위에서 deletePage(page)가 예외를 내뱉는 방식으로 변경할 수 있습니다.
Try/Catch 구문은 정상 동작과 오류 동작 처리를 하게됩니다. 각 블록을 함수로 뽑아쓰는게 좋습니다.
오류 코드를 사용하면 오류 코드가 변경 될때 마다 Error Enum을 사용하는 클래스에 재컴파일/재배치가 일어나게 됩니다. Exception은 재컴파일/재배치가 없이 추가할 수 있습니다.
DRY(Don’t Repeat Yourself) 원칙
결국에는 함수는 한가지 일만을 수행해라로 요약되는거 같네요.
오류 코드보다 예외 코드를 사용하라! 이 부분이 실무에서 예외를 거의 사용하지 않았기 때문에 어렵게 느껴집니다.
이 모든걸 다 지키는게 쉽지 않을거 같습니다😱