5.1 유사한 클래스 통합하기
- 반복작업을 자꾸 시켜서 손목이 아프다
- 비슷한 성격을 가진 두 객체의 동작이 거의 다르지 않다면, 하나로 만들되
if/else
를 사용하지 말고 만들자 - 책에서는 처음엔 enum으로 바꿨다가 interface로 바꿨는데 이러한 패턴을 “클래스로 타입 코드 대체” 라고 한다.
- 사실 뭐 이름이 중요한가 싶다. 일일이 외우기 보단 손가락으로 익히는 게 맞는거 같다.
https://github.com/FiveLinesofCodeStudy/2D-Puzzle-Compose/commit/e9b2b43b5f101de142aaf656edcc2e6365af320e
5.2 단순한 조건 통합하기
- if 문 갯수 줄이는 것은 정말 좋은 방법인 것 같다.
절차
- 본문이 실제로 동일한지 확인한다.
- 첫 번째 if 문의 닫는 괄호와 else if 문의 여는 괄호 사이의 코드를 선택하고 삭제한 후
||
을 삽입한다. if 뒤에 여는 괄호를 삽입하고{
앞에 닫는 괄호를 삽입한다. 동작을 변경하지 않도록 항상 표현식을 괄호로 묶는다.
5.3 복잡한 조건 통합하기
- 코드 동작에 대한 명확한 이해가 받쳐줘야 가능하다.
- SRP (단일 책임 원칙)에 따른 메서드를 만드는 걸 목적으로 리팩토링 해보자
https://github.com/FiveLinesofCodeStudy/2D-Puzzle-Compose/commit/d3b75296b6a5a47b4d6e0d9df24a23c8d1a6ebe3
5.4 클래스 간의 코드 통합
- 컴포지션을 사용하는 대표적인 디자인 패턴이다.
- https://stackify.com/oop-concepts-composition/
https://github.com/FiveLinesofCodeStudy/2D-Puzzle-Compose/commit/e21106afe6097d2147ba3bbdb1eee3ac6d55149b
5.5 유사 함수 통합하기
https://github.com/FiveLinesofCodeStudy/2D-Puzzle-Compose/commit/2718970221007d9a7985b81a9347aefa1aceef96
5.6 유사한 코드 통합하기
https://github.com/FiveLinesofCodeStudy/2D-Puzzle-Compose/commit/79ec4d0a596471b21db40184f46edfbc553c983d
- 전략 패턴 동일하게 사용