티스토리 뷰

[프로그래밍 방법론] 함수를 잘 만드는 방법 – Clean Code


이 글은 Clean Code 책의 내용을 정리한 것입니다.


프로그래밍 초창기에는 시스템을 루틴과 서브루틴으로 나눴고, 포트란과 PL/1 시점에는 시스템을 프로그램, 하위 프로그램, 함수로 나뉘었습니다. 지금은 함수만 사용을 하고 있습니다. 따라서 어떤 프로그램이든 함수가 가장 기본적인 단위입니다.


이 글에서는 함수를 잘 만드는 방법에 대해서 소개할 까 합니다.


만약 하나의 함수에 수많은 기능이 포함이 되어, 100여줄이 된다고 하면 개발자는 이 코드를 한번에 읽을 수 있을까요?


그렇지 않습니다. 이는 가독성을 떨어뜨리는 치명적인 문제가 될 가능성이 높습니다. 그럼 어떻게 하면 함수를 가독성이 높게 만들 수 있을까요? 그 방법에 대해서 알아보도록 하겠습니다.


1) 작게 만들어라


함수를 만드는 첫 번째 규칙은 ‘작게’입니다. 두 번째 규칙도 ‘더 작게’입니다. 함수는 경험상 짧으면 짧을수록 좋습니다. 그리고 기능이 길어지는 함수라면 다른 함수로 나뉘어 개발하는 것이 좋습니다. 


if/else/while 문 등에 들어가는 블록은 한 줄이면 좋습니다. 즉 블록 안에서 다른 함수를 호출하게 하는 것이죠. 이 때 들어가는 함수의 이름을 적절히 짓는다면 코드 이해가 더 쉬워집니다. 


2) 한가지만 해라!


지난 30년간 여러 가지 다양한 표현으로 프로그래머에게 주어진 충고를 살펴보겠습니다


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


함수 내에서 의미있는 이름으로 함수를 추출 할 수 있다면 그 함수는 여러작업을 하는 셈이므로 간소화 해야 합니다.


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


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


내려가기 규칙: 코드는 위에서 아래로 이야기처럼 읽혀야 좋습니다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 오는 것이 좋습니다. 


4) Switch 문


Switch 문을 작게 만들기 어렵습니다. Case 내는 단일 블록이나 함수를 선호해야 합니다. 다형성을 이용하면 반복을 피할 수 있습니다.


Public Money calculatePay(Employee e) throw InvalidEmployeeType {

Switch (e.Type){

case COMMISSIONED:

return calculateCommisionedPay(e);

case SALARIED:

return calculateSalay(e);

default:

throw new InvalidEmployeeType(e.Type);

}

}


위의 코드는 함수가 길고, 한가지 작업만 수행하지 않으며, SRP(Single Responsibility Principle)을 위반하고, OCP(Open Closed Principle)을 위반합니다. 그 이유는 새로운 직업이 추가가 될 때마다 코드가 변경이 되어야 하기 때문입니다.


5) 서술적인 이름을 사용하라


서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렷해지고 코드 개선이 쉬워집니다. 또한 이름을 붙일 때는 일관성이 있어야 합니다. 


6) 함수 인수


이상적인 인수의 개수는 0개입니다. 4개 이상의 경우는 특별한 이유가 필요합니다. 이는 테스트 관점에서 살펴보면 되는데, 인수가 많아지면 각자기 인수 조합으로 함수 검증하는 케이스수가 급증하게 되기 때문입니다.


인수가 2-3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성을 살펴봐야 합니다.


7) Getter와 Setter를 구분하라.


함수는 뭔가 수행을 하거나, 뭔가에 답하거나 둘 중에 하나만 해야 합니다. 목적은 객체 상태를 변경하거나 반환하거나 둘 중 하나입니다. 


8) 반복하지 말라


중복은 소프트웨어에서의 모든 악의 근원입니다. 많은 원칙과 기법이 중복을 없애거나 제어할 목적으로 나와 있습니다. 관계형 데이터베이스의 정규식과 객체지향 프로그래밍 방법론이 그 예입니다. 


결론


모든 시스템은 특정 응용분야 시스템을 기술할 목적으로 만들어지며, 함수는 언어에서 동사이고, 변수는 명사입니다. 지난 30년간 여러 가지 다양한 표현으로 프로그래머에게 주어진 충고를 살펴보겠습니다


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


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.



댓글