리팩토링 (Refactoring) 이란?
Restructuring VS refactoring
변수의 읽기 쓰기 분석 연습
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 변수 제거 방법
- 플래그 변수의 읽기접근을 모두 제거 가 가능한가 검토 해볼것!
플래그 변수 제거 해보기
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;
}