들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 26. 클래스 추출하기(Extract Class) 클래스가 다루는 책임이 많아질수록 클래스가 점차 커진다. 클래스를 쪼개는 기준 데이터나 메서드 중 일부가 매우 밀접한 관련이 있는 경우 몇몇 데이터가 대부분 같이 바뀌는 경우 데이터 또는 메서드 중 일부를 삭제한다면 어떻게 될 것인가? 필드나 메서드를 한번 추출해보면, 같이 빠져나가야 하는게 무엇인지 컴파일 에러로 확인할 수 있음. 하위 클래스를 만들어 책임을 분산 시킬 수도 있다. 클래스를 옮긴 후 해야 할 일 추출된 클래스에 있는 필드 / 메서드의 문맥을 확인함. (메서드, 필드 이름은 적절한지?) 이전 클래스의 메서드 중, 추출된 클래스의 변수를 많이 참조하는 것이 있..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 25. 함수 옮기기 (Move Function) 함수 옮기기의 필요성. 모듈화가 잘 된 소프트웨어는 최소한의 지식만으로 프로그램을 변경할 수 있다. 관련있는 함수나 필드가 모여있어야 더 쉽게 찾고 이해할 수 있다. (모듈화가 잘 되어있음) 하지만 관련있는 함수나 필드가 항상 고정적인 것은 아니기 때문에 때에 따라 옮겨야 할 필요가 있다. 함수를 옮겨야 하는 경우 해당 함수가 다른 문맥 (클래스)에 있는 데이터 (필드)를 더 많이 참조하는 경우. 보조하는 함수가 있을 때, 이 함수를 다른 클래스에서도 사용하는 경우 다른 클라이언트 (클래스)에서도 필요로 하는 경우. 함수를 옮겨갈 새로운 문맥 (클래스)이 필요한 경우에는 '여..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 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." 값 객체는 객체가 가진 필드의 값으로 동일성을 확인한다. 값 객체는 불변 객체다. 따라서 내부적으로 사용되는 변경 포인트를 줄이는 작업이 될 수 있음. 값 객체는 언제 사용할..