들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 24. 단계 쪼개기 (Split Phase) 서로 다른 일을 하는 코드를 각기 다른 모듈(클래스)로 분리한다. 그래야 어떤 것을 변경할 때, 그것과 관련있는 것만 신경쓸 수 있다. 응집도가 잘 되어있도록 코드 작성을 하는 것인데, 변경이 필요할 때 특정 모듈만 변경하면 되도록 할 수 있음. 여러 일을 하는 함수라면 처리 과정을 각기 다른 단계로 구분할 수 있다. 예) 전처리 → 주요 작업 → 후처리 예) 컴파일러: 텍스트 읽어오기 → 실행 가능한 형태로 변경 서로 다른 데이터를 사용한다면 단계를 나누는데 있어 중요한 단서가 될 수 있다. 중간 데이터를 만들어 단계를 구분하고 매개변수를 줄이는데 활용할 수 있다. 목표 : 단..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 7. 뒤엉킨 변경 (Divergent Change) 소프트웨어는 변경에 유연하게 대처할 수 있어야 한다. 어떤 한 모듈/함수/클래스가 여러가지 이유로 계속 변경되어야 하는 상황을 의미한다. 예) 새로운 결제 방식을 도입하거나, DB를 변경할 때 동일한 클래스에 여러 메서드를 수정해야 하는 경우. 각기 다른 이유로 변경이 일어나는데, 동일한 클래스, 메서드를 수정해야 하는 경우 모듈화가 제대로 되어 있지 않다고 생각할 수 있음. 서로 다른 문제는 서로 다른 모듈에서 해결해야 한다 모듈의 책임이 분리되어 있을수록 해당 문맥을 더 잘 이해할 수 있으며 다른 문제는 신경쓰지 않아도 된다. 관련 리팩토링 기술 '단계 쪼개기' : 서로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 23. 참조를 값으로 바꾸기 (Change Reference to Value) 레퍼런스(Reference) 객체 vs 값(Value) 객체 https://martinfowler.com/bliki/ValueObject.html "Objects that are equal due to the value of their properties, in this case their x and y coordinates, are called value objects." 값 객체는 객체가 가진 필드의 값으로 동일성을 확인한다. 값 객체는 불변 객체다. 따라서 내부적으로 사용되는 변경 포인트를 줄이는 작업이 될 수 있음. 값 객체는 언제 사용할..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 22. 여러 함수를 변환 함수로 묶기(Combine Functions into Transform) 관련있는 여러 파생 변수를 만들어내는 변환 함수가 여러 곳에서 만들어지고 사용된다면, 그러한 파생 변수들을 '변환 함수'를 통해 한 곳으로 모아둘 수 있다. 소스 데이터가 가변이라면, '여러 함수를 클래스로 묶기(트랜스포머)'를 사용하는 것이 적절하다. 소스 데이터가 불변이라면, 아래 두 가지 방법이 가능하다. 여러 함수를 클래스로 묶기 변환 함수를 사용해서 불변 필드로 생성해두고 재사용. 관련있는 여러 파생변수들을 만들어내는 함수가 여러 곳에서 사용된다면, 변환 함수를 통해서 파생 변수를 한 군데로 모으는 방법이다. 최종적인..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 21. 파생 변수를 질의 함수로 바꾸기 (Replace Derived Variable with Query) 변경할 수 있는 데이터를 최대한 줄이도록 노력해야 한다. (사이드 이펙트를 가져오기 때문) 계산해서 알아낼 수 있는 변수는 제거할 수 있다. 계산 자체가 데이터의 의미를 잘 표현하는 경우도 있다. 변수가 제거되면, 해당 변수가 어디선가 잘못된 값으로 수정될 수 있는 가능성을 제거할 수 있다. 계산에 필요한 소스 데이터가 불변이라면, 계산 결과 역시 불변이기 때문에 해당 변수는 그대로 유지해도 괜찮음. 요지는 가변 파생 변수를 필드, 로컬 등에서 모두 제거해야 한다는 것이다. 파생 변수는 소스 데이터로부터 계산되어 만들..