들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 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 (더 많은 예시) '반복문을 파이프라인으로 바꾸기' 리팩토링은 고..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 32. 조건부 로직을 다형성으로 바꾸기 (Replace Conditional with Polymorphism) 조건부 로직을 다형성으로 바꾸기 복잡한 조건식을 상속과 다형성을 사용해 코드를 보다 명확하게 분리할 수 있다. 기본 동작과 타입에 따른 특수한 기능이 섞여있는 경우, 상속 구조를 만들어서 기본 동작을 상위클래스에 두고 특수한 기능을 하위클래스로 옮겨서 각 타입에 따른 '차이점'을 강조할 수 있다. 조건부 로직의 문제점 Switch 문을 사용해서 타입에 따라 각기 다른 로직을 사용하는 코드가 문제가 될 수 있음. 클래스 전체적으로 반복되는 조건문이 사용될 것이기 때문이고, 더욱 복잡해진다. 모든 조건문을 다형성으로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 31. 타입 코드를 서브 클래스로 바꾸기 (Replace Type Code with Subclasses) 타입 코드 비슷하지만 다른 것들을 표현해야 하는 경우, 문자열(String), 열거형 (enum), 숫자(int) 등으로 표현하기도 한다. 이것을 타입코드라고 한다. 타입 코드는 각각의 특별한 케이스에 대한 처리가 필요하기 때문에 하나의 클래스가 거대해지는 문제가 있다. 주로 Order 클래스에서 특정 필드가 Normal / Fast인지에 따라 다르게 동작하는 클래스가 된다. 예) 주문 타입, "일반 주문", "빠른 주문" / 직원 타입, "엔지니어", "매니저", "세일즈" 타입을 서브클래스로 바꾸는 계기 조건문을 다..