Computer Science/OOP

For문 중괄호 생략 이유, For - while 문 구조 정리

TLdkt 2022. 6. 25. 10:12
728x90
반응형


🚩들어가며

For문은 혼자 쓰이면 간단하지만, if나 while과 함께 쓰일 때 구조가 처음에는 많이 헷갈리는 듯하다. 눈으로만 봐서는 어디까지가 루프의 시작과 끝인지 알기 어려워 순서도(flowchart)를 그려보는 게 좋은데, 이때 중괄호가 생략되면 더 큰 혼란에 빠지게 된다. Do it! 알고리즘 자바 편을 공부하다 교재 오타인지 내가 모르는 문법인지 헷갈렸는데 다른 사람들은 나처럼 혼란스럽지 않길 바라는 마음으로 글을 시작한다!

 


👀사전 지식

For문의 기본 문법

While 기본문법

If문 기본문법

위 링크들을 먼저 읽어보고 오면 좋다! 

 

 

🌱오늘의 소스코드: 빠르게 이해되나요?

1. for-if문

public class SeqSearch {
    static int seqSearch(int[] a, int n, int key){
        for(int i=0;i<n;i++)
            if (a[i] == key)
            return i;
        return -1;
    }
}

 

2. for-while문

      for(int i=1;i<=num;i++){
        do{
          System.out.print("x[" +i+ "]:");
          x[i]=stdIn.nextInt();
          }while(x[i]<x[i-1]);  
        }

 

 

🌱For문과 If문

If문에서 뒤에 중괄호를 생략하고, 개행을 안 하기도 한다는 건 다들 많이 아는 것 같다.

ex: if (1) return i;

그러나 For문에서도 뒤에 한 줄까지는 수행문으로 인식한다!  

public class SeqSearch {
    static int seqSearch(int[] a, int n, int key){
        for(int i=0;i<n;i++)
            if (a[i] == key)
            return i;
        return -1;
    }
}

즉, 이 구문에서도 if앞에 중괄호가 생략된 것이다. 

 

다만, If문처럼 명명백백하고 굉장히 널리 쓰이는 수준의 구문이 아니라면 중괄호 생략은 추천하지 않는다. 

for루프가 언제 시작되고 끝나는지 명확하지 않을 뿐더러, 실수하기 딱 좋기 때문이다. 웬만하면 생략하지 말자!!StackOverFlow에 달린 댓글에 따르면 나중에는 아래처럼 적어놓고도 뭐가 문젠지 모를 수 있다고...

https://stackoverflow.com/questions/8020228/is-it-ok-if-i-omit-curly-braces-in-java

Why on earth*$#^@$를 외치기 전에 코딩습관을 잘 들여놓자.

 

🌱For문과 While문

1. For문과 While문의 차이 (Differece btw For Loop & While Loop) 

https://www.codingem.com/flowchart-loop/

순서도에서 알 수 있다시피 For문은 for(int i=1;i<=num;i++) 이런 식으로 조건에 i의 한도가 정해져있다. 반면 While의 경우 '참'이면 무한반복이 가능하므로 반복횟수가 일정 숫자로 정해져 있지 않다. 

 

2. For문 안의 While문 (While loop nested within a for loop)

 

이 둘을 결합하면 어떻게 될까? 위의 소스코드에서 do while문이 for의 statement(수행문)으로 들어가게 된다.

따라서 while문이 끝나면, 즉 while문의 조건이 거짓이면 for문으로 다시 돌아가 i<num이면 i++해서 진행하게 된다. 

 

 

💻마치며 

간단하게 For문과 While문,If문에 대해 정리해보았다. 

특히 For문의 경우 중괄호 생략이 교재 오타다vs아니다로 현직자분들 사이에서도 갈릴 만큼 for문 중괄호 생략이 널리 알려지지 않은 것 같다. 도움이 되었길 바란다!

+문법 전부를 외울 필요는 없다지만 기본적인 건 완벽하게 숙지하자는 교훈을 얻었다 ㅎㅎ

728x90
반응형