본문 바로가기

스터디

14 07 29 - 처리 흐름 제어


오늘의 포스팅은 .. 휴가가서 읽은 내용에 대한 포스팅



프로그래밍 언어가 발달하는 과정에는 늘 항상 '사람이 사용하기 더 편리하게!' 라는 목적이 있었기 때문에 4장에서 나오는 처리 흐름 제어 역시 이같은 이유로 만들어지게 됨.


처리 흐름 제어... 라는 건 쉽게 말해 IF, While 같은 구문을 사용하여, 코드 구조를 좀 더 읽기 쉽게, 사용하기 쉽게 만드는 것이다. 아래는 우리가 흔하게 보는 처리흐름 제어문.



1. if-else. 왜 사용하게 되었는지 살펴볼까 ' ')


int hoy = 3;

// if문 앞 

if( hoy <= 0 )

{

// if문 안

}

else

{

// else 문 안

}

// if문 뒤


책에서는 어셈블리어 까지 동원해가며 설명했지만 사실 뭐 굳이 어셈블리어 예문을 들지 않아도 되긴 하지만 ... 나는 어셈블리어를 본 적도 없어서 =_= 한번 적어보는 것도 나쁘진 않을 것 같다.


...

movl    $3,    -8(%rbp)                                                                                

#if문 앞

movl    -8(%rbp),    %eax

cmpl    0,               %eax

jle        LBB1_2

#if문 안

jmp       LBB1_3

LBB1_2:

#else 문 안

LBB1_3:

#if 문 뒤


...



물론 어셈블리어라서 복잡해보일 수도 있겠다만 ... 이걸 C로도 표현할 수가 있다고 한다. C로 표현해도 사실상 별로 달라지는 것 없이 복잡할 수 밖에 없다.


int hoy = 3;


if (hoy <= 0)    

{

goto POS_Negative:

}

goto POS_END:


POS_Negative:

...

POS_END:

....


학교다니면서 절대 쓰지 말라고 귀에 못이 박히도록 들은 goto문이다. 딱 봐도 알겠지만.... if - else if - else ... 문을 사용하지 않는다면 저런 goto문을 쓰게 되지 않았을까. 아, 상상만 해도 끔찍하다. 





2. for문? while문?


이 두 구문의 엄청난 차이는 사실 존재하지 않는게, for문 대신 while문을 충분히 사용할 수 있다. 다만, while문에서 사용될 문장 몇개를 for문이 줄여준다는 점 정도?


아래 두 종류의 코드는 결과적으로 같은 동작을 하는 코드.


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

{

  printf("bomnal~");

}

int i = 0;

 while(i<MAXSIZE)

{

printf("bomnal~");

i++;

}


처음 언어를 배우는 사람이라면 while문이 더 보기 쉽겠지만... for문이 가독성 면에서 훨씬 좋다. while문은 루프를 빠져나오기 위한 조건이 충족되기 위해서 있는 변수들이, 어디서 어떻게 바뀌는지 비교적 파악하기 어렵기 때문이다. 






내일은 이 책 말고 알고리즘 책 5장 읽는게 목표 'ㅅ'!