들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 32. 조건부 로직을 다형성으로 바꾸기 (Replace Conditional with Polymorphism) 조건부 로직을 다형성으로 바꾸기 복잡한 조건식을 상속과 다형성을 사용해 코드를 보다 명확하게 분리할 수 있다. 기본 동작과 타입에 따른 특수한 기능이 섞여있는 경우, 상속 구조를 만들어서 기본 동작을 상위클래스에 두고 특수한 기능을 하위클래스로 옮겨서 각 타입에 따른 '차이점'을 강조할 수 있다. 조건부 로직의 문제점 Switch 문을 사용해서 타입에 따라 각기 다른 로직을 사용하는 코드가 문제가 될 수 있음. 클래스 전체적으로 반복되는 조건문이 사용될 것이기 때문이고, 더욱 복잡해진다. 모든 조건문을 다형성으로 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 31. 타입 코드를 서브 클래스로 바꾸기 (Replace Type Code with Subclasses) 타입 코드 비슷하지만 다른 것들을 표현해야 하는 경우, 문자열(String), 열거형 (enum), 숫자(int) 등으로 표현하기도 한다. 이것을 타입코드라고 한다. 타입 코드는 각각의 특별한 케이스에 대한 처리가 필요하기 때문에 하나의 클래스가 거대해지는 문제가 있다. 주로 Order 클래스에서 특정 필드가 Normal / Fast인지에 따라 다르게 동작하는 클래스가 된다. 예) 주문 타입, "일반 주문", "빠른 주문" / 직원 타입, "엔지니어", "매니저", "세일즈" 타입을 서브클래스로 바꾸는 계기 조건문을 다..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 30. 기본형을 객체로 바꾸기 (Replace Primitive with Object) 상황 개발 초기에는 기본형 (숫자/문자열)으로 표현한 데이터만으로 기능을 충분히 구현 가능함. 요구 사항이 추가되면서, 기본형만으로는 표현할 수 없어짐. 예) 전화번호에 지역 코드가 필요해진 경우. 예) 온도에 단위 변환이 필요한 경우. 리팩토링 방법 기본형을 사용한 데이터를 감싸줄 클래스를 만들면, 필요한 기능을 추가할 수 있다. 개발 초기에는 데이터를 표현할 때 기본형을 사용하는 것이 나쁘지 않다. 그런데 어플리케이션이 발전하면서 기본형만으로는 원하는 요구사항을 구현/표현하지 못할 수도 있다. 예를 들어 Int를 이용해 섭씨 온도만 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 11. 기본형 집착 (Primitive Obsession) 기본형 집착 어플리케이션이 다루고 있는 도메인에 필요한 클래스를 만들지 않고, 프로그래밍 언어가 제공하는 기본 타입만을 계속 사용하는 경우가 많다. 예) 전화번호, 좌표, 돈, 범위, 수량 등 기본형으로는 단위 (인치 vs 미터) 또는 표기법을 표현하기 어렵기 때문에 한계가 존재한다. 관련 리팩토링 기술 기본형을 객체로 바꾸기 타입 코드를 서브 클래스로 바꾸기 (타입 코드를 기반으로 서브 클래스를 각각 생성한다.) 조건부 로직을 다형성으로 바꾸기 클래스 추출하기 (앞에서 공부) 매개변수 객체 만들기 (앞에서 공부) 어플리케이션을 만들 때, 처음에는 프로그래밍 언어에서 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 10. 데이터 뭉치 (Data Clumps) 항상 뭉쳐 다니는 데이터는 한 곳으로 모아두는 것이 좋다. 여러 클래스에 존재하는 비슷한 필드 목록 (비슷한 필드는 데이터 뭉치일 수도 있음) 여러 함수에 전달하는 매개변수 목록 관련 리팩토링 기술 '클래스 추출하기'를 사용해 여러 필드를 하나의 객체나 클래스로 모을 수 있다. '매개변수 객체 만들기' 또는 '객체 통째로 넘기기'를 사용해 메서드 매개변수를 개선할 수 있다. 데이터 뭉치들이 있다면, 우선은 그 녀석들을 클래스로 묶어볼 수 있다는 것을 의미한다. 그리고 이런 데이터 뭉치가 여러 클래스에 존재한다면, 해당 데이터 뭉치를 클래스에서 제거하는 형태로 리팩토링을 할 수 있다...