들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 10. 함수를 명령으로 바꾸기 (Replace Function with Command) 함수를 독립적인 객체인, Command로 만들어 사용할 수 있다. 커맨드 패턴을 적용하면 다음과 같은 장점을 취할 수도 있다. 부가적인 기능으로 undo 기능을 만들 수도 있다. 더 복잡한 기능을 구현하는데 필요한 여러 메소드들을 추가할 수 있다. 상속이나 템플릿을 활용할 수도 있다. 복잡한 메서드를 여러 메서드나 필드를 활용해 쪼갤 수도 있다. 대부분의 경우에 '커맨드' 보다는 '함수'를 사용하지만, 커맨드 말고 다른 방법이 없는 경우에만 사용한다. 함수 하나를 독립적인 커맨드 클래스로 분리해내면 다음 장점을 가진다. 긴 메서드를 간추..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 9. 객체 통째로 넘기기 (Preserve Whole Object) 어떤 한 레코드에서 구할 수 있는 여러 값들을 메서드에 전달하는 경우, 해당 매개변수를 레코드 하나로 교체할 수 있다. 객체를 통째로 넘기면서, 매개변수 목록을 줄일 수 있다. 향후에 추가할지도 모를 매개변수까지도 줄일 수 있음. 레코드에 포함하는 방식 이 기술을 적용하기 전에 함수가 해당 인스턴스에 의존해도 되는지를 고려해야 함. 확장 가능성을 고려해야한다. 만약 해당 메서드가 특정 인스턴스에 의존한다고 하면, 다른 도메인에서는 해당 메서드를 사용할 수 없을 수 있다. 예를 들어 Order 도메인 객체에 메서드가 의존하게 된다면, 이 메서드는 Person..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 8. 매개변수 객체 만들기 (Introduce Parameter Object) 같은 매개변수들이 여러 메소드에 걸쳐 나타난다면 그 매개변수들을 묶은 자료 구조로 만들 수 있다. 그렇게 만든 자료구조는 해당 데이터 간의 관계를 보다 명시적으로 나타낼 수 있다. 함수에 전달할 매개변수 개수를 줄일 수 있다. 도메인을 이해하는데 중요한 역할을 하는 클래스로 발전할 수도 있다. (프로그램이 하는 일을 좀 더 쉽게 이해할 수 있도록 도와준다) 비슷한 매개변수들이 여러 메서드에 같이 전달되는 경우가 많을 수 있다. 이런 경우라면, 이 매개변수들은 서로 관계를 가지고 있는 매개변수로 이해할 수 있다. 이런 매개변수들이라면 하나의 인스턴..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 7. 임시 변수를 질의 함수로 바꾸기 (Replace Temp With Query) 임시변수 사용은 다음 장점을 가짐. 반복해서 동일한 식을 계산하는 것을 피할 수 있음. 이름을 사용해 의미를 표현할 수도 있음. 긴 함수를 리팩토링 할 때, 임시 변수를 함수 추출하기로 분리한다면 '함수 추출하기'로 리팩토링한 함수에 전달되어야 할 매개변수를 줄일 수 있음. 임시변수의 장점 메서드 내부에서 사용되는 값들이 있는데, 이런 값들은 임시변수를 이용해서 명시해주는 것이 좋다. 좋은 이유는 두 가지다. 반복되는 계산을 하지 않아도 된다. 변수가 이름을 가지기 때문에 의미를 잘 표현할 수 있다. 따라서 반복되는 수식이라면 임시변수를 생..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 3. 긴 함수(Long Function) 짧은 함수 vs 긴 함수 함수가 길수록 더 이해하기 어렵다. vs 짧은 함수는 더 많은 문맥 전환을 필요로 한다. 굳이 구현을 파악해야 하는 것이 아니라면 짧은 함수의 모든 것을 따라 갈 필요 없이 이름만으로 의미를 파악하는 것이 좋다. 따라서 '제목을 더 잘 작성한 짧은 함수'를 많이 쓰는 것이 좋다. "과거에는" 작은 함수를 사용하는 경우에 더 많은 서브루틴 호출로 인한 오버헤드가 있었다. 메모리에 값이 쌓이면서 오버헤드가 있으나, 최근 언어에서는 이런 오버헤드가 발생하지는 않는다. 작은 함수에 "좋은 이름"을 사용했다면 해당 함수의 코드를 보지 않고도 이해할 수 있다. 어떤 코드에..