들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 7. 임시 변수를 질의 함수로 바꾸기 (Replace Temp With Query) 임시변수 사용은 다음 장점을 가짐. 반복해서 동일한 식을 계산하는 것을 피할 수 있음. 이름을 사용해 의미를 표현할 수도 있음. 긴 함수를 리팩토링 할 때, 임시 변수를 함수 추출하기로 분리한다면 '함수 추출하기'로 리팩토링한 함수에 전달되어야 할 매개변수를 줄일 수 있음. 임시변수의 장점 메서드 내부에서 사용되는 값들이 있는데, 이런 값들은 임시변수를 이용해서 명시해주는 것이 좋다. 좋은 이유는 두 가지다. 반복되는 계산을 하지 않아도 된다. 변수가 이름을 가지기 때문에 의미를 잘 표현할 수 있다. 따라서 반복되는 수식이라면 임시변수를 생..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 3. 긴 함수(Long Function) 짧은 함수 vs 긴 함수 함수가 길수록 더 이해하기 어렵다. vs 짧은 함수는 더 많은 문맥 전환을 필요로 한다. 굳이 구현을 파악해야 하는 것이 아니라면 짧은 함수의 모든 것을 따라 갈 필요 없이 이름만으로 의미를 파악하는 것이 좋다. 따라서 '제목을 더 잘 작성한 짧은 함수'를 많이 쓰는 것이 좋다. "과거에는" 작은 함수를 사용하는 경우에 더 많은 서브루틴 호출로 인한 오버헤드가 있었다. 메모리에 값이 쌓이면서 오버헤드가 있으나, 최근 언어에서는 이런 오버헤드가 발생하지는 않는다. 작은 함수에 "좋은 이름"을 사용했다면 해당 함수의 코드를 보지 않고도 이해할 수 있다. 어떤 코드에..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 17. 변수 캡슐화하기 (Encapsulate Variable) 메서드는 점진적으로 새로운 메서드로 변경할 수 있다. 반면 데이터는 한번에 모두 변경해야한다. 데이터를 변경하는 작업은 메서드를 변경하는 작업보다 어렵다. 따라서 메서드를 통해서 데이터에 접근하도록 하면, 수정 작업이 필요할 때 메서드 수정을 통해서 점진적으로 처리할 수 있다. 데이터 구조를 변경하는 작업을 그보다는 조금 더 수월한 메서드 구조 변경 작업으로 대체할 수 있다. 데이터가 사용되는 범위가 클수록 캡슐화를 하는 것이 더 중요해진다. 메서드를 사용해서 값을 변경하면 부가기능(검증 로직, 후속 작업)을 캡슐화 할 수 있음. 변수 이름에 직접 접근하는 경..
들어가기 전 이 글은 인프런 백기선님의 리팩토링 강의를 복습하며 작성한 글입니다. 냄새 5. 전역 데이터 (Global Data) 전역 데이터를 사용하는 냄새는 제거가 필요하다. 전역 데이터 전역에서 사용될 수 있는 변수. 예를 들면 public static 변수 전역 데이터는 아무 곳에서나 변경될 수 있다는 문제가 있음. 변수에 직접 접근 가능하기 때문에 어떤 코드로 인해 값이 바뀐 것인지 파악하기 어려움. 변수에 직접 접근 가능한 클래스 변수(필드)도 비슷한 문제를 겪을 수 있음. 해결 방법 "변수 캡슐화 하기"를 적용해서 접근을 제어하거나 어디서 사용하는지 파악하기 쉽게 만들 수 있다. 파라켈수스의 격언, "약과 독의 차이를 결정하는 것은 사용량 뿐이다." 전역 데이터를 사용하는 것은 가급적이면 자..
들어가기 전 이 글은 인프런 백기선님의 리팩토링 강의를 복습하며 작성한 글입니다. 리팩토링 6. 메서드 올리기(Pull Up Method) Pull Up Method 주로 상속 구조에서 발견할 수 있는 하위 클래스의 중복 메서드를 상위 클래스로 올려주는 리팩토링 기술이다. 중복 코드는 당장은 잘 동작하더라도 미래에 버그를 만들어 낼 빌미를 제공한다. 예) A 클래스에서 코드를 고치고, B 클래스에는 반영하지 않은 경우 수정 할 때 여러 하위 클래스에 동일한 코드가 있다면 손쉽게 적용 가능함. 비슷하지만 일부 값만 다른 경우라면, "함수 매개변수화하기" 리팩토링을 적용한 이후에 이 방법을 사용 가능. 하위 클래스에 있는 코드가 상위 클래스가 아닌 하위 클래스 기능에 의존하고 있다면 '필드 올리기'를 적용한..