더 나은 코드를 위한 샌디 메츠의 조언

최근 샌디 메츠의 “루비로 배우는 객체지향 디자인” 소위 POODR로 불리는 책을 끝냈습니다. 예전부터 이 책을 추천하는 글을 많이 보았는데, 실제로 읽어보니 내용도 충실하고 책의 구성도 뛰어난 수작입니다. OOP를 처음 배우거나 복습하려는 분들께 추천드립니다.

그리고 Ruby Rogues 팟캐스트에서 패널들이 책의 작가와 이 책에 대하여 이야기하는 에피소드가 있어서 들어보았는데, 이 팟캐스트도 같이 들어보시는 것을 추천합니다. 에피소드 87이고요. 저자인 샌디 메츠가 개발에 대하여 다음과 같은 “규칙”을 제시합니다.

  1. 클래스가 100줄을 넘으면 안 된다.
  2. 메서드가 5줄을 넘으면 안 된다.
  3. 메서드 파라미터가 4개 이상 되어서는 안 되며, 파라미터 여러개를 해시 한 개에 뭉뚱그려 넣어도 안 된다.
  4. 레일즈 컨트롤러에서 단 하나의 오브젝트만 인스턴스화해서 필요한 작업을 수행해야 한다.
  5. 각 레일즈 뷰는 단 하나의 인스턴스 변수만 넘겨받을 수 있다.

샌디 메츠는 이를 규칙이라고 불렀지만 그렇다고 절대 어겨서는 안 된다고 하지는 않습니다. 이건 코드를 작성할 때 염두에 두고 비교해볼 만한 기준에 가깝고, 왜 이를 준수할 필요가 없을지 설명할 수 있다면 무시해도 상관 없습니다.

제 경험상 1, 4, 5번을 지키지 않아서 이득이 될 경우는 거의 없다고 봅니다. 2번의 경우는 조금 더 어려운데, 특히 개발 초기 단계에서 정보가 부족해서 어떤 기능을 구현해야 할지 명확히 파악이 어려울 경우에는 크게 신경쓰지 않는 편이 더 좋다고 생각합니다.

3번은 파라미터를 4개 받는 메서드를 마구 작성해도 괜찮다고 사람들이 오해할까 조금 걱정이 됩니다. 샌디 메츠가 정확히 무슨 생각을 했는지는 모르겠지만 전 파라미터를 4개 받는 메서드는 너무 복잡하고 이해하기 어렵다고 생각합니다. 제 기준으로 상한선은 파라미터 2개에다가 선택적으로 받는 해시 한 개입니다. 파라미터가 그보다 더 많다면 리팩토링이 필요하다고 봅니다.