들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 17. 변수 캡슐화하기 (Encapsulate Variable) 메서드는 점진적으로 새로운 메서드로 변경할 수 있다. 반면 데이터는 한번에 모두 변경해야한다. 데이터를 변경하는 작업은 메서드를 변경하는 작업보다 어렵다. 따라서 메서드를 통해서 데이터에 접근하도록 하면, 수정 작업이 필요할 때 메서드 수정을 통해서 점진적으로 처리할 수 있다. 데이터 구조를 변경하는 작업을 그보다는 조금 더 수월한 메서드 구조 변경 작업으로 대체할 수 있다. 데이터가 사용되는 범위가 클수록 캡슐화를 하는 것이 더 중요해진다. 메서드를 사용해서 값을 변경하면 부가기능(검증 로직, 후속 작업)을 캡슐화 할 수 있음. 변수 이름에 직접 접근하는 경..
들어가기 전 이 글은 인프런 백기선님의 리팩토링 강의를 복습하며 작성한 글입니다. 냄새 5. 전역 데이터 (Global Data) 전역 데이터를 사용하는 냄새는 제거가 필요하다. 전역 데이터 전역에서 사용될 수 있는 변수. 예를 들면 public static 변수 전역 데이터는 아무 곳에서나 변경될 수 있다는 문제가 있음. 변수에 직접 접근 가능하기 때문에 어떤 코드로 인해 값이 바뀐 것인지 파악하기 어려움. 변수에 직접 접근 가능한 클래스 변수(필드)도 비슷한 문제를 겪을 수 있음. 해결 방법 "변수 캡슐화 하기"를 적용해서 접근을 제어하거나 어디서 사용하는지 파악하기 쉽게 만들 수 있다. 파라켈수스의 격언, "약과 독의 차이를 결정하는 것은 사용량 뿐이다." 전역 데이터를 사용하는 것은 가급적이면 자..
들어가기 전 이 글은 인프런 백기선님의 리팩토링 강의를 복습하며 작성한 글입니다. 리팩토링 6. 메서드 올리기(Pull Up Method) Pull Up Method 주로 상속 구조에서 발견할 수 있는 하위 클래스의 중복 메서드를 상위 클래스로 올려주는 리팩토링 기술이다. 중복 코드는 당장은 잘 동작하더라도 미래에 버그를 만들어 낼 빌미를 제공한다. 예) A 클래스에서 코드를 고치고, B 클래스에는 반영하지 않은 경우 수정 할 때 여러 하위 클래스에 동일한 코드가 있다면 손쉽게 적용 가능함. 비슷하지만 일부 값만 다른 경우라면, "함수 매개변수화하기" 리팩토링을 적용한 이후에 이 방법을 사용 가능. 하위 클래스에 있는 코드가 상위 클래스가 아닌 하위 클래스 기능에 의존하고 있다면 '필드 올리기'를 적용한..
리팩토링 5. 코드 정리하기 (Slide Statements) 관련있는 코드끼리 묶여있어야 코드를 더 쉽게 이해할 수 있다. 함수에서 사용할 변수를 상단에 미리 정의하기 보다는 해당 변수를 사용하는 코드 바로 위에 선언하자. 관련있는 코드끼리 묶은 다음 함수 추출하기 (Extract Function)를 사용해서 더 깔끔하게 분리할 수도 있다. Slide Statements란? 관련있는 코드들을 가까이 두기 위해서 코드를 아래 위로 움직이는 것을 의미한다. 관련있는 코드들은 서로 가까이 두어야 이해하기 더 쉽기 때문이다. Slide Statement는 다른 리팩토링 기법을 적용하기 전에 관련있는 코드들을 서로 가까이두어 리팩토링 하기 쉽도록 만들어 주는 전 처리 작업이다. 예를 들어 관련있는 코드끼리 뭉쳐..
들어가기 전 이 글은 인프런 백기선님의 리팩토링 강의를 복습하며 작성한 글입니다. 리팩토링 4. 함수 추출하기 (Extract Function) 함수 추출의 기준은 '의도'와 '구현'을 분리할 때 사용함. 무슨 일을 하는 코드인지 알아내려고 노력해야 하는 코드라면 해당 코드를 함수로 분리하고 함수 이름으로 '무슨 일을 하는지' 표현할 수 있다. 무슨 일을 하는 코드인지 알아내려고 노력해야 하는 코드라면 이 코드는 구현에 집중한 코드다. 구현에 집중한 코드는 '의도'를 표현하는 메서드 이름을 사용한 메서드로 추출한다. 한줄 짜리 메서드도 괜찮은가? 괜찮음. 거대한 함수 안에 들어있는 주석은 추출할만한 함수를 찾는데 있어서 좋은 단서가 될 수 있다. 함수 추출하기 자체는 '중복 코드' 냄새를 제거하기 위한 ..