728x90

이 강의는 자바의 프로젝트를 어떻게 만드는지, 또한 빌드를 어떻게 하는지에 대한 강의를 진행하지 않는다.

그러나 자바의 기본적인, 그리고 자바에 필수적인 기능들도 분명 존재하고 이 블로그엔 그 작업에 필요한 포스팅도 함께 제공하고 있다.

그 정보를 확인하고 싶다면 여기를 참조하라. 양이 조금 되고 현재진행형으로 늘어나고 있으므로 페이지내의 찾기(ctrl+f 나 cmd+f)로 찾아보도록하자.


저번 시간에는 switch문을 배웠다. if문과 switch문같은 것을 분기문이라고한다.

이제 분기문을 배웠으니까 반복문을 배워보자.


예를 들어서 1부터 100까지 출력하는 프로그램을 짠다고 생각해보자.

여러분들은 System.out.println(1);System.out.println(2);......

이런식으로 타이핑 하게 될것이다.

정말 100개를 한다고 했을때 저렇게 치는건 노가다 그 이상도 그 이하도 아니다.

자바에서는 단순한 반복작업을 쉽게 해주는 문법을 지원해준다.

그것이바로 반복문이다.

반복문은 자바에서 for과 while, do-while로 3가지가 존재한다.


while문


while문은 반복문중에서 가장 간단한 형태이다. 사용예제는 아래와 같다.


public class Main {
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i <= 10) {
sum += i;
i++;
}
System.out.println(sum);
}
}


while문의 경우 해당 조건이 참일때까지 무한히 반복한다.

만약 조건이 거짓인 상황이 온다면 반복문은 종료하게된다.

만약에 while문의 조건을 변동줄만한 상황이 아예존재하지 않는다면 그냥 무한히 반복하게된다.

while(조건){

내용;

}

do-while문


do-while문은 기본적으로 while과 똑같다.

차이점이 있다면 while문은 조건을 확인하고 단 한바퀴도 안 돌수 있지만

do-while은 조건을 마지막에 확인하기 때문에 무조건적으로 한바퀴는 돌 수 있다는 것이다.

예를 들어서 아래의 코드를 보자.


public class Main {
public static void main(String[] args) {
int i = 11;
int sum = 0;
while (i <= 10) {
sum += i;
i++;
}
System.out.println(sum);
}
}


이를 실행하면 반복문을 단 한번도 돌지 않으므로 sum값은 0으로 고정이 된다.

그러나 do-while을 사용해보자.


public class Main {
public static void main(String[] args) {
int i = 11;
int sum = 0;
do {
sum += i;
i++;
} while (i <= 10);
System.out.println(sum);
}
}


실행할 경우 일단 한번은 묻지도 따지지도 않고 실행할 수 있다. 따라서 11이 출력이 된다.


둘은 완전히 취향차이이다. while이 필요한 구문을 do-while로 짜는것도 가능하며 반대로 do-while이 필요한 상황을 while로 짜는 것 역시 가능하다.


do{

내용;

} while(조건);

for문


for문은 while문을 확장한 형태이다.

물론 조금만 더 알게되도 for=while=do-while이라는 공식이 성립한다는 것을 알 수있다.

그러나 셋은 용도가 조금 차이가 있는데 for문이 우리가 일반적이게 "단순반복을 작업을 한다."에 충실한 작업이다.

while과 do-while은 반복잡업이라는 의미보단 해당 조건이 맞을때까지 다시 실행한다 라는 느낌에 가깝다.

그러나 사실 이도 취향의 영역이라 안 지키는 사람도 많다.


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


for문의 결과로 0부터 9까지를 출력하게 된다.


for(초기화;조건;증가분){

내용

}

for문의 실행로직은 제일 처음 초기화 부분을 1회로 실행하며 그 다음 조건을 보고 조건이 참일 경우 내용을 실행한다,

그리고 마지막에 증가분을 실행한후 다시 조건을 보고... 이하 무한반복이다.


즉 위의 로직은 먼저 i를 0으로 초기화 하고 조건을 보니까 i가 10보다 작아서 참임을 확인, 그 다음 내용인 i를 출력하고

증가분인 i를 1증가시키고 다음 조건... 이하 문하반복을 실행한다.


for문에서 초기화 부분에서 변수를 선언할 수 있다. 여기서 선언한 변수는 for문을 벗어사서는 못쓰게 된다.

아래의 예시를 보자.


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


해당 예시를 보면 int I=1이 바로 초기화 구문에 등장해도 상관없음을 알 수 있다.


break


break는 반복문을 기능 저지시킨다.

만약 반복문이 모종의 이유로 돌아가지 않아야할 사오항이 온다면 break를 써서 종료 시킬 수 있다.


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


위의 경우 i가 5일경우에 for문은 종료하게된다 왜냐하면 i가 5인 상황에서 break를 호출해서 반복문을 파괴했기 때문이다.


continue


break는 반복문을 부술수 있다.

즉 특별한 케이스에서 반복을 더 이상하지 않을 때 쓰는것이다.

그런데 만약 반복문을 부수는게 아니라 특정 케이스만 하고 싶지 않을 때가 있다.

예를 들어 369게임을 만든다고 생각해보자. 마지막 숫자가 3이면 숫자를 출력하지 않으려 한다.

그런 경우 break는 사용할 수 없다. 왜냐하면 반복이 꺼지게 될것이니까.

이 때 사용하는 것이 continue이다. continue는 특정 상황에서 반복을 건너띌 수 있다.


public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
if (i % 10 == 3 || i % 10 == 6 || i % 10 == 9) continue;
System.out.println(i);
}
}
}


label


반복문이 중첩될 경우 반복문을 부수려면 어떻게 해야할까?

예를들어서 구구단을 출력하는 코드에서 4단 4열에서 그만두고 싶다면?

이게 처음하는 입장에서 생각보도 쉽지 않다. 왜냐하면 break문을 두번이나 써야하기 때문이다.

한번 여러분이 한번 짜보다가 생각이 안나면 필자의 코드를 한번 보아라.


public class Main {
public static void main(String[] args) {
boolean sw = true;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (j == 4 && i == 4) {
sw = false;
break;
}
System.out.println(i + " X " + j + " = " + i * j);
}
if (sw == false) break;
}
}
}


만약 특정 상황에서 모든 반복문을 부수려면 이런방법을 사용하는 방법이있다.

그러나 자바에서는 더 좋은 방법을 제공해준다. 이것이 바로 레이블이다.


public class Main {
public static void main(String[] args) {
gugudan:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (j == 4 && i == 4) {
break gugudan;
}
System.out.println(i + " X " + j + " = " + i * j);
}
}
}
}


label은 자신이 사용하는 반복문 앞에 원하는 이름을 적은 후 :을 붙혀준다.

그럼 레이블링이되며 그 레이블을 break로 아예 접근할 수 있다. 예시를 첨부하진 않겠지만 continue역시 마찬가지로 사용할 수 있다.

'Programming > Java' 카테고리의 다른 글

[Java-09]객체와 클래스  (0) 2017.09.30
[Java-08]배열  (0) 2017.09.30
[Java-06]switch(스위치)  (0) 2017.09.29
[Java-05]조건문  (0) 2017.09.29
[Java-04]연산자  (0) 2017.09.29

+ Recent posts