C언어 while문과 for문의 차이는 무엇일까요?
글쓴이: hbdhmj819 / 작성시간: 금, 2022/06/24 - 4:03오후
보통 for문과 while문의 차이라고 하면 for문은 특정 범위 안(특정 횟수)에서 반복하는 것이고, while문은 조건이 참인 동안에 반복을 한다고 합니다.
python 같은 경우에는 이 설명에 딱 맞는데, C언어나 JAVA는 초기식, 조건식, 증감식 생략으로 무한 루프로 돌릴 수도 있고, 아니더라도 while문과 같은 방식?으로 코드를 반복하는 게 가능합니다. 그 역으로 for문 코드를 while문으로 변환해서 사용하는 것도 가능하고요.
그렇다면 굳이 for문과 while문 두 개가 존재하는 이유는 무엇일까요? 처음에는 for문은 일단 한 번은 실행하지만 while문은 조건이 거짓이면 아예 실행을 하지 않는 게 차이라고 생각했는데 for문도 조건식 부분을 손 보면 아예 실행하지 않는 게 가능하고....
아무리 생각해도 차이점을 모르겠네요. 예전에 테스트해봤을 때는 둘이 실행 시간에도 차이가 없었던 것으로 기억합니다.
Forums:
Quote:python 같은 경우에는 이 설명에 딱
python의 경우에도 for문을 조건이 참인 동안 반복하는 데, while문을 특정 범위 안(특정 횟수)에서 반복하는 데 쓸 수 있습니다.
그렇게 쓰는 게 자연스럽지 않을 뿐더러 (python의 철학에 어긋나기도 하고요) 코드를 읽는 사람의 기대를 배신하기 때문에 별로 권장되지 않을 뿐이지요.
C언어의 경우에도 마찬가지입니다. for문과 while문 모두 서로를 대신하여 쓰일 수 있을 만큼 충분히 유연합니다.
원래 언어 문법이 유연할수록 같은 의도를 나타낼 수 있는 두 가지 이상의 방법이 있는 경우가 많아집니다.
======
결국 프로그래머가 뚜렷한 의도를 가지고 for문이든 while문이든 합리적인 형태로 표현한다면, 컴파일러가 받아들여서 해석한 결과인 control flow는 동일할 수밖에 없습니다.
그러니 for과 while의 차이는 결국,
(1) 어느 쪽이 내 의도를 좀 더 편하게, 간결하게 나타낼 수 있는가
(2) 다른 프로그래머들이 읽었을 때 어느 쪽이 내 의도를 좀 더 직접적으로 드러내는가,
정도의 차이일 뿐입니다.
말씀하신 대로, for문을 보면 대체로 프로그래머들은 정해진 범위 혹은 횟수를 반복할 거라고 기대합니다.
while문을 보면 정해진 조건이 만족되는 동안 확실하지 않은 횟수를 반복할 거라고 기대하지요.
그 기대를 배신하는 건 가능하지만 권장되지 않습니다. 그 뿐입니다.
for 문과 while 문은 조금씩 손보면 완전히
for 문과 while 문은 조금씩 손보면 완전히 동일하게 상호 호환되죠.
for 문이 조금더 패키징(?) 가능한게 for(초기화; 조건문; 변경문) 식이기 때문에 while(조건문) 문 보다는 좀더 쓰임새가 있다고 보이지만...... 개인적으로 저는 for 문 보다는 while 문을 좋아합니다.
물론 단순 증감 동작만 필요할때는 for 문이죠. 결국은 가독성 차이라고 봅니다.
for 문이 확 이해가 잘되는 편이면 for 문이 취향에 맞는거죠.
그러고보니 이 논쟁은 자칫하면 big-endian, little-endian 논쟁으로 발전할 수도 있겠네요. ^^
가독성이 중요하죠.
영어권에서 for 5 years 라고 하고 while I sleep이라고 하잖아요. 결국 사용자의 의도륾 명확히 알고 가독성을 높이기 위해 두가지가 있는거죠. for는 몇번 돌지 알때 쓰는 거고, while은 어떤 조건이 만족하는동안이란 개발자의 의도를 파악하는데 도움이 됩니다. for(;;)이런식으로 쓰고 그 안에서 조건을 써서 분기하는건 가독성에 불필요하죠. 가독성은 가장 중요한 요소중 하나입니다.
embedded 시스템에서는 디버깅할 때 step
embedded 시스템에서는 디버깅할 때 step by step 진행시 for 루프는 가끔 이상하게 디버깅 되는 케이스가 있기 때문에 while이 편합니다
댓글 달기