티스토리 뷰

프로그래밍/Java 기초

Java(9), 반복문

열무룩 2020. 4. 7. 15:16

이번 시간은 예고한 대로 반복문에 대해서 알아보도록 하겠다.

 

프로그래밍을 하다 보면 일정 구간만큼 동일한 작업을 반복해서 해야 할 때가 있다.

 

가령, 특정 문자열과 함께 숫자를 순서대로 라벨링을 해주어야 한다고 가정해보자. 반복문이 없다면 우리는 아래와 같이

 

코드를 작성해야 한다.

 

public class Loop {
    public static void main(String[] args) {
        System.out.println("Chany1");
        System.out.println("Chany2");
        System.out.println("Chany3");
        System.out.println("Chany4");
        System.out.println("Chany5");
        System.out.println("Chany6");
    }
}

 

누가 보아도 비효율적이고 좋은 코드로 보이지는 않는다.. 🤦‍♂️

 

자 그럼 반복문을 다루는 방법에 대해 알아보자.

 

 

while


반복문에 대해서는 두 가지를 살펴볼 것이다.

 

먼저 살펴볼 것은 while문으로 형식은 아래와 같다.

 

While(조건) {

	//반복 수행할 로직
    
}

 

얼핏보면 if문과 동일한데, 해석도 if문과 유사하다. , while뒤의 조건이 True일 때만 중괄호 안의 로직이 돌아간다.

 

하지만 while문을 사용할 때는 꼭 주의해야 할 점이 있는데 바로 무한 루프다.

 

만약 현재 반려 동물을 키우는 중이라고 한다면, 밥을 주고 먹도록 시켰을 때 어느정도 배가 차면 스스로 먹는 것을

 

멈춘다. 하지만 우리가 지금 만드는 코드는 그렇게 주체적이지 못하다. 따라서 어느 구간을 주고 해당 구간까지만

 

반복을 하라고 명시해 주어야 한다. 그렇지 못하면 해당 프로그램은 무한 루프에 빠지고 만다.

 

이렇게 무한 루프에서 탈출하는 방법은 두 가지가 있다.

 

public class Loop {
    public static void main(String[] args) {
        while (true){
            System.out.println("Chany");
        }
    }
}

위와 같은 코드는 무한 루프에 빠지게 된다. 사용자가 강제적으로 멈추도록 하지 않는 한 계속해서 반복하게 된다

 

 

 

첫 번째는 구간을 지정해주는 방법이다. 아래 코드를 보자.

 

public class Loop {
    public static void main(String[] args) {
        int i = 0;

        while (i < 10){
            i ++ ;
            System.out.println("Chany"+i);
        }
    }
}

i라는 변수에 0을 할당하고, 이 값이 10미만일 때까지만 아래의 반복문이 수행될 수 있도록 하는 방법이다.

 

실행 결과로 Chany1, Chany2 … Chany10 이 출력될 것이다.

 

, 괄호 안의 조건 자리에는 “언제까지 반복을 할 것인가 를 나타낸다고 생각하면 되겠다.

 

두 번째는 switch문에서 잠깐 등장했던 break. Break는 강제적으로 반복문을 stop 하는 기능이다.

 

Break는 아래와 같이 사용하며, 자세한 생략은 넘어간다. 

 

public class Loop {
    public static void main(String[] args) {
        int i = 0;
        while (true){
            if(i >= 10){
                break;}
            i ++ ;
            System.out.println("Chany"+i);
        }
    }
}

 

 

for


while문을 사용하는 것은 조금 까다로운 것이 사실이다. 어떤 특정 조건을 지정해야 하고 또 반복적으로 어떤 값을

 

초기화하고 그 값을 더하도록 하는 코드가 들어가야 한다.이것은 코드를 산만하게 만든다.

 

반복문에서 이렇게 자주 사용되는 패턴을 문법적인 형태로 만든 것이 for문이다.

 

for문은 특정 횟수만큼 반복 실행을 하도록 코드를 짤 때 효과적이다. 우선 for문의 기본 구조는 다음과 같다.

 

for(변수 초기화; 종료조건; 반복 실행){
           //반복 수행할 로직
}

 

앞서 살펴봤던 예제를 for문으로 구현해보자.

 

public class Loop {
    public static void main(String[] args) {

        for (int i = 1; i <= 10; i++) {
            System.out.println("Chany" + i);
        }
    }
}

while 문에서 와는 다르게 for 뒤 괄호 안에 i라는 변수를 초기화해 주었고, i10보다 커질 때 종료시킨다고 조건을

 

걸어두었고, 반복을 수행하면서 i의 값에 1씩 더해준다고 한 줄에 작성했다.

 

while이였다면 구구절절 코드가 길어졌겠지만 for문은 애초에 그러한 조건과 반복 수행될 것들이  한 곳에 모여 있기

 

때문에 가독성이 우수하고 유지 보수할 때도 어떤 값을 찾기 위해서 시간을 쓸 필요도 없다.

 

한편 특정 조건에서 break를 하는 것이 아니라 해당 조건에서는 로직을 수행하지 않되 반복문은 종료하고 싶지 않은

 

경우, continue를 사용한다.

 

, for문은 Chany1 ~ Chany10 까지 출력이 되지만 아래의 for문은 중간에 Chany5 는 건너뛰고 출력이 된다.

 

public class Loop {
    public static void main(String[] args) {

        for (int i = 1; i <= 10; i++) {
            if( i == 5 ){
                continue;
            }
            System.out.println("Chany" + i);
        }
    }
}

 

 

반복문의 중첩


반복문도 조건문과 동일하게 중첩이 가능하다. 중첩 반복문의 경우에는 안 쪽의 반복문이 모두 수행된 뒤에

 

바깥쪽의 반복문이 한 차례씩 수행된다. , 구구단을 출력하고자 할 때는 이중 for문을 이용하면 손쉽게 만들 수 있다.

 

public class exam {
    public static void main(String[] args) {

        for(int i = 2; i < 10; i++){
            for(int j = 1; j < 10; j++){
                System.out.println(i + " * " + j + " = " + i * j);
                if(j == 9){
                    System.out.println("\n");
                }
            }
        }
    }
}

 

 

이번 포스팅은 여기까지. 단순하게 반복적으로 숫자를 1씩 더하는 것이라고 생각할 수 있지만, (물론 이것만으로도 반복

 

문의 효율성은 엄청나다) 이 반복문은 배열과 만나게 되면 그 존재감이 부각된다. 

 

다음 포스팅에서는 배열과 반복문의 콜라보를 주제로 포스팅을 하도록 하겠다.

 

 


포스팅의 모든 학습 내용은 생활코딩의 Java 입문 수업의 출처임을 밝힙니다.

 

@ 강의 출처 : Open Tutorials

 

'프로그래밍 > Java 기초' 카테고리의 다른 글

Java(10-1), 배열 for - each  (0) 2020.04.13
Java(10), 배열  (0) 2020.04.10
Java(8-1), 조건문 2  (0) 2020.04.07
Java(8), 조건문  (0) 2020.04.03
Java (7), 연산자  (0) 2020.03.31
댓글
링크
최근에 올라온 글
Total
Today
Yesterday