들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 34. 계층 합치기 (Collapse Hierarchy) 계층 합치기 의미 상속 구조를 리팩토링하는 중에 기능을 올리고 내리다 보면 자식 / 부모 클래스 코드에 차이가 없는 경우가 있음. 두 클래스의 코드가 차이가 없다는 것은 하나는 불필요한 요소라는 것임. 따라서 이 때, 계층 합치기를 통해서 클래스를 제거할 수도 있다. 하위 클래스와 상위 클래스 중에 어떤 것을 없애야 하는가? 둘 중에 보다 이름이 적절한 쪽을 선택. 애매하다면 어느 쪽을 선택해도 문제 없음. 자식 / 부모 클래스 간의 기능을 리팩토링 하는 과정에서 자식 / 부모 클래스에 있는 코드가 동일해지는 경우가 있다. '성의없는 요소'가 발생했다고 볼 수 있다...
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 14. 성의없는 요소 (Lazy Element) 여러 프로그래밍적인 요소(변수, 메서드, 클래스 등)을 만드는 이유 나중에 발생할 변화를 대비해서 해당 함수 / 클래스를 재사용하기 위해 의미있는 이름을 지어주기 위해 가끔 만들어 놓은 요소들이 위 기대에 부응하지 못하는 경우가 있음. 이 경우, 해당 요소들을 제거해야 함. 관련 리팩토링 기술 함수 인라인 클래스 인라인 불필요한 상속 구조는 '계층 합치기'를 사용할 수 있다. 우리가 만드는 요소들 중에는 처음에는 필요했었던 요소지만, 리팩토링 과정에서 필요없어지는 요소가 생길 수도 있다. 이런 필요없는 요소들은 제거하거나 다른 곳에 합쳐주면서 코드가 더욱 간결해지고 가독성이 좋아..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 13. 반복문 (Loops) 프로그래밍 언어 초기부터 있었던 반복문은 처음엔 별다른 대안이 없어서 간과했지만, 최근 Java와 같은 언어에서 함수형 프로그래밍을 지원하면서 반복문에 비해 더 나은 대안책이 생겼다. '반복문을 파이프 라인으로 바꾸기' 리팩토링을 적용하면 필터나 맵핑과 같은 파이프라인 기능을 사용해 가독성있는 코드를 제거할 수도 있다. 여기서 '반복문 냄새'는 반복문 자체가 나쁘다는 것을 의미하지는 않는다. 최근 언어에서 함수형 프로그래밍을 지원하면서, 반복문을 좀 더 가독성 있는 형태로 제공할 수 있기 때문에 이 부분으로의 전환을 고려해볼 수 있다는 것이다. 그렇다면 일반적인 반복문을 사용하는 것과 파이프라인을 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 12. 반복되는 Switch문(Repeated Switched) 반복되는 Switch문 냄새 예전에는 Switch 문이 한번만 등장해도 코드 냄새로 생각하고 다형성 적용을 권장했다. 최근에는 여러 프로그래밍 언어에서 보다 세련된 형태의 스위치 문을 지원하고 있다. 따라서 오늘 날은 '반복해서 등작하는 동일한 스위치 문'을 냄새로 여기고 있다. 반복되는 Switch문 단점 반복해서 동일한 스위치 문이 나타난다면, 새로운 조건 추가/ 기존 조건 변경 시, 모든 스위치 문을 찾아서 코드를 고쳐야 할 지도 모른다. 리팩토링 방법 스위치 익스프레션으로 변경 (스위치 문에 비해 가독성 증가) 조건문 / Switch문을 다형성으로 리팩토링..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 33. 반복문을 파이프라인으로 바꾸기 (Replace Loop with Pipeline) Collection 파이프 라인 (자바의 Stream) 고전적인 반복문을 파이프라인 오퍼레이션을 사용해 표현하면 코드를 더 명확하게 만들 수 있다. (가독성 향상 도모) 필터 (filter): 전달받은 조건의 true에 해당하는 데이터만 다음 오퍼레이션으로 전달. 맵 (map): 전달받은 함수를 사용해 입력값을 원하는 출력값으로 변환하여 다음 오퍼레이션으로 전달. https://martinfowler.com/articles/refactoring-pipelines.html (더 많은 예시) '반복문을 파이프라인으로 바꾸기' 리팩토링은 고..