조건문 시작
특정 조건에 따라서 다른 코드를 실행하는 것을 조건문이라고 한다.
조건문은 if문,switch문이 있다.
if문
if문은 특정 조건이 참인지 확인하고, 그 조건이 참(true)일 경우 특정 코드 블록을 실행한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
}
if1
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("미성년자 입니다.");
}
}
}
실행 결과
성인입니다.
코드 분석
조건이 참이므로 성인입니다.가 화면에 출력된다.
조건이 거짓이므로 if문 블록을 실행하지 않고, 빠져나온다. 따라서 미성년자입니다는 화면에 출력되지 않는다.
else문
else문은 if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
} else {
// 만족하는 조건이 없을 때 실행되는 코드
}
if2
package cond;
public class If2 {
public static void main(String[] args) {
int age = 17;
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
}
}
실행 결과
미성년자입니다.
문제
당신은 연령에 따라 다른 메시지를 출력하는 프로그램을 작성해야 한다.
이 프로그램은 int age 라는 변수를 사용해야 하며, 연령에 따라 다음의 출력을 해야 한다.
if 문을 사용해서 코드를 작성해보자.
if3
package cond;
public class If3 {
public static void main(String[] args) {
int age = 14;
if (age <= 7) {
System.out.println("미취학");
}
if (age >= 8 && age <= 13) {
System.out.println("초등학생");
}
if (age >= 14 && age <= 16) {
System.out.println("중학생");
}
if (age >= 17 && age <=19) {
System.out.println("고등학생");
}
if (age >= 20) {
System.out.println("성인");
}
}
}
실행 결과
중학생
위 코드의 단점
else if
else if문은 앞선 if문의 조건이 거짓일 때 다음 조건을 검사한다. 만약 앞선 if문이 참이라면 else if를 실행하지 않는다.
if-else 코드
if (condition1) {
// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2가 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
쉽게 이야기해서 전체 if문을 하나로 묶는다고 보면 된다.
순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 된다.
참고 :
else는 생략할 수 있다.
if4
package cond;
public class If4 {
public static void main(String[] args) {
int age = 14;
if (age <= 7) {
System.out.println("미취학");
}
else if (age <= 13) {
System.out.println("초등학생");
}
else if (age <= 16) {
System.out.println("중학생");
}
else if (age <= 19) {
System.out.println("고등학생");
}
else {
System.out.println("성인");
}
}
}
실행 결과
중학생
if문에else if를 함께 사용하는 것은 서로 연관된 조건일 때 사용한다. 그런데 서로 관련이 없는 독립 조건이면 else if를 사용하지 않고 if문을 각각 따로 사용해야 한다.
예시
// 예시1. if-else 사용: 서로 연관된 조건이어서, 하나로 묶을 때
if (condition1) {
// 작업1 수행
} else if (condition2) {
// 작업2 수행
}
// 예시2. if 각각 사용: 독립 조건일 때
if (condition1) {
// 작업1 수행
}
if (condition2) {
// 작업2 수행
}
if문에 여러 조건이 있다고 항상 if-else로 묶어서 사용할 수 있는 것은 아니다.
조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우에는 else if문을 사용하면 안되고, 대신에 여러 if문을 분리해서 사용해야 한다.
문제
온라인 쇼핑몰의 할인 시스템을 개발해야 한다. 한 사용자가 어떤 상품을 구매할 때, 다양한 할인 조건에 따라 총 할인
금액이 달라질 수 있다.
각각의 할인 조건은 다음과 같다.
이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인을 받을 수 있다는 점이다.
예를 들어, 10000원짜리 아이템을 구매할 때 1000원 할인을 받고, 동시에 나이가 10살 이하이면 추가로 1000원 더
할인을 받는다. 그래서 총 2000원 까지 할인을 받을 수 있다.
if5
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 + "원");
}
}
실행 결과
10000원 이상 구매, 1000원 할인
어린이 1000원 할인
총 할인 금액: 2000원
이 코드에서는 각각 독립된 if문이 있다. 따라서 해당하는 모든 할인을 적용한다.
만약 else if를 쓰면, 첫 번째로 충족하는 조건만 할인이 적용되고 나머지는 무시되므로, 나머지 할인을 놓칠수 있다.
문제
당신은 회원 등급에 따라 다른 쿠폰을 발급하는 프로그램을 작성해야 한다.
이 프로그램은 int grade 라는 변수를 사용하며, 회원 등급( grade )에 따라 다음의 쿠폰을 발급해야 한다.
각 쿠폰이 할당된 후에는 "발급받은 쿠폰 " + 쿠폰값 을 출력해야 한다.
Switch1
package cond;
public class Switch1 {
public static void main(String[] args) {
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);
}
}
실행 결과
발급받은 쿠폰 2000
switch문
switch문은 if문을 조금 더 편리하게 사용할 수 있는 기능이다.
참고 :
if문은 비교 연산자를 사용할 수 있지만,switch문은 단순히 값이 같은지만 비교할 수 있다.
switch (조건식) {
case value1:
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2:
// 조건식의 결과 값이 value2일 때 실행되는 코드
break;
default:
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
switch2
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;
break;
}
System.out.println("발급받은 쿠폰 " + coupon);
}
}
실행 결과
발급받은 쿠폰 2000
break 문이 없으면?
만약 break 문이 없으면 어떻게 되는지 확인하기 위해 조건을 변경해보자.
비즈니스 요구사항이 변경되었다. 2등급도 3등급과 같이 3000원 쿠폰을 준다고 해보자.
switch3
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;
break;
}
System.out.println("발급받은 쿠폰 " + coupon);
}
}
실행 결과
발급받은 쿠폰 3000
case2에 break문이 없으므로 중단하지 않고 바로case3의 코드를 실행한다. 그리고 break문을 만나서 switch문 밖으로 빠져나간다.참고:
switch문 없이if문만 사용해도 된다. 하지만 특정 값에 따라 코드를 실행할 때는 switch문을 사용하면 if문보다 간결한 코드를 작성할 수 있다.
switch4
package cond;
public class Switch4 {
public static void main(String[] args) {
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰 " + coupon);
}
}
기존 switc문과 차이점
->를 사용한다if문을 사용할 때 단순히 참과 거짓에 따라 특정 값을 구하는 경우가 있다.
CondOp1
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);
}
}
실행 결과
age = 18 status 성인
이렇게 단순히 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ?:연산자를 사용할 수 있다.
CondOp2
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);
}
}
실행 결과
age = 18 status 성인
삼항 연산자
(조건) ? 참_표현식 : 거짓_표현식
삼항 연산자는 항이 3개라는 뜻이다.조건,참_표현식,거짓_표현식 이렇게 항이 3개이다.
조건에 만족하면 참_표현식이 실행되고, 조건에 만족하지 않으면 거짓_표현식이 실행된다.
if문 처럼 코드 블럭을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있다.
삼항 연산자 없이
if문만 사용해도 되지만 단순히 참과 거짓에 따라서 특정 값을 구하는 경우에 삼항 연산자를 사용하면if문 보다 간결한 코드를 작성 할 수 있다.
문제: "학점 계산하기"
학생의 점수를 기반으로 학점을 출력하는 자바 프로그램을 작성하자. 다음과 같은 기준을 따른다.
점수는 변수( int score )로 지정하고, 해당 변수를 기반으로 학점을 출력하자
ScoreEx
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) {
System.out.println("학점은 B입니다.");
}
else if (score >= 70) {
System.out.println("학점은 C입니다.");
}
else if (score >= 60) {
System.out.println("학점은 D입니다.");
}
else {
System.out.println("학점은 F입니다.");
}
}
}
실행 결과
학점은 B입니다.
문제: "거리에 따른 운송 수단 선택하기"
주어진 거리에 따라 가장 적합한 운송 수단을 선택하는 프로그램을 작성하자. 다음과 같은 기준을 따른다.
거리는 변수( int distance )로 지정하고, 해당 변수를 기반으로 운송 수단을 출력하자.
문제 풀이
package cond.ex;
public class DistanceEx2 {
public static void main(String[] args) {
int distance = 150;
if (distance <= 1) {
System.out.println("도보");
}
else if (distance <= 10) {
System.out.println("자전거");
}
else if (distance <= 100) {
System.out.println("자동차");
}
else {
System.out.println("비행기");
}
}
}
실행 결과
비행기
문제: "환율 계산하기"
특정 금액을 미국 달러에서 한국 원으로 변환하는 프로그램을 작성하자. 환율은 1달러당 1300원이라고 가정하자. 다음
과 같은 기준을 따른다.
금액은 변수( int dollar )로 지정하고, 해당 변수를 기반으로 한국 원으로의 환전 금액을 출력하자.
문제 풀이
package cond.ex;
public class ExchangeRateEx {
public static void main(String[] args) {
int dollar = 10;
if (dollar < 0) {
System.out.println("잘못된 금액입니다.");
}
else if (dollar == 0) {
System.out.println("환전할 금액이 없습니다.");
}
else {
int won = dollar * 1300;
System.out.println("환전 금액은 " + won + "원입니다.");
}
}
}
환전 금액을 나타내기 위해 새로운 won이라는 변수를 선언해주자. 달러가 0초과일때만 출력되면 되므로 else 괄호 안에 삽입해 주자.
실행 결과
환전 금액은 13000원입니다.
문제: "평점에 따른 영화 추천하기"
요청한 평점 이상의 영화를 찾아서 추천하는 프로그램을 작성하자.
평점 변수는 double rating 을 사용하세요. if 문을 활용해서 문제를 풀자.
문제 풀이
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("'고질라'를 추천합니다.");
}
}
}
실행 결과
어바웃 타임
토이 스토리
만약 평점이 8점이상이면 평점 9점이상인 영화도 출력 값으로 나와야 하므로 if문을 사용하자
문제: "학점에 따른 성취도 출력하기"
String grade 라는 문자열을 만들고, 학점에 따라 성취도를 출력하는 프로그램을 작성하자. 각 학점은 다음과 같은
성취도를 나타낸다.
switch 문을 사용해서 문제를 해결하자.
문제 풀이
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("잘못된 학점입니다.");
break;
}
}
}
실행 결과
좋은 성과입니다.
문제: 더 큰 숫자 찾기
여러분은 두 개의 정수 변수 a 와 b 를 가지고 있다. a 의 값은 10 이고, b 의 값은 20 이다. 삼항 연산자를 사용하여
두 숫자 중 더 큰 숫자를 출력하는 코드를 작성하자.
문제 풀이
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 + "입니다.");
}
}
실행 결과
더 큰 숫자는 20입니다.
max 라는 새로운 변수를 선언하고 삼항 연산자를 사용하자
문제: 홀수 짝수 찾기
정수 x 가 주어지면 x 가 짝수이면 "짝수"를, x 가 홀수이면 "홀수"를 출력하는 프로그램을 작성하자
삼항 연산자를 사용해야 한다.
참고로 x % 2 를 사용하면 홀수, 짝수를 쉽게 계산할 수 있다.
문제 풀이
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);
}
}
실행 결과
x = 2, 짝수
"짝수","홀수"라는 글자도 출력해야 하므로 String을 입력하여 result라는 문자열을 변수 선언 해주어야 한다.
오늘은 조건문을 공부하고 정리해보았는데 그 전까지는 그냥 문법만 넣으면 되는 느낌이였는데, 조건문은 새로운 변수를 선언해주는 과정이 있는 문제들이 꽤 있어서 이 부분이 가장 햇갈렸다. 조건문을 공부하면서 느낀점은 내가 단순히 코드를 넣는 것은 나쁘지 않은 것 같은데 그 속에서 새로운 변수를 선언해서 넣는 과정이 약하다는 것을 많이 깨달았다.