조건문과 반복문은 어떻게 사용할까?
조건문
--
조건문은
명시한 조건이 true 또는 false에 따라 명령어(코드) 실행 여부를 결정하는 문법이다.
대표적인 조건문 종류
- if문, else if문
- switch문
if문
명시한 조건식이 true라면 해당 블록에 존재하는 명령어들을 수행하고
false라면 그냥 무시하고 다음 코드로 넘어간다.
if(조건식) {
조건이 참(ture)일 때 수행할 명령어
}
if(a > 10) {
System.out.println("a는 10초과"); // a는 10보다 크면 해당 명령어 수행
}
if(a > 10) {
System.out.println("a는 10초과");
} else {
System.out.println("a는 10이하"); // a는 10보다 크지 않으면 해당 명령어 수행
}
if(a > 10) {
System.out.println("a는 10초과");
} else if(a > 5) {
System.out.println("a는 10이하면서 5초과"); // a는 10보다 크지 않으면서 5보다 크면 해당 명령어 수행
} else if(a > 0) {
System.out.println("a는 5이하면서 0초과"); // a는 10보다 크지 않고 5보다 크지 않고 0보다 크면 해당 명령어 수행
} else {
System.out.println("a는 0이하"); // a는 10보다 크지 않고 5보다 크지 않고 0보다 크지 않으면 해당 명령어 수행
}
else if()는
앞에 작성한 조건식들이 모두 false면서 해당 조건문은 true일 때 수행할 명령어 명시
else는
앞에 작성한 조건식들이 false일 때 수행할 명령어 명시
참고
- 조건문이 true면 수행할 블록 안의 명령어가 한 줄(하나)뿐이라면 블록{} 기호 생략 가능
switch문
단일 값(변수) or 리터럴(정수, 문자, 문자열 등) or 상수 or 조건문()을 명시하여
해당 값과 동일한 값인 case문을 찾아 해당 case문에 작성된 명령어를 수행한다.
(명시한 값과 case 값들을 같은지 비교하여 true인 case문을 수행한다.)
(조건문의 결과값은 반드시 정수 또는 문자열이어야 한다.)
switch (값) {
case 비교할 값:
수행할 명령어
[break;]
case 비교할 값:
수행할 명령어
[break;]
[default:
수행할 명령어
]
}
String str = "Hello";
switch (str) {
case "Hi":
System.out.println("str은 Hi문자열");
break;
case "Hello":
System.out.println("str은 Hello문자열"); // 해당 명령어 수행
break; // switch문을 빠져나옴
case "World":
System.out.println("str은 World문자열");
break;
default:
System.out.println("str은 Hi, Hello, World가 아니다.");
}
명시한 값(str)과 동일한 값인 case문을 찾아 명령어 수행
명령어 수행 중 break문을 만나면 현재 switch문 탈출한다. (switch문 수행 끝)
만약 동일한 case문이 없다면 default에 명시한 명령어 수행
switch (x + y) {
case 1:
System.out.println(x);
break;
case 2:
case 3: // x + y의 값이 2 또는 3인 경우
System.out.println(x);
break;
case 4: case 5: // x + y의 값이 4 또는 5인 경우
System.out.println(x);
break;
}
case문을 중첩하여 사용할 수도 있다.
참고
- break문과 default문은 생략할 수 있다.
- break문을 생략하면 현재 case문의 다음 case문도 수행한다.
(다음 break문을 만날 때까지 or 끝까지 case문, default문을 이어서 순차대로 수행한다.)
--
반복문
--
반복문은
명시한 작업을 여러 번 반복하여 실행하기 위한 문법이다.
대표적인 반복문 종류
- for문
- while문, do-while문
for문
조건식이 true인 동안 계속 반복하여 수행한다.
for(초기값; 조건식; 증가식) {
수행할 명령어
}
for(int i = 1; i < 5; i++) {
System.out.println(i);
}
순서
- 초기값 확인
- 조건식이 true인지 확인 (false면 for문 탈출)
- true면 해당 명령어 수행
- 증가값 수행
- 2번부터 4번까지 계속 반복...
초기값, 조건식, 증가식 모두 생략 가능하다.
(다만 따로 명시해야 정상적인 동작이 가능하다.)
int i = 0; for (; i < 5; i++) { System.out.println(i); }
for (int i = 0; ; i++) { System.out.println(i); if (i == 5) break; // 반복문을 종료하기 위한 조건을 내부에 추가 } /* 조건식이 없기때문에 따로 break문을 통해 탈출할 조건을 명시하지 않으면 무한 루프에 빠지게 된다. */
for (int i = 0; i < 5;) { System.out.println(i); i++; // 증가식을 반복문 내부에서 수동으로 처리 }
참고
- if문처럼 수행할 명령어가 한 줄(하나)뿐이라면 블록{} 기호 생략 가능
향상된 for문 ( for-each문 )
배열 or 컬렉션(List, Set 등)의 모든 내용을 임시 변수에 순서대로 하나씩 대입하여 끝까지 반복한다.
(모든 내용을 한 번씩 대입하여 싹 훑는 느낌)
for(변수 : 배열or컬렉션) {
수행할 명령어
}
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
배열 numbers의 인덱스 0부터 끝까지 변수 num에 대입하면서 반복 명령어 수행
num에 1 대입하여 명령어 수행
num에 2 대입하여 명령어 수행
...
num에 5 대입하여 명령어 수행
for문 탈출(종료)
while문
명시한 조건식이 true인 동안 계속 반복 수행한다.
while(조건문) {
수행할 명령어
}
int i = 1;
while(i <= 10){
System.out.println(i);
i++;
}
!!!!주의!!!!
반복하는 동안 조건식이 false가 될 수 있도록 탈출할 수 있는 조건이 필요하다. (ex i++)
없으면 무한 반복으로 "스택오버플로우" 발생
do-while문
while문과 동일하지만 조건식에 상관없이 무조건 처음에 한 번은 실행한다는 차이가 있다.
(우선 한 번 실행하고 나서 while문 수행하는 느낌)
do {
수행할 명령어
} while (조건식)
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
--
break, continue
--
break은
해당(현재) 반복문 or 조건문을 즉시 탈출(종료)하는 명령어다.
continue는
현재 위치에서 다음 문장(명령어)으로 넘어가지 않고 즉시 반복문의 처음으로 돌아간다.
(현재 진행하는 명령어에서 더 이상 밑에 작성된 명령어는 무시하고 반복 한 번을 끝낸 느낌)
--
label
--
라벨(label)은
주로 반복문 or 특정 블록에 라벨을 붙여 제어할 때 사용된다.
라벨을 이용하여 특정 반복문을 탈출(종료)하거나 흐름을 제어할 수 있다.
반복문 or 특정 블록에 라벨을 명시하면
break 또는 continue문을 이용하여 제어할 수 있다.
test1: // 해당 for문에 라벨 선언
for(int i = 0; i < 5; i++){
test2: // 해당 for문에 라벨 선언
for(int j = 0; j < 10; j++){
if(j == 3) {
break test1; // 라벨 test1이 명시된 반복문을 탈출
}
}
}
/*
test1:
for(int i = 0; i ....)
와
test1: for(int i = 0; i ....)
는 동일
만약 break;만 사용했다면
현재 위치인 for(int j = 0; j < 10; j++) 반복문을 탈출하고 이어서 for(int i = 0; i < 5; i++) 반복문을 수행하겠지만
break test1;로 탈출할 반복문을 직접 명시하여 for(int i = 0; i < 5; i++) 반복문을 탈출한다.
// 일반 블록에 라벨을 사용한 예시
outerBlock: {
System.out.println("Before break");
if (true) {
break outerBlock; // 해당 블록을 빠져나감
}
System.out.println("This will not print");
}
System.out.println("After block");
--
'Language > Java' 카테고리의 다른 글
배열(Arrays 클래스) 관련 메서드 정리 (0) | 2024.10.11 |
---|---|
배열 (+ 다차원 배열) (0) | 2024.10.10 |
[연산자] 비교, 논리, 그 외의 연산자 (+ instanceof) (0) | 2024.10.05 |
[변수] 변수와 상수 (+ 타입, 진법, 형변환) (0) | 2024.09.22 |
자바 기본 규칙 (0) | 2024.09.21 |