본문 바로가기

java/java 리팩토링11

04. 분류 코드를 클래스로 만들기 분류 코드를 사용할 때의 문제점 기본 타입 분류 코드 : 객체의 종류를 특정 값으로 나타낸다 BOOK:0, TOY:1, BREAD:2, APPLE:3 등 실수로 정의 하지 않은 값이 들어갈 수 있음 다른 그룹의 분류 코드와 혼란 일으킬 가능성 존재 컴파일시에 정의되지 않은 코드 넣어도 에러 발생하지 않음. 아래는 안 좋은 예시 public static final int BOOK = 0; public static final int FOOD = 1; public static final int TOY = 2; new Category(100); // 문제 부분, 100 값은 정의되어 있지 않아서 오류지만 컴파일 에러 없음 리팩토링 순서 - 분류 코드를 클래스로 치환하기 새로운 분류 코드 클래스를 작성하여 기존 .. 2023. 2. 8.
03. null 객체 사용 null 객체 사용시 문제점 객체의 null 여부를 확인하는 코드가 너무 많은 경우 null 체크 적다면 리팩토링 안 해도 됨 아무것도 안하는 객체를 만들어 사용함으로 null 확인 코드를 줄인다. 리펙토링 단계 null 객체 클래스를 작성한다. 기존에 null을 체크하는 클래스의 하위 클래스로 생성 해당 클래스에 isNull() 이라는 null 체크하는 메서드 구현, 기존 클래스는 false, null 클래스는 true로 반환하게 한다. null 치환하기 null 코드 부분을 isNull() 메서드로 치환한다. null 객체 클래스를 재정의하여 조건 판단진행 isNull() 메서드를 사용하는 제어문을 찾아서 다음과 같이 수정 AS-IS package introducenullobject.before; p.. 2023. 2. 7.
02. 제어를 위한 플래그 삭제 SimpleDataBase 예제 리펙토링 1단계 후 (이상한 변수명 바꾸기) 코드를 날린다고 해서 모든 변수들을 안 쓰는 것이 아니기 때문에 이상한 변수명 바꾸는 작업 수행하여야 하고, 롤백 필요한 케이스가 필요할 수 있기 때문에 단계를 나눠서 리팩토링을 진행해야 한다. AS-IS package removecontrolflag.before; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class SimpleDat.. 2023. 2. 7.
1. 매직넘버를 상수로 바꾸기 매직 넘버를 사용할 때 문제점 의미를 알기 어려움. 수정하기 어려움 상수로 치환하여 리펙토링 한다. 리펙토링 단계 매직넘버를 기호 상수로 치환 1. 기호 상수 선언, 매직 넘버를 기호 상수로 치환, 기호 상수에 의존하는 다른 매직 넘버를 찾아 기호 상수로 바꿈 2. 테스트 리팩토링하여 얻을 수 있는 효과 1. 단순 숫자보다 enum같은 의미를 가지는 String을 사용하여 코드 이해 하기가 수월하다. 2. enum을 사용함으로서 메서드 호출할 때 정의되지 않은(잘못된) 값으로 호출 시, 컴파일 단계에서 오류 탐지 가능하다. 리팩토링 전 코드 package magicnumber.before; public class Robot { public String name; public Robot(String nam.. 2023. 2. 6.