들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 28. 함수 인라인 '함수 추출하기'의 반대에 해당하는 리팩토링 '함수 추출하기'는 거대한 함수에서 함수를 뽑아내는 리팩토링. '함수 추출하기'를 통해 함수의 이름으로 의도를 표현하는 방법 함수 인라인은 추출된 함수를 다시 다른 함수로 합쳐서, 함수를 없애는 리팩토링이다. Use case 함수 본문이 함수 이름보다 더 의도를 잘 표현하는 경우도 있음. 이 경우, 본문을 그대로 사용하는게 나음. 함수 리팩토링이 잘못된 경우, 여러 함수를 인라인하여 커다란 함수를 만든 다음, 다시 함수 추출하기를 시도할 수 있다. (리팩토링 전단계) 단순히 다른 메서드 호출을 감싸는 형태 함수가 다른 함수를 감쌀 때는 의미가 바뀌어야 함. 의..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 27. 필드 옮기기 (Move Field) 좋은 데이터 구조를 가지고 있다면, 해당 데이터에 기반한 어떤 행위를 코드로 (메서드나 함수) 옮기는 것도 간편하고 단순해진다. 처음에는 타당해 보였던 의사 결정도 프로그램이 다루고 있는 도메인과 데이터 구조에 대해 더 많이 익혀나가면서 틀린 의사 결정으로 바뀌는 경우도 있다. 즉, 처음에는 옳은 결정이었으나 나중에는 틀린 결정이 될 수 있음. 필드를 옮기는 단서 : 어떤 데이터를 항상 다른 레코드와 함께 전달하는 경우 어떤 레코드를 변경할 때, 다른 레코드에 있는 필드를 변경해야 하는 경우 여러 레코드에 동일한 필드를 수정해야 하는 경우 여기서 언급한 레코드는 클래스 / 객체로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 8. 산탄총 수술 (Shotgun Surgery) 어떤 한 변경 사항이 생겼을 때, 여러 모듈을 (여러 함수 또는 여러 클래스를) 같이 수정해야하는 상황을 '산탄총 수술'이라고 한다. 뒤엉킨 변경 냄새와는 반대의 상황임. 뒤엉킨 변경은 여러 변경을 위해서 하나의 클래스만 계속 수정하는 경우임. 예) 새로운 결제 방식을 도입하려면 여러 클래스의 코드를 수정해야 한다. 변경 사항이 여러 곳에 흩어진다면 찾아서 고치기도 어렵고 중요한 변경 사항을 놓칠 수 있는 가능성도 생긴다. 관련 리팩토링 기술 '함수 옮기기' 또는 '필드 옮기기'를 사용해서 필요한 변경 내역을 하나의 클래스로 모을 수 있다. 비슷한 데이터를 사용하는 여러 함수가..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 26. 클래스 추출하기(Extract Class) 클래스가 다루는 책임이 많아질수록 클래스가 점차 커진다. 클래스를 쪼개는 기준 데이터나 메서드 중 일부가 매우 밀접한 관련이 있는 경우 몇몇 데이터가 대부분 같이 바뀌는 경우 데이터 또는 메서드 중 일부를 삭제한다면 어떻게 될 것인가? 필드나 메서드를 한번 추출해보면, 같이 빠져나가야 하는게 무엇인지 컴파일 에러로 확인할 수 있음. 하위 클래스를 만들어 책임을 분산 시킬 수도 있다. 클래스를 옮긴 후 해야 할 일 추출된 클래스에 있는 필드 / 메서드의 문맥을 확인함. (메서드, 필드 이름은 적절한지?) 이전 클래스의 메서드 중, 추출된 클래스의 변수를 많이 참조하는 것이 있..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 25. 함수 옮기기 (Move Function) 함수 옮기기의 필요성. 모듈화가 잘 된 소프트웨어는 최소한의 지식만으로 프로그램을 변경할 수 있다. 관련있는 함수나 필드가 모여있어야 더 쉽게 찾고 이해할 수 있다. (모듈화가 잘 되어있음) 하지만 관련있는 함수나 필드가 항상 고정적인 것은 아니기 때문에 때에 따라 옮겨야 할 필요가 있다. 함수를 옮겨야 하는 경우 해당 함수가 다른 문맥 (클래스)에 있는 데이터 (필드)를 더 많이 참조하는 경우. 보조하는 함수가 있을 때, 이 함수를 다른 클래스에서도 사용하는 경우 다른 클라이언트 (클래스)에서도 필요로 하는 경우. 함수를 옮겨갈 새로운 문맥 (클래스)이 필요한 경우에는 '여..