오늘의 포스팅은 .. 휴가가서 읽은 내용에 대한 포스팅
프로그래밍 언어가 발달하는 과정에는 늘 항상 '사람이 사용하기 더 편리하게!' 라는 목적이 있었기 때문에 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장 읽는게 목표 'ㅅ'!
'스터디' 카테고리의 다른 글
[아홉가지 알고리즘] 05. 오류 정정코드 - 핀포인트 트릭 (0) | 2014.07.31 |
---|---|
[아홉가지 알고리즘] 05. 오류 정정코드 (0) | 2014.07.30 |
140721 (0) | 2014.07.21 |
솔트값을 이해하게 된 계기 (0) | 2014.07.18 |
하반기 목표! (0) | 2014.07.01 |