들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 20. 세터 제거하기 (Remove Setting Method) Setter를 제공한다는 것은 해당 필드가 변경될 수 있다는 것을 뜻한다. 객체 생성 시, 처음 설정된 값이 변경될 필요가 없다면 해당 값을 설정할 수 있는 생성자를 만들고 세터를 제거해서 변경될 수 있는 가능성을 제거해야 한다. Getter는 조회만 하기 때문에 사이드 이펙트를 거의 만들지 않는다. 하지만 Setter는 객체의 값을 변경하기 때문에 사이드 이펙트를 만들 가능성이 더욱 크다. 따라서 세터를 제거해서 변경될 수 있는 가능성을 제거해야 한다. Before 아래 코드에서는 다음 요구사항이 존재한다고 가정해보자. Id는 처음 설정되면 변경되지 않음. ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 19. 질의 함수와 변경 함수 분리하기 (Separate Query from Modifier) '눈에 띌만한 사이드 이펙트' 없이 값을 조회할 수 있는 메서드는 테스트 하기 쉽고, 메서드를 이동하기도 편하다. 명령-조회 분리 (command-query separation) 규칙 어떤 값을 리턴하는 함수는 사이드 이팩트가 없어야 한다. 수정하는 메서드는 리턴값이 void여야만 한다. '눈에 띌만한 사이드 이펙트' 가령, 캐시는 중요한 객체 상태 변화는 아니다. 따라서 어떤 메서드 호출로 인해, 캐시 데이터를 변경하더라도 분리할 필요는 없다. 객체의 상태가 변하는 것이 눈에 띌만한 사이드 이펙트임. 명령-조회 분리 일반적으로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 18. 변수 쪼개기 (Split Variable) 어떤 변수가 여러 번 재할당 되어도 적절한 경우 반복문에서 순회하는데 사용하는 변수 또는 인덱스 값을 축적시키는데 사용하는 변수 (result += 1...) 이런 경우, 어떤 변수를 여러 번 재활용하는게 당연하다. 그밖에 재할당되는 변수가 있다면, 해당 변수는 여러 용도로 사용되는 것이다. 따라서 변수를 분리해야 더 이해하기 좋은 코드를 만들 수 있다. 변수 하나 당 하나의 책임을 지도록 만든다 상수를 활용하자. 어떤 변수가 여러 번 재할당 되어도 적절한 경우 아래 코드에서 볼 수 있는 두 가지의 변수는 여러 번 재할당 되어도 괜찮은 경우다. header : 값이 축적되는..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 16. 여러 함수를 클래스로 묶기 (Combine Functions into Class) 비슷한 매개변수 목록을 여러 함수에서 사용하고 있다면, 해당 메서드와 매개변수를 모아서 새로운 클래스를 만들 수 있다. 클래스 내부로 메서드를 옮기고, 데이터를 필드로 만들면 메서드에 전달해야 하는 매개변수 목록을 줄일 수 있다. 이를 통해 가독성 좋은 코드를 만들 수 있게 된다. 동일한 파라메터가 계속 같이 전달되는 행운이 있다면, 하나의 클래스로 메서드와 필드를 옮기기가 매우 편리하다. 그렇지만 대부분의 경우에는 코드들을 분석한 후에 전혀 관련 없어 보이는 매개변수들이 서로 관련이 있는 것을 찾아낸 후에 옮기게 되게 된다. 아무튼 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 15. 플래그 인수 제거하기 (Remove Flag Argument) 플래그는 보통 함수에 매개변수로 전달해서, 함수 내부의 로직을 분기하는데 사용한다. 플래그를 사용하는 함수는 차이를 파악하기 어렵다. (플래그는 좋지 않다) bookConcert(customer, false), bookConcert(customer, true) 플래그가 무슨 역할을 하는지 알 수 없다. bookConcert(customer), premiumBookConcert(Customer) 플래그가 없어지니, 더욱 더 읽기 편해졌다. 조건문 분해하기 (Decompose Condition)를 활용해서 플래그를 제거하고, 의미를 더욱 명확히 할 수 있다...