리팩토링 (Refactoring) 이란?



-소스코드 구조를 효율적으로 변경하면서, 기능이나 동작의 변화가 없도록 하는 작업.



Restructuring VS refactoring


-재구조화는 다시 설계를 하는 작업.

-리팩토링은 나름의 규칙을 가지고 수정하는 작업.
Þ일련의 작업 Process가 있음.

ex) Return을 빼고, 변수이름을 네이밍 룰에 맞추어 진행하며 함수이름을 변경



변수의 읽기 쓰기 분석 연습

int mySumVar = 0;


for(int i = 0; i<1024 ; i++)

  mySumVar mySumVar + i;


mySumVar 은 읽고 쓰며, i 읽기만 하고 있음을 알 수 있다.


읽고 쓰는 변수 => call by reference 으로 함수 추출 시 파라메터로 사용하면 됨.

읽는 변수 => call by value 으로 함수 추출시 파라메터로 사용하면 됨.

참고) 쓰는변수 => 함수 추출 시 return 을 쓰면 됨.




void MySubSumI(int I, int *mySumVar )

{

  sub(i, &mySumVar );

}


int mySumVar = 0;

for(int i = 0; i<1024 ; i++)

  MySubSumI(i, &mySumVar );





변수 제거 기법 알아 보기.

- 어떤 변수가 모두 read만 하거나 write만 하면 변수 제거가능!


- 당연히 알 수 있는 값을 또하나의 변수에 저장하는 변수제거 해보기

-> 원의 넓이, 사각형의 넓이등등


- 플래그 변수들 의심해볼 것!

for, while, if, switch 등의 반목문혹은 조건식에서의 플래그를 검토해볼 것




변수 제거 기법 – flag 변수 제거 방법

- 플래그 변수의 읽기접근을 모두 제거 가 가능한가 검토 해볼것!

-> 쓰기 접근만 남게되면 그 변수는 제거가능

-무조건 true, 혹은 false로 빠지지 않는지 검토해보기!
-> 조건식을 옮겨서 true/false 무조건 되는지검토 물론 코드로직은 동일해야함을 검토!


-플래그 변수 읽기대신, 다른 조건식을 대체할수있는 변수나 조건이있는지 검토할 것
만약 플래그와 같이 동시에 쓰기가 되는 변수가 있다면 그 변수를 이용해서 조건식으로 대체 하는 방법 사용.




플래그 변수 제거 해보기



char *getInputFromUserFile(File *myFile)

{

//입력값을 읽기 전, 읽는 중

int BEFORE = 0

int READING = 1

int my_word_flag = BEFORE;


char *word = nullptr;

int i = 0;

char inputC;


while (inputC = fgetc(myFile))

{

if (my_word_flag == BEFORE) //문자 읽기전

{

word = static_cast <char *>(malloc(sizeof(char)*WORD_SIZE));

my_word_flag = READING;

word[i++] = inputC;

}

else if (my_word_flag == READING) //문자읽는중

{

  word[i++] = inputC;

}

}

return nullptr;

}



아래는 답안입니다.
============>>>>>>>>

char *getInputFromUserFile(File *myFile)

{

char *word = nullptr;

int i = 0;

char inputC;

while (inputC = fgetc(myFile))

{

if (word == nullptr)

{

word = static_cast <char *>(malloc(sizeof(char)*WORD_SIZE));

word[i++] = inputC;

}

else

{

word[i++] = inputC;

}

 }

 return nullptr;

}


+ Recent posts