1. 조건문
- 조건의 참, 거짓에 따라서 서로 다른 작업을 수행.
- 주어진 조건을 비교 판단하여 조건에 만족할 경우 지정된 명령을 실행하고, 만족하지 않을 경우 다음 단계의 명령을 수행하도록 하는 구문.
package cond;
public class If1 {
public static void main(String[] args) {
int age = 20; // 사용자 나이
if (age >= 18) {
System.out.println("성인입니다");
}
if (age <= 18) {
System.out.println("미성년자입니다.");
}
}
}
[If1]
- if문은 특정 조건이 참인지 확인하고, 그 조건이 참(true) 일 경우 특정 코드 블록 실행.
- 문법 :
if (condition) {
// 조건이 참일 때 실행되는 코드
}
해당 코드에서 입력값이 20이므로 첫 번째 if문이 실행되어 "성인입니다"를 출력.
두 번째 if문은 조건이 거짓이므로 실행되지 않음. 따라서 화면에 출력되지 않음.
public class If2 {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("성인입니다."); // 참일 때 실행.
} else {
System.out.println("미성년자입니다."); // 만족하는 조건이 없을 때 실행.
}
}
}
[If2]
- else문은 if문에서 만족하는 조건이 없을 때 실행하는 코드.
- 문법 :
if (condition) {
// 조건이 참일 때 실행되는 코드
} else {
// 만족하는 조건이 없을 때 실행되는 코드
}
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("성인");
}
}
}
[If3]
연령에 따라 다른 메시지를 출력하는 프로그램을 작성한다고 가정하자.
int age라는 변수를 사용하고, 연령에 따라 다음의 출력을 해야 함.
- 7세 이하일 경우 : "미취학"
- 8세 이상 13세 이하일 경우 : "초등학생"
- 14세 이상 16세 이하일 경우 : "중학생"
- 17세 이상 19세 이하일 경우 : "고등학생"
- 20세 이상일 경우 : "성인"
if문을 작성해서 코드를 사용하면 위에 코드처럼 작성할 수 있음.
하지만 이 코드는 단점이 있음.
1. 불필요한 조건 검사 : 이미 조건을 만족해도 불필요한 다음 조건을 계속 검사하게 됨.
2. 코드 효율성이 떨어짐. 조건을 중복 체크하기 때문.
이런 코드에 else if를 사용하면 불필요한 조건 검사를 피하고 코드의 효율성 향상시킬 수 있음.
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("성인");
}
}
}
[If4]
- else if문은 if문을 하나씩 사용하는 것보다 중복조건 피할 수 있고, 간단하게 작성 가능.
- 문법 :
if (condition1) {
// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2가 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
- 참고로 else는 생략 가능.
package cond;
public class If5 {
public static void main(String[] args) {
int itemPrice;
itemPrice = 10000;
int age;
age = 10;
int discount = 0;
if(itemPrice >= 10000) {
discount = discount + 1000;
System.out.println("10000원 이상 구매 시, 1000원 할인");
}
if(age <= 10) {
discount = discount + 1000;
System.out.println("어린이 1000원 할인");
}
System.out.println("총 할인 금액 : " + discount + "원");
}
}
[If5]
if문에 여러 조건이 있다고 항상 if-else로 묶어서 사용할 수 있는 것은 아님. 조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우 else if문을 사용하면 안 되고, 대신 여러 if문을 분리해서 사용해야 함. 여러 독립적인 조건을 검사해야 하는 경우가 그런 상황의 대표적인 예시임. 즉 각 조건이 다른 조건과 연관 되지 않고, 각각의 조건에 대해 별도의 작업을 수행해야 할 때 이런 상황이 발생.
예제 통해 자세히 알아보자.
- 문제 : 온라인 쇼핑몰의 할인 시스템을 개발해야 함. 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인 금액이 달라질 수 있음. 각각의 할인 조건은 다음과 같음.
- 조건 : 아이템 가격이 10000원 이상일 때, 1000원 할인.
나이가 10살 이하일 때 1000원 할인.
- 이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인 받을 수 있다는 점.
이 코드에서 각각 독립된 if문을 사용하면 해당하는 모든 할인을 적용할 수 있음.
package cond;
public class If6 {
public static void main(String[] args) {
int itemPrice;
itemPrice = 10000;
int age;
age = 10;
int discount = 0;
if(itemPrice >= 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 + "원");
}
}
[If6]
else if문을 사용하면 첫번째로 충족되는 조건인 1000원 할인만 적용되고, if문을 빠져나옴.
따라서 사용자는 나머지 할인을 놓치게 됨.
▶ if문을 각각 사용할지, if와 else if를 함께 묶어서 사용할지는 요구사항에 따라 다르므로, 둘의 차이를 이해하고 적절하게 사용하면 됨.
package cond;
public class Switch1 {
public static void main(String[] args) {
int grade = 1;
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);
}
}
[Switch1]
- switch문을 사용하기 전 if문을 사용했을 때 나타내는 방법.
package cond;
public class Switch2 {
public static void main(String[] args) {
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);
}
}
[Switch2]
- if문을 switch문으로 바꿔서 표현.
- switch문은 앞에서 배운 if문을 조금 더 편리하게 사용할 수 있는 기능.
- 문법 :
switch (조건식) {
case value1 :
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2 :
// 조건식의 결과 값이 value2 일 때 실행되는 코드
break;
default :
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
- 조건식의 결과값이 어떤 case의 값과 일치하면 해당 case의 코드를 실행.
- break 문은 현재 실행 중인 코드를 끝내고 switch 문을 빠져나가게 하는 역할.
- break 문이 없으면 일치하는 case 이후의 모든 case 코드들이 순서대로 실행.
- default는 조건식의 결괏값이 모든 case의 값과 일치하지 않을 때 실행. (= if문의 else와 같음)
package cond;
public class Switch3 {
public static void main(String[] args) {
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);
/*
case 2에는 break가 없기 때문에 중단하지 않고 다음에 있는 case 3의 코드를 실행.
*/
}
}
[Switch3]
- break문이 없으면 case2를 실행 후 case3을 실행하게 됨.
If문 vs switch문
- switch문의 조건식을 넣는 부분에는 x > 10과 같은 참, 거짓의 결과가 나오는 조건이 아닌, 단순히 값만 넣을 수 있음!
- switch문은 조건식이 특정 case와 같은지만 체크할 수 있음. 즉, 값이 같은지 확인하는 연산만 가능함. (문자도 가능)
- 반면 if문은 참, 거짓의 결과가 나오는 조건식을 자유롭게 적을 수 있음. ex) x > 10, x == 10 ...
package cond;
public class Switch4 {
public static void main(String[] args) {
// 자바14의 새로운 switch문
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰 : " + coupon);
}
}
[Switch4]
▶ 자바 14 새로운 switch문
- 기존 switch문과 다르게 ->를 사용하고, 선택된 데이터를 반환할 수 있음.
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);
}
}
[CondOp1]
이 예제는 참과 거짓에 따라 status의 변수 값이 달라짐.
이렇게 단순히 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ? : 연산자 사용하는 것이 편함.
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);
}
}
[CondOp2]
*삼항연산자*
- 문법 : (조건) ? 참_표현식 : 거짓_표현식
- 삼항 연산자는 항이 3개라는 뜻.
- 조건, 참_표현식, 거짓_표현식 이렇게 항이 총 3개.
1-1. 조건식 예제
[ScoreEx]
- 점수는 변수 int score로 지정하고, 해당 변수를 기반으로 학점 출력하기.
- 출력 예시
score : 95
출력 : 학점은 A입니다.score : 85 출력 : 학점은 B입니다.
score : 75 출력 : 학점은 C입니다.
score : 65 출력 : 학점은 D입니다.
score : 55 출력 : 학점은 F입니다.
package cond.ex;
public class ScoreEx {
public static void main(String[] args) {
int score = 85;
if (score >= 90) {
System.out.println("학점은 A입니다.");
} else if (score >= 80 && score < 90) {
System.out.println("학점은 B입니다.");
} else if (score >= 70 && score < 80) {
System.out.println("학점은 C입니다.");
} else if (score >= 60 && score < 70) {
System.out.println("학점은 D입니다.");
} else {
System.out.println("학점은 F입니다.");
}
}
}
[DistanceEx]
- 거리는 변수 int distance로 지정하고, 해당 변수를 기반으로 운송 수단 출력.
- 출력 예시 :
distance : 1
출력 : 도보를 이용하세요.
distance : 5
출력 : 자전거를 이용하세요.
distance : 25
출력 : 자동차를 이용하세요.
distance : 150
출력 : 비행기를 이용하세요.
package cond.ex;
public class DistanceEx {
public static void main(String[] args) {
int distance = 25;
if (distance <= 1) {
System.out.println("도보를 이용하세요.");
} else if (distance <= 10) {
System.out.println("자전거를 이용하세요.");
} else if (distance <= 100) {
System.out.println("자동차를 이용하세요.");
} else {
System.out.println("비행기를 이용하세요.");
}
}
}
[ExchangeRateEx]
- 특정 금액을 미국 달러에서 한국 원으로 변환하는 프로그램 작성.
- 환율은 1달러당 1300원이라고 가정.
- 다음과 같은 기준 따름
- 달러가 0미만이면 : "잘못된 금액입니다."
- 달러가 0일 때 ; "환전할 금액이 없습니다."
- 달러가 0 초과일 때 : "환전 금액은 (계산된 원화 금액)원입니다."
- 금액은 변수 int dollor로 지정하고, 해당 변수를 기반으로 한국 원으로의 환전 금액 출력.
- 출력 예시 :
dollar : -5
출력 : 잘못된 금액입니다.
dollar : 0
출력 : 환전할 금액이 없습니다.
dollar : 10
출력 : 환전할 금액은 13000원입니다.
package cond.ex;
public class ExchangeRateEx {
public static void main(String[] args) {
int dollor = 20;
int won = dollor * 1300;
if (dollor < 0) {
System.out.println("잘못된 금액입니다.");
} else if (dollor == 0) {
System.out.println("환전할 금액이 없습니다.");
} else if (dollor > 0) {
System.out.println("환전 금액은 " + won + "원입니다.");
}
}
}
[MovieRateEx]
- 요청한 평점 이상의 영화를 찾아서 추천하는 프로그램 작성
• 어바웃타임 : 평점9
• 토이 스토리 : 평점8
• 고질라 : 평점7
- 평점 변수는 double rating을 사용. if문 활용해서 문제 풀기.
- 출력 예시 :
rating: 9
출력:
어바웃타임'을 추천합니다.
rating: 8
출력:
'어바웃타임'을 추천합니다.
'토이 스토리'를 추천합니다.
rating: 7.1
출력:
'어바웃타임'을 추천합니다.
'토이 스토리'를 추천합니다.
rating: 7
출력:
'어바웃타임'을 추천합니다.
'토이 스토리'를 추천합니다.
'고질라'를 추천합니다.
package cond.ex;
public class MovieRateEx {
public static void main(String[] args) {
double rating = 7.1;
if (rating <= 9) {
System.out.println("'어바웃타임'을 추천합니다.");
}
if (rating <= 8) {
System.out.println("'토이 스토리'를 추천합니다.");
}
if (rating <= 7) {
System.out.println("'고질라'를 추천합니다.");
}
}
}
[GradeSwitchEx]
- String grade라는 문자열 만들고, 학점에 따른 성취도를 출력하는 프로그램 작성.
- 각 학점은 다름과 같은 성취도를 나타냄.
• "A" : "탁월한 성과입니다!"
• "B" : "좋은 성과입니다!"
• "C" : "준수한 성과입니다!"
• "D" : "향상이 필요합니다."
• "F" : "불합격입니다."
• 나머지 : "잘못된 학점입니다."
- 출력 예시 :
grade : "B"
출력 : "좋은 성과입니다!"
grade : "A"
출력 : "탁월한 성과입니다!"
grade : "F"
출력 : "불합격입니다."
package cond.ex;
public class GradeSwitchEx {
public static void main(String[] args) {
String grade = "B";
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]
두 개의 정수 변수 a와 b를 가지고 있음.
a는 10, b는 20일 때 삼항 연산자를 사용하여 두 숫자 중 더 큰 숫자를 출력하는 코드 작성.
- 출력 예시 : 더 큰 숫자는 20입니다.
package cond.ex;
public class CondOpEx {
public static void main(String[] args) {
int a, b;
a = 10;
b = 20;
int result = (a > b) ? a : b;
System.out.println("더 큰 숫자는 " + result + "입니다.");
}
}
[EvenOddEx]
정수 x가 주어지면 x가 짝수일 때 "짝수"를, x가 홀수이면 "홀수"를 출력하는 프로그램 작성.
삼항 연산자를 사용해야 함.
참고로 x % 2를 사용하면 홀수, 짝수를 쉽게 계산할 수 있음.
- 출력 예시 :
x : 2
출력 : x = 2, 짝수
x : 3
출력 : x = 3, 홀수
package cond.ex;
public class EvenOddEx {
public static void main(String[] args) {
int x = 2;
String result = (x % 2 == 0) ? "짝수" : "홀수";
System.out.println("x = " + x + ", " + result);
}
}
'Studying > JAVA' 카테고리의 다른 글
[JAVA]_Casting(형변환) (0) | 2024.12.03 |
---|---|
[JAVA]_Scope(스코프) (0) | 2024.12.03 |
[JAVA]_Loop Statement(반복문) (0) | 2024.12.03 |
[JAVA]_Operator(연산자) (1) | 2024.11.26 |
[JAVA]_Variable(변수) (0) | 2024.11.23 |