이 글은 클린 코드 강의를 보며 나만의 코드를 리팩토링 하는 글입니다.
클린 코드 중 함수의 원칙
- 한가지 일만 해야 한다.
- 함수의 크기는 작아야 한다.
- indentation, while, nested if 등은 없어야 한다
- 잘 지어진 서술적인 긴 이름을 갖는 많은/작은 함수들로 유지해야 한다.
원칙을 지키면서 리팩터링 진행해보는 글을 써보겠습니다.
아래의 코드는 주로 미니 프로젝트를 진행하면서 많이 보는 코드이다.
주석을 보면
- 멤버 조회
- 아이템 조회
- 배송정보 생성
- 주문상품 생성
- 주문 생성
- 주문 저장
6가지 행위들이 있다.
주석이 없으면 이해하는데 시간이 걸리는 코드이고 OrderService에서의 책임이 아닌 행위들이 많아 안티 패턴으로 보인다.
그러면 코드를 어떻게 리팩터링하면 좋을까?
먼저 책임과 역할을 따져보자.
주문 정보를 저장하기 위해 멤버와 아이템을 조회해서 주문 정보에 저장을 해야하니 1, 2, 6 번은 해당 서비스 클래스에의 책임이 맞다.
나머지 3, 4, 5 들은 각각의 도메인들의 책임이다.
도메인에 비지니스 로직 메소드를 리팩터링 해보자.
책임과 역할을 지켜 리팩터링한 결과 대략 15줄 정도 줄어들었다.
하지만 아직까지 코드가 긴 것 같으니 함수의 크기는 작아야 하며, 잘 지어진 서술적인 긴 이름을 갖는 많은/작은 함수들로 유지해야 한다 라는 이 두 가지 원칙을 적용하면서 조회 부분을 리팩터링 해보자.
조회하는 부분을 자세히 보면 메소드 추출로 잘게 쪼게어 리팩터링 해서 코드가 짧아진 것을 볼 수 있다.
다음으로 조회에서 Optional 타입을 꺼낼 때 던지는 예외도 메서드 추출로 따로 빼내어 처리하였다.
Delivery와 OrderItem Order 를 생성하는 메서드 3줄이 아쉽다.
팩터리 클래스를 사용해 리팩터링을 진행해보자.
EntityFactory를 만들어 코드를 개선하면 아래와 같은 코드가 된다…
이렇게 리팩터링을 진행하면 처음 코드보다 가독성이 좋아지는? 좀더 객체지향적인 프로그래밍을 할 수 있다.
부족한 코드들이지만 리팩터링이 진행되어야 하는 부분이 있다면 피드백 부탁드립니다.
유익한 강의 내용이니 참고 바랍니다.
참조
'Clean Code' 카테고리의 다른 글
[Clean code] OOP에서 재사용이 뭔가? (0) | 2022.08.20 |
---|