들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 16. 여러 함수를 클래스로 묶기 (Combine Functions into Class) 비슷한 매개변수 목록을 여러 함수에서 사용하고 있다면, 해당 메서드와 매개변수를 모아서 새로운 클래스를 만들 수 있다. 클래스 내부로 메서드를 옮기고, 데이터를 필드로 만들면 메서드에 전달해야 하는 매개변수 목록을 줄일 수 있다. 이를 통해 가독성 좋은 코드를 만들 수 있게 된다. 동일한 파라메터가 계속 같이 전달되는 행운이 있다면, 하나의 클래스로 메서드와 필드를 옮기기가 매우 편리하다. 그렇지만 대부분의 경우에는 코드들을 분석한 후에 전혀 관련 없어 보이는 매개변수들이 서로 관련이 있는 것을 찾아낸 후에 옮기게 되게 된다. 아무튼 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 15. 플래그 인수 제거하기 (Remove Flag Argument) 플래그는 보통 함수에 매개변수로 전달해서, 함수 내부의 로직을 분기하는데 사용한다. 플래그를 사용하는 함수는 차이를 파악하기 어렵다. (플래그는 좋지 않다) bookConcert(customer, false), bookConcert(customer, true) 플래그가 무슨 역할을 하는지 알 수 없다. bookConcert(customer), premiumBookConcert(Customer) 플래그가 없어지니, 더욱 더 읽기 편해졌다. 조건문 분해하기 (Decompose Condition)를 활용해서 플래그를 제거하고, 의미를 더욱 명확히 할 수 있다...
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 14. (Replace Parameter With Query) 함수의 매개변수 목록은 함수의 다양성을 대변하며, 매개변수가 적을수록 이해하기 쉽다. 한 매개변수를 통해 다른 매개변수를 알아낼 수 있다면 '중복 매개변수'라 생각할 수 있다. 매개변수에 값을 전달하는 것은 '함수를 호출하는 쪽'의 책임이다. 너무 많은 매개변수를 전달해야 한다면, 클라이언트에서 너무 많은 책임을 가지고 있음을 의미한다. 클라이언트가 사용하기도 어렵다. 가능하면 함수를 호출하는 쪽의 책임을 줄이고, 함수 내부에서 책임지도록 노력한다. '임시 변수를 질의 함수로 바꾸기'와 '함수 선언 변경하기'를 통해 이 리팩토링을 적용한다. 매개변수를 줄이면서 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 4. 긴 매개변수 목록 (Long Parameter List) 어떤 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다. 과연 그 함수는 한 가지 일을 하고 있는게 맞는가? 불필요한 매개변수는 없는가? 하나의 레코드로 뭉칠 수 있는 매개변수 목록은 없는가? 매개변수를 줄일 수 있는 방법 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, '매개변수를 질의 함수로 바꾸기'를 사용할 수 있다. 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신, '객체 통째로 넘기기'를 사용할 수 있다. 일부 매개변수들이 대부분 같이 넘겨진다면, '매개변수 객체 만들기'를 적용할 수 있다. 매개변수가 플래그로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 13. 조건문을 다형성으로 바꾸기(Replace Conditional with Polymorphism) 여러 타입에 따라 각기 다른 로직으로 처리해야 하는 경우에 다형성을 적용해서 조건문을 보다 명확하게 분리할 수 있다. (예, 책, 음악, 음식 등...) 반복되는 switch문을 각기 다른 클래스를 만들어 제거 할 수 있다. 공통으로 사용되는 로직은 상위 클래스에 두고 달라지는 부분만 하위 클래스에 둠으로써, 달라지는 부분만 강조할 수 있다. 모든 조건문을 다형성으로 바꿔야 하는 것은 아니다. Switch 문이나 If문은 일반적으로 조건이 다를 때, 각기 다른 액션을 취하도록 하는 문법이다. 조건문을 다형성으로 바꾸는 경..