들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 22. 여러 함수를 변환 함수로 묶기(Combine Functions into Transform) 관련있는 여러 파생 변수를 만들어내는 변환 함수가 여러 곳에서 만들어지고 사용된다면, 그러한 파생 변수들을 '변환 함수'를 통해 한 곳으로 모아둘 수 있다. 소스 데이터가 가변이라면, '여러 함수를 클래스로 묶기(트랜스포머)'를 사용하는 것이 적절하다. 소스 데이터가 불변이라면, 아래 두 가지 방법이 가능하다. 여러 함수를 클래스로 묶기 변환 함수를 사용해서 불변 필드로 생성해두고 재사용. 관련있는 여러 파생변수들을 만들어내는 함수가 여러 곳에서 사용된다면, 변환 함수를 통해서 파생 변수를 한 군데로 모으는 방법이다. 최종적인..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 21. 파생 변수를 질의 함수로 바꾸기 (Replace Derived Variable with Query) 변경할 수 있는 데이터를 최대한 줄이도록 노력해야 한다. (사이드 이펙트를 가져오기 때문) 계산해서 알아낼 수 있는 변수는 제거할 수 있다. 계산 자체가 데이터의 의미를 잘 표현하는 경우도 있다. 변수가 제거되면, 해당 변수가 어디선가 잘못된 값으로 수정될 수 있는 가능성을 제거할 수 있다. 계산에 필요한 소스 데이터가 불변이라면, 계산 결과 역시 불변이기 때문에 해당 변수는 그대로 유지해도 괜찮음. 요지는 가변 파생 변수를 필드, 로컬 등에서 모두 제거해야 한다는 것이다. 파생 변수는 소스 데이터로부터 계산되어 만들..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 20. 세터 제거하기 (Remove Setting Method) Setter를 제공한다는 것은 해당 필드가 변경될 수 있다는 것을 뜻한다. 객체 생성 시, 처음 설정된 값이 변경될 필요가 없다면 해당 값을 설정할 수 있는 생성자를 만들고 세터를 제거해서 변경될 수 있는 가능성을 제거해야 한다. Getter는 조회만 하기 때문에 사이드 이펙트를 거의 만들지 않는다. 하지만 Setter는 객체의 값을 변경하기 때문에 사이드 이펙트를 만들 가능성이 더욱 크다. 따라서 세터를 제거해서 변경될 수 있는 가능성을 제거해야 한다. Before 아래 코드에서는 다음 요구사항이 존재한다고 가정해보자. Id는 처음 설정되면 변경되지 않음. ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 19. 질의 함수와 변경 함수 분리하기 (Separate Query from Modifier) '눈에 띌만한 사이드 이펙트' 없이 값을 조회할 수 있는 메서드는 테스트 하기 쉽고, 메서드를 이동하기도 편하다. 명령-조회 분리 (command-query separation) 규칙 어떤 값을 리턴하는 함수는 사이드 이팩트가 없어야 한다. 수정하는 메서드는 리턴값이 void여야만 한다. '눈에 띌만한 사이드 이펙트' 가령, 캐시는 중요한 객체 상태 변화는 아니다. 따라서 어떤 메서드 호출로 인해, 캐시 데이터를 변경하더라도 분리할 필요는 없다. 객체의 상태가 변하는 것이 눈에 띌만한 사이드 이펙트임. 명령-조회 분리 일반적으로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 18. 변수 쪼개기 (Split Variable) 어떤 변수가 여러 번 재할당 되어도 적절한 경우 반복문에서 순회하는데 사용하는 변수 또는 인덱스 값을 축적시키는데 사용하는 변수 (result += 1...) 이런 경우, 어떤 변수를 여러 번 재활용하는게 당연하다. 그밖에 재할당되는 변수가 있다면, 해당 변수는 여러 용도로 사용되는 것이다. 따라서 변수를 분리해야 더 이해하기 좋은 코드를 만들 수 있다. 변수 하나 당 하나의 책임을 지도록 만든다 상수를 활용하자. 어떤 변수가 여러 번 재할당 되어도 적절한 경우 아래 코드에서 볼 수 있는 두 가지의 변수는 여러 번 재할당 되어도 괜찮은 경우다. header : 값이 축적되는..