컴퓨터/이론 및 tools 사용

[리팩토링 refactoring] Simplifying Conditional Expressions 조건문의 간결화 - Remove Control Falg 제어 플레그 제거

review777777 2017. 1. 27. 01:29
반응형

Remove Control Flag 제어 플래그 제거

제어 플래그는 프로그래머가 항상 함수 (함수 선언 행)와 종료 점 (함수의 맨 끝에 있음)에 대해 한 개의 진입 점을 가지고있는 yore 일까지 거슬러 올라간다.

현대 프로그래밍 언어에서는 루프 및 기타 복잡한 구문에서 제어 흐름을 수정하기위한 특수 연산자가 있으므로이 스타일은 더 이상 사용되지 않는다.
• break : 루프를 중지
• continue : 현재 루프 분기의 실행을 중지하고 다음 반복에서 루프 조건을 확인
• return : 전체 함수의 실행을 중지하고 연산자에 주어진 경우 결과를 반환


Problem & Solution

일련의 boolean식에서 컨트롤 플래그 역할을하는 변수가 있는 경우, break 또는 return을 대신 사용하라.


-Problem

void checkSecurity(String[] people) {

  for (int i = 0; i < people.length; i++) {

    if (people[i].equals ("Don")) {

      sendAlert();

      break;

    }

    if (people[i].equals ("John")) {

      sendAlert();

      break;

    }

  }

}

- Solution

void checkSecurity(String[] people) {

  boolean found = false;

  for (int i = 0; i < people.length; i++) {

    if (!found) {

      if (people[i].equals ("Don")) {

        sendAlert();

        found = true;

      }

      if (people[i].equals ("John")) {

        sendAlert();

        found = true;

      }

    }

  }

}

 

절차

* break 또는 continue를 사용

논리문 밖으로 나오도록 하는 컨트롤 플래그의 값을 찾는다.

논리문 밖으로 나오도록컨트롤 플래그에 값을 설정하던 부분을 찾아 break나 continue 문으로 바꾼다.

컴파일 및 테스트

* break나 continue를 사용하지 않는 다른 접근 방법

로직을 메소드로 뽑아낸다.

논리문 밖으로 나오도록 하는 컨트롤 플래그의 값을 찾는다.

논리문 밖으로 나오도록 컨트롤 플래그에 값을 설정하던 부분을 return으로 바꾼다.

컴파일 및 테스트


1. 루프 또는 현재 반복을 종료하게하는 제어 플래그에 값 할당을 찾음
2. 루프에서 빠져 나왔다면 break로 바꿈. continue, iteration에서 빠져 나왔다면, 또는 함수에서이 값을 리턴해야 할 경우 리턴
3. 나머지 코드를 제거하고 제어 플래그와 연관된 검사를 수행

 

Benefits

제어 플래그 코드는 종종 제어 흐름 연산자로 쓰인 코드보다 훨씬 복잡하다.


반응형