3. 코드 단위는 간단하게 짜라
가이드라인
단위당 분기점은 4개로 제한한다
복잡한 단위는 더 잘게 나누고, 서로 뭉쳐 있지 않게 한다
분기점 개수가 줄면 단위 수정 및 테스트가 쉬워지고 유지보수성이 개선된다
모든 문제는 내부에 더 작은 문제들이 있다.
-마틴 파울러
분기점, 복잡도, 실행경로
if, switch, 클래스, 인터페이스 등
분기점이 하나도 없다면 -> 실행흐름은 하나뿐 -> 테스트케이스도 1개면 충분!
1. 필요성
간단한 단위는 이해하기 쉽고, 수정하기도 쉽다
테스트하기 쉽다
간단한 단위는 수정하기 쉽다.
복잡한 단위는 분석 및 수정이 어려움
간단한 단위는 테스트하기 쉽다.
테스트를 쉽게 하기 위해서라도 단위는 간단하게 작성해야 한다.
분기가 6개인 경우 최소한 테스트케이스는 6개가 존재해야 한다. 그래야 유지보수 과정에서 생길지 모를 사소한 버그를 예방 할 수 있음!!
2. 적용가이드
분기점 개수는 4개로 제한!!
if, case, ?, && ||, while, for, catch
분기절의 깊이나 길이가 늘어나면 분석이 힘들어진다!!
조건문 체인 다루기
독립적인 코드블록 서너개 뭉침 -> 메서드 추출 패턴 리팩토링
조건을 다형성으로 대체 -> 디자인패턴 : 상태패턴 / 다형성 활용
단점은... 구현 클래스가 많아짐
장점은 복잡도 낮춤, 다형성 활용으로 수정 최소화, 에러가 날 수 없는 형태로 명확화
Map 자료구조 활용
private static Map<Nationality, List<Color>> FLAGS = new HashMap<>();
static {
FLAGS.put(DUTCH, Arrays.asList(Color.RED, Color.WHITE));
FLAGS.put(GERMAN, Arrays.asList(Color.RED, Color.WHITE, Color.BLACK));
FLAGS.put(FRENCH, Arrays.asList(Color.RED, Color.BLUE, Color.YELLOW));
FLAGS.put(KOREA, Arrays.asList(Color.BLUE, Color.WHITE, Color.RED));
}
public List<Color> getFlagColors(Nationality nationality) {
List<Color> colors = FLAGS.get(nationality);
return colors != null ? colors : Arrays.asList(Color.GRAY);
}
상태패턴 활용
public interface Flag {
List<Color> getColors();
}
public class FrenchFlag implements Flag{
@Override
public List<Color> getColors() {
return Arrays.asList(Color.RED, Color.BLUE, Color.YELLOW);
}
}
public class GermanFlag implements Flag {
@Override
public List<Color> getColors() {
return Arrays.asList(Color.RED, Color.WHITE, Color.BLACK);
}
}
...
private static Map<Nationality, Flag> FLAGS2 = new HashMap<>();
static {
FLAGS2.put(DUTCH, new DutchFlag());
FLAGS2.put(GERMAN, new GermanFlag());
FLAGS2.put(FRENCH, new FrenchFlag());
FLAGS2.put(KOREA, new KoreaFlag());
}
public List<Color> getFlagColors2(Nationality nationality) {
Flag flag = FLAGS2.get(nationality);
flag = flag != null ? flag : new DefaultFlag();
return flag.getColors();
}
간결함이냐, 확장성이냐... 그건 상황에 따라 적절히 선택 ! 개발자의 몫
중첩 다루기
중첩문을 보호절로 대체 (Replace Nested Conditional with Guard Clauses)
중복되는 조건절 걸러내기
Last updated
Was this helpful?