함수를 읽기 쉽고 이해하기 쉽게 짜는 방법. 의도를 분명히 표현하는 방법 등 함수를 짜는 방법론 소개
- 함수는 짧고 간결하게 만들어야한다.
- 예전 프로그래머는 짧게 만드는 것이 필수였음. 한 화면 안에서 짜야했기 때문. 반드시 한 화면에 들어가게 짜자. 또한 함수는 최대한 짧게 (20줄 이내)로 만드는 것을 지향하자.
- if문 / else문 / while문 등에 들어가는 블록은 한 줄이어야 한다. 그래야 함수는 읽고 이해하기 쉬워진다.
- 한 함수는 한 가지 기능만 해야한다.
- 타 함수와 독립적이여야하며, 한 기능만을 수행하여야한다. 그리하여 분석 및 이해가 쉬워진다.
- 함수의 추상화 수준은 하나로 해야한다.
- 위에서 언급한 바와 같이 한 함수가 한 가지 기능만 하게 하려면 모든 코드의 추상화 수준은 동일해야한다.
- 수준이 달라지면 분석 및 이해가 어려워진다. 또한 함수의 근본적인 기능 및 의미를 알기 어렵다.
- 내려가기 규칙
- 코드는 하나의 소설 및 이야기 처럼 위에서 아래로 읽히기 좋아야한다. 그리하여 위에서 아래로 코드를 읽으면 함수 추상화 수준이 한 단계식 낮아진다.
- switch문을 사용할 때에는 다형성을 활용하자.
- switch문을 사용하면서 코드를 짧게 만드는 것 및 한 가지 기능만 하게끔 만드는 것은 상당히 어렵다.
- 하지만 다형성을 사용한다면 (추상 팩토리에 스위치 문을 숨긴다면) 코드를 더욱 보기 쉽게 만들 수 있다.
- 이름을 지을 때에는 서술적인 이름으로 지어라.
- 이름을 통해서 이 함수가 어떤 기능을 하는지 유추 가능해야한다.
- 긴 이름보다 짧은 이름이 좋지만, 짧고 어려운 이름 보다 길고 쉬운 이름이 좋다.
- 또한 길고 쉬운 이름이 길고 쉬운 주석보다 좋다.
- 서술적인 이름은 문구, 명사, 동사를 사용한다.
- 함수 인수는 되도록 적게 사용하자.
- 인수는 가능한 한 3개 이상을 피하는 편이 좋다.
- 2개 이상의 인수는 가독성에도 문제를 야기하지만, 테스트 시에도 부담감을 더한다.
- 함수 내에서 부수 효과를 일으키지 말자.
- 부수 효과를 일으키는 것은 한 함수에서 하나의 기능만 동작하기를 약속한 것에 대한 파기다.
- 부수 효과에 대한 예시로, 비밀번호를 체크하는 부분에서 정보를 초기화하는 등의 기능이 들어가있는 것을 말한다.
- 명령과 조회를 분리하자.
- 하나의 기능만 하자와 같은 맥락이다.
- 명령을 하고자하면 명령 함수를, 조회를 하고자하면 조회 함수를 만들자.
- 한 함수에서 (ㅁㅁ면 ㅁㅁ하자)라는 등의 방식은 되도록 피하자.
- 오류를 내뱉기보다 예외를 적극적으로 사용하자.
- try catch라는 매우 유용한 오류 처리 메서드가 존재한다.
- 오류 처리도 하나의 작업이기 때문에, 오류를 처리하는 함수도 하나의 함수로 동작하게 하자.
- 반복 및 중복은 피하자.
- 이는 프로그래밍 차원에서 상당히 좋지 않다.
- 중복 제거에 많은 힘을 쓰면 코드가 상당히 깨끗해질 것이다.
- 구조적 프로그래밍
- 함수 및 함수 내 모든 블록에는 입구와 출구(return 문)가 하나만 존재해야한다.
- 루프 내의 break 및 continue는 되도록, goto는 절대 사용하지 말자.
- return, break, continue는 작은 함수에서는 의도를 표현하기 쉬워진다면 여러 번 사용해도 괜찮다.
- 그럼 함수는 어떻게 짜야하는가?
- 테스트를 위한 단위 테스트 케이스를 열심히 만들어보자.
- 단위 테스트 케이스를 만들면서 함수를 짜다보면 함수는 자연스럽게 한가지 기능만 하며, 짧아질 것이다.
- 코드를 다듬고, 이름을 변경하며, 중복을 제거해보자.
- 처음부터 좋은 함수를 만들기는 어렵다. 여러번 다듬다보면 좋은 함수가 나올 것이다.
댓글