인프런 워밍업 스터디 클럽 3기 2주 차 발자국
코드 다듬기와 리팩토링에 대한 요약
1. 코드 다듬기
주석의 양면성:
주석은 코드로 설명할 수 없는 의사결정 히스토리를 기록하는 데 사용하되, 자주 변하는 정보는 주석으로 작성하지 않는 것이 좋다. 주석이 많다는 것은 비즈니스 로직이 코드에 잘 녹아들지 못했음을 의미할 수 있다.가독성을 위한 메서드와 변수 정렬:
메서드는 상태 변경 > 판별 > 조회 순으로 나열하고, 접근 제한자는 public → private 순서를 유지하면 가독성이 향상된다.패키지 구조 설계:
패키지는 문맥 정보를 제공해야 하며, 너무 세밀하거나 큰 단위로 나누면 유지보수가 어려워진다. 대규모 변경 시 팀원들과 반드시 협의해야 한다.클린 코드의 현실적 접근:
클린 코드는 은탄환이 아니다. 요구사항이 변하지 않는 경우 절차지향적인 코드가 더 적합할 수도 있다. 실무에서는 품질과 빠른 결과물 사이에서 균형을 잡는 것이 중요하다.
2. 리팩토링
리팩토링의 본질:
리팩토링은 단순히 코드를 변경하는 것이 아니라, 응집도를 높이고 결합도를 낮추는 과정이다. 객체 간의 관계와 책임을 점검하며 진행해야 한다.예외 처리와 boolean 반환:
기존의 boolean 반환 방식을 예외 처리로 변경하는 것은 상황에 따라 좋을 수도, 오버엔지니어링이 될 수도 있다. 예외 처리는 비용이 크므로 신중히 사용해야 한다.일급 컬렉션 활용:
컬렉션을 직접 노출하지 않고 이를 감싸는 클래스를 사용하면 유지보수가 쉬워지고 테스트 가능성이 높아진다.객체에 메시지를 보내라:
무분별한 getter 사용 대신 객체에 메시지를 보내는 방식으로 설계하자. 예를 들어,isSamePassTypeWith
메서드를 통해 객체 내부에서 비교하도록 하면 캡슐화가 강화된다.인터페이스 활용:
조건별로 다른 동작을 수행해야 할 때 인터페이스를 도입해 if문 사용을 줄이고 유연성을 높일 수 있다.
3. 리팩토링 사례
✅ 리팩토링 성공 사례
중복 제거 및 메서드 추출:
중복된 로직을 제거하고 메서드로 분리해 가독성과 재사용성을 높였다.StudyCafePassMachine 의존성 주입:
필요한 의존성을 외부에서 주입받도록 하여 내부 구현을 외부에 노출하지 않도록 개선했다.도메인 모델 개선:
StudyCafePassType
내LOCKER_TYPES
상수를 선언해 사물함 관련 로직을 간단하게 처리했다.특정 타입만 처리하는 로직을 enum 내부에서 해결하도록 하여 책임 분리를 명확히 했다.
Order 도메인 추출:
스터디 카페 좌석 이용권과 사물함 이용권을 합친 Order 도메인을 새로 만들어 FixedPassType 관련 분기문을 간소화했다.
❌ 놓친 부분과 개선 방향
FileHandler 개선 필요:
데이터를 가져오는 로직만 포함되어 있으나, File 관련 로직이 추가되면 클래스가 방대해질 우려가 있다.Provider
를 통해 데이터 요구사항 중심으로 설계하는 것이 바람직하다.도메인과 View 로직 분리 부족:
StudyCafePassType
enum에 입력 관련 필드(command
)가 포함되어 있어 도메인 모델과 View 로직이 섞였다. 이는 입력 방식 변경 시 도메인 모델까지 수정해야 하는 문제를 초래한다.
4. 최종 결론
좋은 코드는 단순히 동작하는 코드가 아니라, 이해하기 쉽고 유지보수 가능한 코드다.
완벽한 설계는 없으며, 지속적으로 개선하며 유연한 구조를 만들어가는 것이 중요하다.
객체 지향 설계의 핵심은 변경에 유연한 구조를 만드는 것이다.
댓글을 작성해보세요.