제어문
프로그램의 흐름을 바꾸는 역할을 하는 문장들을 제어문control statement이라고 한다.
정상적인 코드 실행 흐름
: main() 메소드의 시작인 중괄호 { 에서 끝 } 까지 위-아래 방향으로 실행
제어문의 역할
코드 실행 흐름을 개발자가 원하는 방향으로 변경할 수 있도록 돕는다.
제어문의 종류
조건문: if문, switch문
반복문: for문, while문, do-while문
break문, continue문
제어문의 중첩
제어문의 중괄호 내부에 다른 제어문 작성 가능
- 다양한 흐름 발생 가능
조건문
: if, switch
조건문은 조건식과 문장을 포함하는 블럭 { } 으로 구성되어 있으며, 조건식의 연산 결과에 따라 실행할 문장이 달라져서 프로그램의 실행흐름을 변경할 수 있다. 조건문은 if문과 switch문이 있으며 주로 if문이 사용된다. 처리할 경우의 수가 많을 경우에는 switch문을 쓰지만 이것은 if문보다 제약이 많다.
if문
가장 기본적인 조건문이며 조건식과 괄호 { }로 이루어져 있다.
if의 뜻이 '만일 ~ 이라면 ... 이다.' 이므로 "만일if 조건식이 참true이면 괄호 안의 문장들을 수행하라" 이다.
= 조건식 결과에 따라 중괄호 블록을 실행할지 여부를 결정할 때 사용하낟.
조건식
true 혹은 false 값을 산출할 수 있는 연산식
boolean 변수
조건식이 참이면 블록 실행하고 거짓이면 블록 실행하지 않는다.
if ( 조건식 ) {
실행문;
실행문;
}
* 주의
등가비교 연산자 == 대신 대입 연산자 = 를 사용하는 실수가 많이 발생한다.
예를 들어 'x가 0일 때 참'인 조건식은 'x==0' 인데 'x=10'으로 잘못 적는 경우가 있다.
if-else문
if 문에 else블럭이 더 추가된 형태이다.
if 조건식의 결과가 참이 아닐 때, 즉 거짓일 때 else 블럭의 문장을 수행하라는 뜻이다.
if-else if문
if-else문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리해야할 경우의 수가 셋 이상인 경우에는 어떻게 해야 하는가? 그럴 때는 한 문장에 여러 개의 조건식을 쓸 수 있는 if-else if문을 사용하면 된다.
중첩 if문
if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능하다.
중첩 횟수에는 거의 제한이 없다.
if(조건식 1) {
// 조건식 1의 연산 결과가 참일 때 수행될 문장들을 적는다.
} if(조건식 2) {
// 조건식 1과 조건식 2가 모두 참일 때 수행될 문장들
} else {
// 조건식 1이 참이고, 조선식 2가 거짓일 때 수행되는 문장들
} else {
// 조건식 1이 거짓일 때 수행되는 문장들
}
내부의 if 문은 외부의 if 문보다 안쪽으로 들여쓰기를 해서 두 if문의 범위가 명확히 구분될 수 있도록 작성해야 한다.
중첩 if문에서는 괄호 { } 의 생략에 더욱 조심해야 한다.
바깥쪽의 if문과 안쪽의 if문이 서로 엉켜 의도한 바와 다르게 형성될 수 있기 때문이다.
switch문
하나의 조건식으로 많은 경우의 수를 처리할 수 있고 표현이 간결하여 알아보기 쉽다. 단, 제약 조건이 있다.
조건식을 먼저 계산한 다음 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에 있는 문장들을 수행하며, break문을 만나면 전체 switch문으로 빠져나가게 된다.
* switch문도 중첩이 가능하다. 단, break문을 빠뜨리지 않게 주의하여야 한다.
= 변수나 연산식의 값에 따라 실행문을 선택할 때 사용한다.
1. 조건식을 계산한다.
2. 조건식의 결과와 일치하는 case문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
switch문의 제약 조건
1. 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
break: 깨뜨리다.
어디서 걸리든 현재의 블록을 깨뜨려라.
Switch문에서 break를 만나면 Switch를 끝내라는 의미가 된다.
1 ~ 5번 케이스까지 나오지 않으면 default값이 나오게 된다.
default 구문은 무조건 붙이는 것이 아니라 실행 문장이 없으면 생략할 수도 있다.
default의 순서가 바뀌어도 된다.
단, 이처럼 맨 마지막 순서에 왔을 때에는 break를 생략해도 마지막 순서인데다 } 를 만나 끝나버리기 때문에 생략해도 된다. 그러나 맨 앞이나 중간 등 다른 순서에 있을 때에는 break를 넣어주어야만 한다.
break를 생략하였을 때의 모습.
Switch Expression
새로운 switch문은 더 간결하고 읽기 수비다. 또한 break문에 대한 필요성을 제거한다.
코드 실행은 첫번째 일치 이후에 이루어지지 않는다.
또 다른 주목할 만한 차이점은 switch문을 변수에 직접 할당할 수 있다는 것이다. 이전에는 불가능했다.
이전 구문과 새 구문 중에서 선택할 수 있다. JAVA 12 Switch Expression은 확장일 뿐 대체가 아니다.
result 만들어놓고 왜 출력을 안 하냐고 이클립스가 불만을 제기하는 것
출력해주면 경고가 사라진다.
expression swtich문에서 복잡한 내용을 기입할 수 없으므로 중괄호를 사용할 수 없다.
expression 버전에서는
1. break가 필요가 없어졌다!
2. case, default 뒤로 : 을 쓰는 대신 -> 를 적으면 된다.
3. 중괄호를 써서 값을 되돌려 줄 수는 없다.
이 경우에는 실행문이라 가능한 중괄호이다.
참고문헌: 이것이 자바다, 자바의 정석
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍 (0) | 2022.03.14 |
---|---|
[JAVA] 제어문 - 반복문 (0) | 2022.03.13 |
[JAVA] 난수Random Number (0) | 2022.03.13 |
[JAVA] 연산자 (0) | 2022.03.13 |
[JAVA] 변수, 데이터 타입 (0) | 2022.03.13 |