Java - 반복문, 배열

Yuri Lee·2020년 9월 28일
0

Java

목록 보기
5/23

반복문

인간은 반복적인 작업을 잘하지 못한다. 실수하고, 지루해한다. 컴퓨터는 이런 반복적인 작업을 대행하기 위해서 만들어진 기계다. 인간이 하기 싫어하는 바로 그 일을 컴퓨터가 대신하도록 하는 것이 반복문(loop, iteration)이다.

while

package com.yuri.javatutorials.loop;

public class WhileDemo3 {

	public static void main(String[] args) {
		int i = 0;
		// i의 값이 10보다 작다면 true, 크다면 false가 된다. 현재 i의 값은 0이기 때문에 이 반복문은 실행된다. 
		while(i<10){         
		    System.out.println("Coding Everybody"+i);
		    // i의 값에 1을 더한다. 반복문의 중괄호의 마지막 라인에 도달하면 반복문은 반복문을 재호출한다. 이때 i<10의 값을 검사하게 된다.
		    i++;
		}
	}
}

for

while문을 보면 반복의 횟수를 지정하기 위해서 while문 외부에 변수 i의 값을 초기화하고, while문 안에서 i의 값을 증가시키고 있다. 이것은 코드를 산만하게 할 수 있다. 반복문에서 자주 사용하는 이러한 패턴을 문법적인 형태로 만든 것이 for문이다. for문은 특정한 횟수만큼 반복 실행을 하는 경우에 자주 사용된다. 하지만 for문이나 while문이나 서로 대체 가능하다. 취향에 따라서 선택하면 된다. while과 for의 관계는 조건문으로 비유해서 생각해 볼 수도 있을 것 같다. 조건문의 핵심은 if이지만 연관된 로직들의 응집성을 높이기 위해서 else if, else 등이 도입된 것과 비슷한 관점으로 볼 수 있다.

package com.yuri.javatutorials.loop;

public class ForDemo {

	public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println("Coding Everybody " + i);
        }
	}

}

for문의 괄호 안에는 반복의 종료 조건이 들어온다. 종료 조건은 크게 3개의 부품으로 구성되는데 아래와 같다.

  • 초기화 : 반복문이 실행될 때 1회 실행된다.
  • 종료조건 : 초기화가 실행된 후에 종료조건이 실행된다. 종료조건의 값이 false일 때까지 반복문의 중괄호 구간의 코드가 반복 실행된다.
  • 중괄호 구간의 실행이 끝나면 반복 실행이 실행된다. 일반적으로 이 곳에 i++와 같이 변수를 증가시키는 로직이 위치하고, 이것이 실행된 후에 종료조건이 실행된다. 종료조건이 false가 될 때까지 이 과정이 반복된다.

반복문의 제어

break

반복작업을 중간에 중단시키고 싶다면 어떻게 해야 할까? break를 사용하면 된다.

package com.yuri.javatutorials.loop;

public class BreakDemo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5)
                break;
            System.out.println("Coding Everybody " + i);
        }
 
    }
}

/*Coding Everybody 0
Coding Everybody 1
Coding Everybody 2
Coding Everybody 3
Coding Everybody 4
 */

continue

그럼 실행을 즉시 중단하면서 반복은 지속해가게 하려면 어떻게 해야 할까?

package com.yuri.javatutorials.loop;

public class ContinueDemo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5)
                continue;
            System.out.println("Coding Everybody " + i);
        }
    }
}


/*
 * Coding Everybody 0
Coding Everybody 1
Coding Everybody 2
Coding Everybody 3
Coding Everybody 4
Coding Everybody 6
Coding Everybody 7
Coding Everybody 8
Coding Everybody 9
 * 
 * */

결과는 다음 같다. 숫자 5가 보이지 않는다. 왜 그럴까? i의 값이 5가 되었을 때 실행이 중단됐기 때문이다. continue 구문은 이 명령이 나타나는 이후의 로직을 실행하지 않도록 한다. 하지만 반복문 자체를 중단하는 것이 아니고 다시 반복문이 실행된다.

반복문의 중첩

package com.yuri.javatutorials.loop;

public class LoopDepthDemo {
	 
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.println(i + "" + j);
            }
        }
 
    }
 
}

