1편에서는 함수를 한 가지 일만 하게 만들기 위해서 추상화 레벨을 조절하고, 각 함수가 자기 책임을 지는 것이 중요하다는 이야기를 했다.
제일 아래에 링크를 남겨놓을 테니 먼저 읽어보면 도움이 된다.
이번 글에서는 함수 인수와 부수효과를 중심으로 더 구체적인 규칙을 다뤄보겠다.
함수 인수는 적을수록 좋다
함수의 인수는 0개가 가장 이상적이다. 필요한 값은 클래스 내부의 인스턴스 변수를 활용할 수 있기 때문이다.
- 0개 → 단순하고 읽기 쉽다.
- 1개 → 사용자가 딱 하나만 이해하면 된다.
- 2개 이상 → 이해해야 할 것이 늘어나고, 특히 순서까지 중요해지기 때문에 복잡도가 커진다.
따라서 하나의 개념으로 묶어서 전달하거나 클래스의 인스턴스 변수를 이용하는게 좋다.
예시
// 인수가 많아 순서를 기억해야 하는 경우
drawRectangle(10, 20, 30, 40);
// 하나의 개념으로 묶어 전달
Rectangle rect = new Rectangle(10, 20, 30, 40);
drawRectangle(rect);
플래그 매개 변수는 피하자
플래그(boolean 인수)는 사실상 함수가 두 가지 일을 하고 있다는 것을 알려준다.
물론 피할 수 없는 상황도 있겠지만, 가급적 쓰지 않는 것이 좋다.
조회와 명령은 분리해야 한다
함수는 조회(get) 또는 명령(do) 중 하나만 해야 한다.
두 가지를 동시에 하게 되면 읽는 사람 입장에서는 함수의 의도를 이해하기 어렵게 된다.
- 조회 함수 → 값을 반환하고, 부수효과가 없어야 한다.
- 명령 함수 → 상태를 바꾸지만, 값을 반환하지 않는 편이 좋다.
에러코드보다 예외
위 원칙과 연결되는 것이 바로 에러 처리 방식이다.
에러코드를 반환하는 함수는 조회와 명령을 동시에 하게 되는 경우가 많다.
차라리 예외(Exception)를 던지는 것이 더 깔끔하다.
부수효과는 두 가지 일을 하는 것이다
부수효과(side effect)는 말 그대로 의도치 않은 추가 작업이다.
예를 들어 단순히 값을 계산하는 함수가 로그 파일까지 건드린다면, 그 함수는 사실 두 가지 일을 하고 있는 것이다.
또한 많은 경우 시간적인 결합이나, 순서 종속성을 초래하게 된다.
따라서 부수효과가 불가피하다면 이것을 이름에 반드시 드러내야한다. (한가지 일을 한다는 원칙에는 위반되지만)
마무리
정리해보면, 좋은 함수는 다음을 지켜야 한다.
- 인수는 적을수록 좋다 (0~1개 이상적).
- 이항/삼항 함수는 가능하면 객체로(개념적으로 하나) 묶자.
- 플래그 변수는 피하자.
- 조회와 명령은 분리해야 한다.
- 에러코드 대신 예외를 사용하자.
- 부수효과는 “두 가지 일을 한다”는 신호다.
1편
'개발 > 책' 카테고리의 다른 글
| 함수만 잘 짜도 중간은 간다 - 1 [Clean Code] (0) | 2025.09.17 |
|---|---|
| 소프트웨어 설계가 꼬이는 이유? ADP, SDP, SAP로 풀어보기[Clean architecture] (1) | 2025.09.08 |
| 프로그래밍 패러다임 : 빼앗긴 덕분에 얻은 것들 [Clean architecture] (1) | 2025.09.02 |