들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 30. 기본형을 객체로 바꾸기 (Replace Primitive with Object) 상황 개발 초기에는 기본형 (숫자/문자열)으로 표현한 데이터만으로 기능을 충분히 구현 가능함. 요구 사항이 추가되면서, 기본형만으로는 표현할 수 없어짐. 예) 전화번호에 지역 코드가 필요해진 경우. 예) 온도에 단위 변환이 필요한 경우. 리팩토링 방법 기본형을 사용한 데이터를 감싸줄 클래스를 만들면, 필요한 기능을 추가할 수 있다. 개발 초기에는 데이터를 표현할 때 기본형을 사용하는 것이 나쁘지 않다. 그런데 어플리케이션이 발전하면서 기본형만으로는 원하는 요구사항을 구현/표현하지 못할 수도 있다. 예를 들어 Int를 이용해 섭씨 온도만 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 11. 기본형 집착 (Primitive Obsession) 기본형 집착 어플리케이션이 다루고 있는 도메인에 필요한 클래스를 만들지 않고, 프로그래밍 언어가 제공하는 기본 타입만을 계속 사용하는 경우가 많다. 예) 전화번호, 좌표, 돈, 범위, 수량 등 기본형으로는 단위 (인치 vs 미터) 또는 표기법을 표현하기 어렵기 때문에 한계가 존재한다. 관련 리팩토링 기술 기본형을 객체로 바꾸기 타입 코드를 서브 클래스로 바꾸기 (타입 코드를 기반으로 서브 클래스를 각각 생성한다.) 조건부 로직을 다형성으로 바꾸기 클래스 추출하기 (앞에서 공부) 매개변수 객체 만들기 (앞에서 공부) 어플리케이션을 만들 때, 처음에는 프로그래밍 언어에서 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 10. 데이터 뭉치 (Data Clumps) 항상 뭉쳐 다니는 데이터는 한 곳으로 모아두는 것이 좋다. 여러 클래스에 존재하는 비슷한 필드 목록 (비슷한 필드는 데이터 뭉치일 수도 있음) 여러 함수에 전달하는 매개변수 목록 관련 리팩토링 기술 '클래스 추출하기'를 사용해 여러 필드를 하나의 객체나 클래스로 모을 수 있다. '매개변수 객체 만들기' 또는 '객체 통째로 넘기기'를 사용해 메서드 매개변수를 개선할 수 있다. 데이터 뭉치들이 있다면, 우선은 그 녀석들을 클래스로 묶어볼 수 있다는 것을 의미한다. 그리고 이런 데이터 뭉치가 여러 클래스에 존재한다면, 해당 데이터 뭉치를 클래스에서 제거하는 형태로 리팩토링을 할 수 있다...
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 9. 기능 편애(Feature Envy) 어떤 모듈에 있는 함수가 다른 모듈에 있는 데이터나 함수를 더 많이 참조하는 경우에 발생한다. 이것은 특정 함수가 기능을 너무 욕심내서, 특정 함수에 많은 기능이 있는 것이다. 예) 다른 객체의 getter를 여러 개 사용하는 메서드 관련 리팩토링 기술 '함수 옮기기'를 사용해서 함수를 적절한 위치로 옮긴다. (참조하는 데이터/메서드가 많은 클래스 쪽) 함수 일부분만 다른 곳의 데이터와 함수를 많이 참조한다면 '함수 추출하기'로 함수를 나눈 다음에 함수를 옮길 수 있다. 만약에 여러 모듈(클래스)를 참조하고 있다면 가장 많은 데이터를 참조하는 곳으로 옮김. 함수를 여러 개로 쪼개서, 각..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 29. 클래스 인라인 (inline Class) '클래스 추출하기'의 반대에 해당하는 리팩토링 클래스 추출하기 : 너무 복잡한 클래스에서 하나의 새로운 클래스를 추출함. 클래스 인라인 : 기존의 클래스를 삭제하고, 다른 클래스에 합침. Use Case 리팩토링을 하는 중에 클래스의 책임을 옮기다보면 클래스의 존재 이유가 빈약해지는 경우가 발생할 수 있음. 두 개의 클래스를 여러 클래스로 나누는 리팩토링을 할 때, '클래스 인라인'을 적용해서 코드를 한 곳으로 모으고 '클래스 추출하기'를 적용해서 새롭게 분리하는 리팩토링을 할 수 있다. 클래스 인라인은 크게 두 가지 용도로 사용할 수 있다. 클래스의 존재가 빈약해진 클래스를..