[프로그래밍 명저 읽기] Refactoring - 3-2

김병진·2021년 3월 25일
0
post-thumbnail

9. 기능 편애


기능 편애는 흔히 어떤 함수가 자기가 속한 모듈에 속한 모듈의 함수나 데이터보다 다른 모듈의 함수나 데이터와 상호작용할 일이 더 많을 때 생기는 문제입니다. 이럴 경우 그냥 함수나 모듈을 옮겨주기만 하면 됩니다.

10. 데이터 뭉치


필드 형태의 데이터 뭉치를 찾아 클래스로 추출하고 하나의 객체로 묶습니다. 메서드의 경우, 매개변수 객체 만들기 혹은 객체 통째로 넘기기를 적용해서 매개변수를 줄여야 합니다.

데이터 뭉치인지 판별하려면 값 하나를 삭제해보자. 그랬을 때 나머지 데이터만으로 의미가 없다면 객체로 환생해야 합니다. 데이터 뭉치는 클래스로 환생했을 때 생산성에 기여합니다.

11. 기본형 집착


기본형을 객체로 바꿔야만 구석기 동굴에서 온돌식으로 탈바꿈시킬 수 있습니다. 기본형으로 표현된 코드가 조건부 동작을 제어하는 타입 코드로 쓰였다면 타입 코드를 서브클래스로 바꾸기와 조건부 로직을 다형성으로 바꾸기를 차례로 적용합니다.

12. 반복되는 switch문


switch문은 모조리 조건부 로직을 다형성으로 바꾸기로 없애야 할 대상입니다. 중복된 switch문이 문제가 되는 이유는 조건절을 하나 추가할 때마다 다른 switch문들도 모두 찾아서 함께 수정해야 하기 때문입니다.

13. 반복문


요즘 일급함수를 지원하는 언어에서는 반복문을 파이프라인으로 바꾸어 시대에 걸맞지 않는 반복문을 제거할 수 있게 됐습니다.

14. 성의 없는 요소


개발에는 풍성했던 클래스가 리팩터링을 거치면서 앙상해질 수 있습니다. 이럴 경우 과감하게 고이 보내려야 한다고 합니다.

15. 추측성 일반화


미래에 쓰겠지 하고 생성한 함수나 매개변수를 리팩터링하면서 삭제해야합니다. 할 일이 없는 추상 클래스는 계층 합치기로 제거합니다. 쓸데없이 위임하는 코드는 함수 인라인하기나 클래스 인라인하기로 삭제합니다.

profile
아이디어를 구현할 수 있는 개발자가 목표입니다.

0개의 댓글