인프런 워밍업 스터디 클럽 3기 2주 차 발자국

코드 다듬기와 리팩토링에 대한 요약

1. 코드 다듬기

  • 주석의 양면성:
    주석은 코드로 설명할 수 없는 의사결정 히스토리를 기록하는 데 사용하되, 자주 변하는 정보는 주석으로 작성하지 않는 것이 좋다. 주석이 많다는 것은 비즈니스 로직이 코드에 잘 녹아들지 못했음을 의미할 수 있다.

  • 가독성을 위한 메서드와 변수 정렬:
    메서드는 상태 변경 > 판별 > 조회 순으로 나열하고, 접근 제한자는 public → private 순서를 유지하면 가독성이 향상된다.

  • 패키지 구조 설계:
    패키지는 문맥 정보를 제공해야 하며, 너무 세밀하거나 큰 단위로 나누면 유지보수가 어려워진다. 대규모 변경 시 팀원들과 반드시 협의해야 한다.

  • 클린 코드의 현실적 접근:
    클린 코드는 은탄환이 아니다. 요구사항이 변하지 않는 경우 절차지향적인 코드가 더 적합할 수도 있다. 실무에서는 품질과 빠른 결과물 사이에서 균형을 잡는 것이 중요하다.

2. 리팩토링

  • 리팩토링의 본질:
    리팩토링은 단순히 코드를 변경하는 것이 아니라, 응집도를 높이고 결합도를 낮추는 과정이다. 객체 간의 관계와 책임을 점검하며 진행해야 한다.

  • 예외 처리와 boolean 반환:
    기존의 boolean 반환 방식을 예외 처리로 변경하는 것은 상황에 따라 좋을 수도, 오버엔지니어링이 될 수도 있다. 예외 처리는 비용이 크므로 신중히 사용해야 한다.

  • 일급 컬렉션 활용:
    컬렉션을 직접 노출하지 않고 이를 감싸는 클래스를 사용하면 유지보수가 쉬워지고 테스트 가능성이 높아진다.

  • 객체에 메시지를 보내라:
    무분별한 getter 사용 대신 객체에 메시지를 보내는 방식으로 설계하자. 예를 들어, isSamePassTypeWith 메서드를 통해 객체 내부에서 비교하도록 하면 캡슐화가 강화된다.

  • 인터페이스 활용:
    조건별로 다른 동작을 수행해야 할 때 인터페이스를 도입해 if문 사용을 줄이고 유연성을 높일 수 있다.

3. 리팩토링 사례

리팩토링 성공 사례

  1. 중복 제거 및 메서드 추출:
    중복된 로직을 제거하고 메서드로 분리해 가독성과 재사용성을 높였다.

  2. StudyCafePassMachine 의존성 주입:
    필요한 의존성을 외부에서 주입받도록 하여 내부 구현을 외부에 노출하지 않도록 개선했다.

  3. 도메인 모델 개선:

    • StudyCafePassTypeLOCKER_TYPES 상수를 선언해 사물함 관련 로직을 간단하게 처리했다.

    • 특정 타입만 처리하는 로직을 enum 내부에서 해결하도록 하여 책임 분리를 명확히 했다.

  4. Order 도메인 추출:
    스터디 카페 좌석 이용권과 사물함 이용권을 합친 Order 도메인을 새로 만들어 FixedPassType 관련 분기문을 간소화했다.

놓친 부분과 개선 방향

  1. FileHandler 개선 필요:
    데이터를 가져오는 로직만 포함되어 있으나, File 관련 로직이 추가되면 클래스가 방대해질 우려가 있다. Provider를 통해 데이터 요구사항 중심으로 설계하는 것이 바람직하다.

  2. 도메인과 View 로직 분리 부족:
    StudyCafePassType enum에 입력 관련 필드(command)가 포함되어 있어 도메인 모델과 View 로직이 섞였다. 이는 입력 방식 변경 시 도메인 모델까지 수정해야 하는 문제를 초래한다.

4. 최종 결론

  • 좋은 코드는 단순히 동작하는 코드가 아니라, 이해하기 쉽고 유지보수 가능한 코드다.

  • 완벽한 설계는 없으며, 지속적으로 개선하며 유연한 구조를 만들어가는 것이 중요하다.

  • 객체 지향 설계의 핵심은 변경에 유연한 구조를 만드는 것이다.

댓글을 작성해보세요.


채널톡 아이콘