특정 조건에 따라서 다른 코드를 실행하는 것을 조건문이라 한다.
조건문에는 `if`문, `switch`문이 있다. 둘 다 특정 조건에 따라서 다른 코드를 실행하는 것이라 생각하면 된다.
if문
if
`if`문은 특정 조건이 참인지 확인하고, 그 조건이 참(`true`)일 경우 특정 코드 블록을 실행한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
}
코드 블록 : `{}`(중괄호) 사이에 있는 코드
else
`else`문은 `if`문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
} else {
// 만족하는 조건이 없을 때 실행되는 코드
}
else if
`else if`문은 앞선 `if`문의 조건이 거짓일 때 다음 조건을 검사한다. 만약 앞선 `if`문이 참이라면 `else if`를 실행하지 않는다.
if (condition1) {
// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2이 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
쉽게 이야기해서 이렇게 전체 `if`문을 하나로 묶는다고 보면 된다. 이렇게 하면 특정 조건이 만족하면 해당 코드를 실행하고 `if`문 전체를 빠져나온다. 특정 조건을 만족하지 않으면 다음 조건을 검사한다.
여기서 핵심은 순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 되는 것이다.
`else`는 생략할 수 있다.
if문 {} 중괄호 생략
다음과 같이 `if`문 다음에 실행할 명령이 하나만 있을 경우에는 `{}` 중괄호를 생략할 수 있다. `else if`, `else`도 마찬가지이다.
if (true)
System.out.println("if문에서 실행됨");
다음과 같은 경우에는 두 번째 문장은 `if`문과 무관하다. 만약 둘 다 `if`문 안에 포함하려면 `{}`를 사용해야 한다.
if (true)
System.out.println("if문에서 실행됨");
System.out.println("if문에서 실행 안됨");
일반적으로 `if`문의 명령이 한 개만 있을 경우에도 다음과 같은 이유로 중괄호를 사용하는 것이 좋다.
- 가독성 : 중괄호를 사용하면 코드를 더 읽기 쉽게 만들어 준다. 조건문의 범위가 명확하게 표시되므로 코드의 흐름 을 더 쉽게 이해할 수 있다.
- 유지보수성 : 중괄호를 사용하면 나중에 코드를 수정할 때 오류를 덜 발생시킬 수 있다. 예를 들어, `if`문에 또 다른 코드를 추가하려고 할 때, 중괄호가 없으면 이 코드가 `if` 문의 일부라는 것이 명확하지 않을 수 있다.
switch문
`if`문은 비교 연산자를 사용할 수 있지만, `switch`문은 단순히 값이 같은지만 비교할 수 있다.
`switch`문은 조건식에 해당하는 특정 값으로 실행할 코드를 선택한다.
switch (조건식) {
case value1:
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2:
// 조건식의 결과 값이 value2일 때 실행되는 코드
break;
default:
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
- 조건식의 결과 값이 어떤 `case`의 값과 일치하면 해당 `case`의 코드를 실행한다.
- `break` 문은 현재 실행 중인 코드를 끝내고 `switch`문을 빠져나가게 하는 역할을 한다.
- 만약 `break`문이 없으면, 일치하는 `case` 이후의 모든 `case` 코드들이 순서대로 실행된다.
- `default`는 조건식의 결과 값이 모든 `case`의 값과 일치하지 않을 때 실행된다. `if`문의 `else`와 같다. `default` 구문은 선택이다.
- `if`, `else-if`, `else` 구조와 동일하다.
if문 vs switch문
`switch`문의 조건식을 넣는 부분을 보면 `x > 10`과 같은 참 거짓의 결과가 나오는 조건이 아니라, 단순히 값만 넣을 수 있다. `switch`문은 조건식이 특정 `case`와 같은지만 체크할 수 있다. (문자도 가능)
반면에 `if`문은 참 거짓의 결과가 나오는 조건식을 자유롭게 적을 수 있다. 예) `x > 10`, `x ==10`
정리하자면 `switch`문 없이 `if`문만 사용해도 된다. 하지만 특정 값에 따라 코드를 실행할 때는 `switch`문을 사용하면 `if`문보다 간결한 코드를 작성할 수 있다.
자바 14 새로운 switch문
`switch`문은 `if`문보다 조금 덜 복잡한 것 같지만, 그래도 코드가 기대보다 깔끔하게 나오지는 않는다. 이런 문제를 해결하고자 자바 14부터는 새로운 `switch`문이 정식 도입되었다.
기존 `switch`문
package cond;
public class Switch2 {
public static void main(String[] args) {
//grade 1:1000, 2:2000, 3:3000, 나머지: 500
int grade = 2;
int coupon;
switch (grade) {
case 1:
coupon = 1000;
break;
case 2:
coupon = 2000;
break;
case 3:
coupon = 3000;
break;
default:
coupon = 500;
}
System.out.println("발급받은 쿠폰 " + coupon);
}
}
새로운 `switch`문
package cond;
public class Switch3 {
public static void main(String[] args) {
//grade 1:1000, 2:2000, 3:3000, 나머지: 500
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰 " + coupon);
}
}
기존 `switch`문과 차이는 다음과 같다.
- `->`를 사용한다.
- 선택된 데이터를 반환할 수 있다.
삼항 연산자
`if`문을 사용할 때 다음과 같이 단순히 참과 거짓에 따라 특정 값을 구하는 경우가 있다.
package cond;
public class CondOp1 {
public static void main(String[] args) {
int age = 18;
String status;
if (age >= 18) {
status = "성인";
} else {
status = "미성년자";
}
System.out.println("age = " + age + " status = " + status);
}
}
이렇게 단순히 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 `? : ` 연산자를 사용할 수 있다. 이 연산자를 사용하면 `if`문과 비교해서 코드를 단순화할 수 있다.
package cond;
public class CondOp2 {
public static void main(String[] args) {
int age = 18;
String status = (age >= 18) ? "성인" : "미성년자";
System.out.println("age = " + age + " status = " + status);
}
}
삼항 연산자
(조건) ? 참_표현식 : 거짓_표현식
- 삼항 연산자는 항이 3개라는 뜻이다. `조건`, `참_표현식`, `거짓_표현식` 이렇게 항이 3개이다. 자바에서 유일하게 항이 3개인 연산자여서 삼항 연산자라 한다. 또는 특정 조건에 따라 결과가 나오기 때문에 조건 연산자라고도 한다.\
- 조건에 만족하면 `참_표현식`이 실행되고, 조건에 만족하지 않으면 `거짓_표현식`이 실행된다. 앞의 `if`, `else`문과 유사하다.
- `if`문처럼 코드 블록을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있다.
삼항 연산자없이 `if` 문만 사용해도 된다.하지만 단순히 참과 거짓에 따라서 특정 값을 구하는 삼항 연산자를 사용하면 `if`문 보다 간결한 코드를 작성할 수 있다.
'Java' 카테고리의 다른 글
[Java/김영한] 스코프, 형변환 (0) | 2024.08.13 |
---|---|
[Java/김영한] 반복문 (0) | 2024.08.12 |
[Java/김영한] 연산자 (0) | 2024.08.12 |
[Java/김영한] 변수 (0) | 2024.08.11 |
[Java/김영한] Hello World (0) | 2024.08.11 |