300x250
✍️ 악취 14 : 성의없는 요소 개발과정에서 정의된 변수, 메서드, 클래스가 시간이 지남에 따라 필요 없는 경우가 있다. 가령 확장성을 고려해서 미리 추가된 변수와 기능들이 그러한 경우에 속한다. 혹은 리팩토링의 결과로 더 이상 필요 없는 요소들이 나올 수 있다. 리팩토링 책의 저자는 이와 같은 요소를 '성의 없는 요소'라고 정의했다. 재사용을 고려해서 함수 추출하기 리팩토링이 적용된 어느 메서드가 계속해서 재사용이 되지 않고 한 곳에서만 사용한다면 '함수 인라인'을 적용할 수 있다. 이와 유사하게 클래스의 경우라면 '클래스 인라인'을 적용하면 된다. 여기 성의 없는 요소 악취를 해결하기 위한 세 가지 리팩토링 기법이 있다. 1. "함수 인라인" 2. "클래스 인라인" 3. "계층 합치기" 불필요한 상..
✍️ 악취 13 : 반복문 프로그래밍 언어 초기엔 for와 while을 사용해서 반복문을 구현했지만, 비교적 최근 Java와 같은 언어에서 함수형 프로그래밍을 지원하게 되며 반복문의 대안인 파이프라인이 등장했다. Java의 Stream이 대표적인 예시인데, Collection의 Stream을 열고 중개 오퍼레이션을 호출하며 연산을 수행하는 일련의 흐름을 Stream pipeline이라 부른다. 파이프라인을 사용하면 코드가 간결해지고 의도가 명확하게 드러나 가독성이 증가한다는 장점이 있기에 충분히 활용할만하다. 하지만 파이프라인이 고전적인 반복문보다 항상 좋다고 말하긴 어렵다. 반복문이 보다 효율적이고 가독성이 좋은 경우는 무수히 많기에 적절한 판단을 거쳐서 사용해야 한다. 여기 반복문 악취를 해결하기 위..
✍️ 악취 11 : 기본형 집착 (2) 표현하려는 데이터가 심플하다면 언어가 제공하는 기본 타입으로도 충분히 구현할 수 있지만, 표현할 데이터 구조가 복잡해지고 제공할 기능이 복잡해진다면 단순 기본형으로 원활한 기능을 구현하기 어렵다. 가령 단순 화씨온도를 표현하고 싶다면 실수형으로 가능하겠지만 화씨, 섭씨 등 다양한 온도를 표현하고 싶다면 별도의 클래스로 제공하는 것이 더 합리적일 것이다. 여기 기본형 집착 악취를 해결하기 위한 두 가지 리팩토링 기법이 있다. 1. "기본형을 객체로 바꾸기" 2. "조건부 로직을 다형성으로 바꾸기" 🍊 조건부 로직을 다형성으로 바꾸기 비슷하지만 서로 다른 것을 표현하는 경우 문자열, 열거형, 숫자 등을 사용하기도 한다. 가령 고객의 등급을 표현할 때 열거형을 사용하는 ..
✍️ 악취 11 : 기본형 집착 표현하려는 데이터가 심플하다면 언어가 제공하는 기본 타입으로도 충분히 구현할 수 있지만, 표현할 데이터 구조가 복잡해지고 제공할 기능이 복잡해진다면 단순 기본형으로 원활한 기능을 구현하기 어렵다. 가령 단순 화씨온도를 표현하고 싶다면 실수형으로 가능하겠지만 화씨, 섭씨 등 다양한 온도를 표현하고 싶다면 별도의 클래스로 제공하는 것이 더 합리적일 것이다. 여기 기본형 집착 악취를 해결하기 위한 두 가지 리팩토링 기법이 있다. 1. "기본형을 객체로 바꾸기" 2. "조건부 로직을 다형성으로 바꾸기" 🍊 기본형을 객체로 바꾸기 개발 초기엔 기본 타입으로 표현한 데이터를 기능이 추가됨에 따라, 구조가 확장됨에 따라 더 다양한 형태로 표현해야 하는 경우가 발생한다. 앞서 언급했던 ..
✍️ 악취 10 : 데이터 뭉치 여러 클래스에 동일한 혹은 유사한 필드가 반복적으로 등장하거나, 메서드에 전달하는 매개변수 목록이 유사한 경우 이렇게 뭉쳐 다니는 데이터는 한곳으로 모아두는 것이 좋다. 여기 데이터 뭉치를 해결하기 위한 두 가지 리팩토링 기법이 있다. 1. "클래스 추출하기" 동일한, 유사한 필드를 하나의 클래스로 2. "매개변수 객체 만들기" 동일한, 유사한 매개변수를 하나의 클래스로 🍊 클래스 추출하기 아래 두 클래스 모두 학년과 반 번호라는 공통된 필드를 사용 중이라면, 두 필드를 하나의 클래스로 추출할 수 있다. @AllArgsConstructor @Getter public class Student { private String name; private int grade; priv..
✍️ 악취 9 : 기능 편애 어떤 메서드가 자신이 속한 클래스보다 다른 클래스를 더 많이 참조한다면 이를 '기능 편애'라고 한다. 기능 편애 현상이 나타나는 가장 큰 이유는 올바르지 못한 데이터 구조에서 기인한다. 한 클래스가 너무 많은 기능을 담당하거나, 필드와 메서드가 서로 다른 클래스에 분리된 경우가 그 대표적인 예시이다. 여기 기능 편애를 해결하기 위한 리팩토링 기법이 있다. 1. "함수 옮기기" 올바른 책임을 위해 🍊 함수 옮기기 전기 사용량과 가스 사용량을 표현하는 두 클래스가 있고 @AllArgsConstructor @Getter public class ElectricityUsage { private double amount; private double pricePerUnit; } @AllA..