배열

배열은 연관된 데이터를 모아서 관리하기 위해서 사용하는 데이터 타입이다. 변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 저장하기 위한 것이라고 할 수 있다.

package com.yuri.javatutorials.array;

public class DefineDemo {
	 
    public static void main(String[] args) {
 
        String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" };
 
    }
 
}

String[]은 classGroup에 담을 배열에 담길 데이터의 타입이 문자열의 배열이라는 의미다. 배열을 선언할 때는 데이터 타입 뒤에 []를 붙여야 한다. []가 없다면 classGroup는 배열이 아니라 문자열 데이터 타입을 갖는 변수가 된다. 배열에 소속될 데이터들은 중괄호 안에 위치한다. 그리고 각각의 데이터들은 쉼표로 구분된다.

배열의 첫 번째 역할은 연관된 데이터를 저장하는 것

package com.yuri.javatutorials.array;

public class LengthDemo {

	public static void main(String[] args) {
		String[] classGroup = new String[4];
		classGroup[0] = "최진혁";
		System.out.println(classGroup.length);
		classGroup[1] = "최유빈";
		System.out.println(classGroup.length);
		classGroup[2] = "한이람";
		System.out.println(classGroup.length);
		classGroup[3] = "이고잉";
		System.out.println(classGroup.length);

	}

}

/*배열에 담겨 있는 값의 수를 알아내는 방법을 보여준다

4
4
4
4
 */

.length는 배열에 실제 담긴 데이터의 숫자를 의미하는 것이 아니라 배열을 처음 생성할 때 지정한 배열의 크기를 의미한다는 점을 주의하자.그 안에 몇개의 값이 담겨질 수 있는가를 알려준다. 다른 고급 언어들은 그 길이를 반환해주는 경우가 많다.

배열의 사용

package com.yuri.javatutorials.array;

public class ArrayLoopDemo {

	public static void main(String[] args) {
        String[] members = { "최진혁", "최유빈", "한이람" };
        for (int i = 0; i < members.length; i++) {
            String member = members[i];
            System.out.println(member + "이 상담을 받았습니다");
        }
	}
}

/*
 최진혁이 상담을 받았습니다
최유빈이 상담을 받았습니다
한이람이 상담을 받았습니다
 */

반복문을 이용해서 배열 members의 내용을 하나씩 꺼낸 후에 상담 결과를 화면에 출력하고 있다. 배열이란 연관된 정보를 하나의 그룹으로 관리하기 위해서 사용하는데 그 정보를 처리 할 때는 반복문을 주로 이용한다. 반복문과 배열은 매우 밀접한 관계에 있다고 할 수 있다.

for-each

package com.yuri.javatutorials.array;

public class ForeachDemo {

    public static void main(String[] args) {
        String[] members = { "최진혁", "최유빈", "한이람" };
        for (String e : members) {
            System.out.println(e + "이 상담을 받았습니다");
        }
    }
}
/*
최진혁이 상담을 받았습니다
최유빈이 상담을 받았습니다
한이람이 상담을 받았습니다
*/

or(String e : members)

위의 구문은 배열 members의 값을 변수 e에 담아서 중괄호 구간 안으로 전달해준다. 반복문의 종료조건이나 종료조건을 위해서 기준값을 증가시키는 등의 반복적인 작업을 내부적으로 감춘 것이라고 할 수 있다.

한계

배열은 초기화할 때 그 크기가 정해진다. 그래서 정해진 크기 이상의 값을 넣을 수 없다. c와 같은 언어에 익숙한 사람에게는 당연한 것이지만, JavaScript나 Python, PHP와 같은 언어에 익숙한 사람에게는 의아할 것이다. 후자의 언어들은 배열의 크기를 미리 정의하고 사용하지 않는다. 물론 방법이 있다. 자바에는 컬렉션 Collection이라는 기능이 있다. Container라고도 부르는 이 기능을 이용하면 JavaScript의 배열과 같이 유연하게 배열을 사용할 수 있다.

결론: 반복문과 배열은 밀접한 관계를 가지고 있다😲!!


이 글은 생활코딩의 자바 강좌를 바탕으로 정리한 내용입니다.

profile
Step by step goes a long way ✨

0개의 댓글