스터디/클린코딩

3. 함수

넌 감동란이었어 2022. 10. 1. 20:30

작게 만들어라!

최대한 최대한 아주 작게 만들어야 한다. 한 2줄 3줄 4줄?? 정도가 좋다.

if문 while문 등에 들어가는 블록은 한 줄이어야 한다.

 

한 가지만 해라!

함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.

추상화 수준이 하나인 단계만 순행한다면 그 함수는 한 가지 작업만 하는 것이다.

 

함수 당 추상화 수준은 하나로!

함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일 해야 한다.

 

위에서 아래로 코드 읽기: 내려가기 규칙

코드는 위에서 아래로 이야기처럼 읽혀야 좋다.

 

Switch 문

Switch문은 작게 만들기 어렵다.(if/else 도 마찬가지)

다형성을 이용하여 ABSTRACT FACTORY에 꽁꽁 숨겨 다형성 객체를 사용하는 코드 안에서만 Swich문을 사용한다.

 

서술적인 이름을 사용하라!

서술적인 이름을 사용하면 개발자 머릿속에서 설계가 뚜렷해진다.

또한 이름을 붙일 때는 일관성이 있어야 한다. 

ex) includeSetupAndTearDownPages, includeSetupPages 

 

함수 인수

함수에서 이상적인 인수 개수는 0개이다. 최선은 0개 차선은 1개 이다.

 

  • 많이 쓰는 단항 형식

인수에게 질문을 던지는 경우

boolean fileExisits("MyFile")

인수를 뭔가로 변환해 결과를 반환하는 경우

inputStrean fileOpen("MyFile")

이벤트 함수일 경우

 

이 경우를 제외하고는 단항 함수는 가급적 피한다.

 

  • 이항 함수

인수가 2개인 함수는 1개인 함수보다 이해하기 어렵다.

ex) writeField(name)는 writeField(outputStream, name)보다 이해하기 쉽다.

하지만 좌표를 넘겨주는 경우에는 괜찮다.

ex) Point p = new Point(0,0)

 

  • 삼항 함수

최대한 쓰지말자 이해하기도 어렵고 문제가 두 배 이상 늘어난다.

 

  • 인수 객체

인수가 많이 필요한 경우 변수를 넘기는 것 보다 Point를 넘기는 것이 더 낫다.

이부분은 코딩을 할 때 많이 사용했던 것 같다.

 

  • 인수 목록

String.format같은 함수들처럼 인수 개수가 가변적인 함수도 필요하다.

String.format의 인수는 List형 인수이기 때문에 이항 함수이다.

하지만 너무 많이 사용하면 문제가 된다.

 

  • 동사와 키워드

단항 함수는 함수와 인수가 동사/명사 쌍을 이루어야 한다.

ex) writeFiled(name)

함수이름에 키워드를 추가하면 인수 순서를 기억할 필요가 없다.

ex) assertEquals -> assertExperctedEqualsActual(expected, actual)

 

명령과 조회를 분리하라!

함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야한다.

둘다 하면 안된다.

 

오류 코드보다 예외를 사용하라!

Try/Catch를 사용하여 오류처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.

 

반복하지 마라!

중복은 소프트웨어에서 모든 악의 근원이다.

 

구조적 프로그래밍

함수는 입구와 출구가 하나만 존재해야 한다. 루프 안에서 break나 continue를 사용해서는 안되고 goto는 절대로 절대로 안된다.

 

함수를 짜는 팁!

코드들을 테스트하는 단위 테스트 케이스도 만들고, 코드를 다듬고, 함수를 만들고, 이름을 바꾸고 중복을 제거해야한다. 처음부터 탁 짜낼 수는 없다.

'스터디 > 클린코딩' 카테고리의 다른 글

5. 형식 맞추기  (0) 2022.10.15
4. 주석  (0) 2022.10.07
2. 의미있는 이름  (0) 2022.09.22
소개  (0) 2022.09.16