조건문에는 if문, switch문, 삼항 연산자가 있다.
4-1. if문1 - if, else
if문
특정 조건이 참인지 확인하고, 그 조건(true)이 참일 경우 특정 코드 블록 실행
if (condition) { // condition = 조건
// 조건이 참일 때 실행되는 코드
}
If1.java
package cond;
public class If1 {
public static void main(String[] args) {
int age = 20; // 사용자 나이
if (age >= 18) { // true
System.out.println("성인입니다.");
}
if (age < 18) { // false
System.out.println("미성년자입니다.");
}
}
}
else문
if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공
if (condition) {
// 조건이 참일 때 실행되는 코드
} else {
// 만족하는 조건이 없을 때 실행되는 코드
}
If2.java
package cond;
public class If2 {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
}
}
4-2. if문2 - else if
If3.java
package cond;
public class If3 {
public static void main(String[] args) {
int age = 14;
if(age <= 7) { // ~7: 미취학
System.out.println("미취학");
}
if(age >= 8 && age <= 13) { // 8~13: 초등학생
System.out.println("초등학생");
}
if(age >= 14 && age <= 16) { // 14~16: 중학생
System.out.println("중학생");
}
if(age >= 17 && age <= 19) { // 17~19: 고등학생
System.out.println("고등학생");
}
if(age >= 20) { // 20~: 성인
System.out.println("성인");
}
}
}
- 불필요한 조건 검사, 코드 효율성이 떨어진다.
else if문
특정 조건을 만족하지 않으면 순서대로 맞는 조건을 검사하고, 맞는 조건 딱 1개만 실행된다.
if (condition1) {
// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2이 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
If4.java
package cond;
public class If4 {
public static void main(String[] args) {
int age = 14;
if(age <= 7) { //~7: 미취학
System.out.println("미취학");
} else if(age <= 13) { //8~13: 초등학생
System.out.println("초등학생");
} else if(age <= 16) { //14~16: 중학생
System.out.println("중학생");
} else if(age <= 19) { //17~19: 고등학생
System.out.println("고등학생");
} else { //20~: 성인
System.out.println("성인");
}
}
}
4-3. if문3 - if문과 else if문
서로 연관된 조건일 때 if문에 else if를 함께 사용한다.
서로 관련 없는 독립 조건이면 if문을 각각 따로 사용해댜한다.
If5.java
package cond;
public class If5 {
public static void main(String[] args) {
int price = 10000;
int age = 10;
int discount = 0;
if (price >= 10000) {
discount = discount + 1000;
System.out.println("10000원 이상 구매, 1000원 할인");
}
if (age <= 10) {
discount = discount + 1000;
System.out.println("어린이 1000원 할인");
}
System.out.println("총 할인 금액: " + discount + "원");
}
}
- else if문을 사용하면 아래와 같이 하나의 조건만 적용되고, if문을 빠져 나온다.
If6.java
package cond;
public class If6 {
public static void main(String[] args) {
int price = 10000;
int age = 10;
int discount = 0;
if (price >= 10000) {
discount = discount + 1000;
System.out.println("10000원 이상 구매, 1000원 할인");
} else if (age <= 10) {
discount = discount + 1000;
System.out.println("어린이 1000원 할인");
} else {
System.out.println("할인 없음");
}
System.out.println("총 할인 금액: " + discount + "원");
}
}
if문 { } 중괄호 생략
실행 코드가 한 줄일때, 코드 블록 없이 if문 실행 가능하다. => 코드 블록 생략을 권장하지 않는다.
if (true) System.out.println("if문에서 실행됨");
- 가독성: 중괄호를 사용하면 코드를 더 읽기 쉽게 만들어 준다. 조건문의 범위가 명확하게 표시되므로 코드의 흐름을 더 쉽게 이해할 수 있다.
- 유지보수성: 중괄호를 사용하면 나중에 코드를 수정할 때 오류를 덜 발생시킬 수 있다. 예를 들어, if 문에 또 다른 코드를 추가하려고 할 때, 중괄호가 없으면 이 코드가 if 문의 일부라는 것이 명확하지 않을 수 있다.
4-4. switch문
Switch1.java
package cond;
public class Switch1 {
public static void main(String[] args) {
// grade 1:1000, 2:2000, 3:3000, 나머지: 500
int grade = 2;
int coupon;
if (grade == 1) {
coupon = 1000;
} else if (grade == 2) {
coupon = 2000;
} else if (grade == 3) {
coupon = 3000;
} else {
coupon = 500;
}
System.out.println("발급받은 쿠폰 " + coupon);
}
}
switch 문
if 문은 비교 연산자 사용 가능, if문의 일부분을 switch문이 표현
switch 문은 단순히 값이 같은지만 비교 가능
조건식에 해당하는 특정 값으로 실행할 코드를 선택한다.
switch (조건식) {
case value1:
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2:
// 조건식의 결과 값이 value2일 때 실행되는 코드
break;
default:
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
- break 문은 현재 실행 중인 코드를 끝내고 switch 문을 빠져나가게 하는 역할을 한다.
- 만약 break 문이 없으면, 일치하는 case 이후의 모든 case 코드들이 순서대로 실행된다.
- default 는 조건식의 결과값이 모든 case 의 값과 일치하지 않을 때 실행된다. default 구문은 선택이다.
Switch2.java
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);
}
}
만약 break 문이 없다면?
비즈니스 요구사항이 변경되었다. 2등급도 3등급과 같이 3000원 쿠폰을 준다고 해보자.
Switch3.java
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:
coupon = 1000;
break;
case 2:
case 3:
coupon = 3000;
break;
default:
coupon = 500;
}
System.out.println("발급받은 쿠폰 " + coupon);
}
}
자바 14 새로운 switch문
기존 switch문은 if문 보다 덜 복잡한 것 같지만, 기대보다 코드가 깔끔하지 않음. => 자바14부터 새로운 switch문 도입
Switch4.java
package cond;
public class Switch4 {
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);
}
}
- -> 를 사용한다.
- 선택된 데이터를 반환할 수 있다.
4-5. 삼항 연산자
(조건) ? 참_표현식 : 거짓_표현식
CondOp1.java
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);
}
}
- 참과 거짓에 따라 status 변수의 값이 달라짐.
- 단순히 참과 거짓에 따라서 특정 값을 구하는 경우, 삼항 연산자 또는 조건 연산자라고 불리는 ?:연산자를 사용할 수 있다.
CondOp2.java
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);
}
}
- 코드를 간결하게 만들 수 있다.
4-6. 문제와 풀이1
ScoreEx.java
package cond.ex;
public class ScoreEx {
public static void main(String[] args) {
int score = 99;
String level;
if (score >= 90) {
level = "A";
} else if (score >= 80) {
level = "B";
} else if (score >= 70) {
level = "C";
} else if (score >= 60) {
level = "D";
} else {
level = "F";
}
System.out.println("학점은 "+level+"입니다.");
}
}
DistanceEx.java
package cond.ex;
public class DistanceEx {
public static void main(String[] args) {
int distance = 12;
String ride;
if (distance <= 1) {
ride = "도보";
} else if (distance <= 10) {
ride = "자전거";
} else if (distance <= 100) {
ride = "자동차";
} else {
ride = "비행기";
}
System.out.println(ride+"를 이용하세요.");
}
}
ExchangeRateEx.java
package cond.ex;
public class ExchangeRateEx {
public static void main(String[] args) {
int dollar = 20;
if (dollar < 0) {
System.out.println("잘못된 금액입니다.");
} else if (dollar == 0) {
System.out.println("환전할 금액이 없습니다.");
} else {
System.out.println("환전 금액은 "+dollar*1450+"원입니다.");
}
}
}
4-7. 문제와 풀이2
MovieRateEx.java
package cond.ex;
public class MovieRateEx {
public static void main(String[] args) {
double rating = 7.5;
if (rating <= 9) {
System.out.println("'어바웃타임'을 추천합니다.");
}
if (rating <= 8) {
System.out.println("'토이 스토리'를 추천합니다.");
}
if (rating <= 7) {
System.out.println("'고질라'를 추천합니다.");
}
}
}
GradeSwitchEx.java
package cond.ex;
public class GradeSwitchEx {
public static void main(String[] args) {
String grade = "E";
switch(grade) {
case "A":
System.out.println("탁월한 성과입니다!");
break;
case "B":
System.out.println("좋은 성과입니다!");
break;
case "C":
System.out.println("준수한 성과입니다!");
break;
case "D":
System.out.println("향상이 필요합니다.");
break;
case "F":
System.out.println("불합격입니다.");
break;
default:
System.out.println("잘못된 학점입니다.");
}
}
}
CondOpEx.java
package cond.ex;
public class CondOpEx {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println("더 큰 숫자는 "+ max +"입니다.");
}
}
EvenOddEx.java
package cond.ex;
public class EvenOddEx {
public static void main(String[] args) {
int x = 7;
String evenOdd = (x % 2 == 1) ? "홀수" : "짝수";
System.out.println("x = "+x+", "+evenOdd);
}
}
'IT > 김영한의JAVA입문_inFlearn' 카테고리의 다른 글
6. 스코프, 형변화 - 지역 변수와 스코프 / 스코프 존재 이유 / 자동 형변환 / 명시적 형변환 / 계산과 형변환 (1) | 2024.12.27 |
---|---|
5. 반복문 - while문 / do-while문 / break, continue / for문 / 중첩 반복문 / 문제와 풀이1~2 (1) | 2024.12.26 |
3. 연산자 - 산술 연산자 / 문자열 더하기 / 연산자 우선순위 / 증감 연산자 / 비교 연산자 / 논리 연산자 / 대입 연산자 (1) | 2024.12.19 |
2. 변수 - 변수 시작 / 변수 값 변경 / 선언과 초기화 / 변수 타입 / 명명 규칙 / 문제와 풀이 (1) | 2024.12.04 |
1. 자바란, (1) | 2024.11.29 |