1. 조건문
조건문이란 말 그대로 주어진 조건에 따라 다른 문장을 선택할 수 있도록 프로그래밍을 하는 것이다.
이 조건문의 가장 단순한 형식은 if문과 if-else문이 있다.
1) if문
if를 우리말로 해석하면 '만약 ~이라면'이다.
if문을 사용하는 형태를 간단히 나타내면 아래와 같다.
int age = 10;
if (age >= 8) {
System.out.println("학교에 다닙니다");
}
위에서 if문 뒤에 붙는 조건식이 참일 경우에는 중괄호 안에 있는 문장을 수행하게 된다.
2) if-else문
그런데 조건을 만족하지 않는 경우에도 값을 출력하고 싶다면 else문을 뒤에 붙인다.
이 else문은 if문의 조건식이 거짓일 경우를 출력하기 때문에 따로 조건식을 붙이지 않는다.
int age = 10;
if (age >= 8) {
System.out.println("학교에 다닙니다");
}
else {
System.out.println("학교에 다니지 않습니다")
}
위의 문을 활용하여 아래의 예재를 만들어보았다.
package ifexample;
public class IfExample1 {
public static void main(String[] args) {
char gender = 'F';
if (gender == 'F') {
System.out.println("여성입니다");
}
else {
System.out.println("남성입니다");
}
}
}
// '여성입니다'의 값이 출력
3) if-else if-else문
지금까지는 어떤 상황에서 하나의 조건을 만족하는 경우와 그렇지 않은 경우를 살펴보았다.
그런데 하나의 상황에 조건이 여러 개인 경우는 if-else if-else문으로 표현할 수 있다.
예를 들어 놀이 공원 입장료를 계산할 때 8세 미만은 1,000원, 14세 미만은 2,000원, 20살 미만은 2,500원, 그 이상은 3,000원이라는 조건이 있을 때 이렇게 표현할 수 있는 것이다.
이 때 조건식은 나이와 가격을 선언한 뒤 나이가 8세 미만인지, 14세 미만인지, 20세 미만인지를 구분하고 모든 조건식에서 거짓이 나오면 3,000원을 부과하면 된다.
if-else if-else문에서는 하나의 조건을 만족하면 이후 조건은 비교하지 않는다.
아래의 예제를 살펴보자.
package ifexample;
public class IfExample2 {
public static void main(String[] args) {
int age = 9;
int charge;
if(age < 8) {
charge = 1000;
System.out.println("취학 전 아동입니다.");
}
else if(age < 14) {
charge = 2000;
System.out.println("초등학생입니다.");
}
else if(age < 20) {
charge = 2500;
System.out.println("중고등학생입니다.");
}
else {
charge = 3000;
System.out.print("성인입니다.");
}
System.out.println("입장료는" + charge + "원입니다.");
}
}
그런데 만약 if문만 사용해서도 코드를 만들 수 있지 않을까?
package ifexample;
public class IfExample2 {
public static void main(String[] args) {
int age = 9;
int charge;
if(age < 8) {
charge = 1000;
System.out.println("취학 전 아동입니다.");
}
if(age < 14) {
charge = 2000;
System.out.println("초등학생입니다.");
}
if(age < 20) {
charge = 2500;
System.out.println("중고등학생입니다.");
}
else {
charge = 3000;
System.out.print("성인입니다.");
}
System.out.println("입장료는" + charge + "원입니다.");
}
}
이렇게 프로그램을 실행하면 결과가 이상하게 나온다. 왜냐하면 else문에서 값이 조건문에 해당하면 이후 조건문은 확인하지 않지만 if문만 사용한 이 코드에서는 모든 조건문에 값이 대입하는 지 확인하기 때문에 14세미만과 20세미만 모두의 결과 값을 도출한다.
그렇기에 성별과 같이 개별 조건을 비교할 때는 if문을 따로 사용해야하지만 동일 조건으로 구분하는 때에는 if-else if문을 사용해야한다.
** 나 혼자 코딩 연습 : 성적에 따라 학점 부여하기
> 성적에 따라 학점을 부여하는 프로그램을 만들어보세요.
> 100~90점은 A, 89~80점은 B, 79~70점은 C, 69~60점은 D, 나머지는 F이다.
package ifexample;
public class IfExample3 {
public static void main(String[] args) {
int score = 60;
char grade;
if(score > 89) {
grade = 'A';
System.out.println(score);
}
else if(score > 79) {
grade = 'B';
System.out.println(score);
}
else if(score > 69) {
grade = 'C';
System.out.println(score);
}
else if(score > 59) {
grade = 'D';
System.out.println(score);
}
else {
grade = 'F';
System.out.println(score);
}
System.out.println("귀하의 2022년도 1학기 성적은 "+ grade +" 학점입니다.");
}
}
// 교수님이 재수강도 못하게 60점을 주셨다.. 악..마...
2. 조건문과 조건 연산자
if-else문은 조건 연산자로도 구현할 수 있다.
아무래도 if-else문으로 구현한 코드가 가독성이 더 좋지만 간단한 조건문이고 선택이 두 가지만 있는 경우에는 종종 조건 연산자도 사용한다.
예시, grade = (score >= 90) ? A : B;
3. switch-case문
조건문을 구현할 때 if문을 사용하면 번거로운 경우가 있다.
예를 들어 경기에 참가한 선수의 순위에 따라 메달 색을 정하는 프로그램을 생각해보자.이 때 조건은 선수의 순위가 된다.
switch-case문의 장점은 코드가 깔끔하고 가독성이 좋다는 것이다.그리고 여러 문장이 있어도 {}를 여러 번 사용하지 않고 ~break;로 조건을 구분한다.
break문은 switch-case문의 수행을 멈추고 빠져나가도록 만든다.
if-else if-else문의 마지막 else문이 switch-case문에서는 default문과 같은 역할을 한다.하지만 default문은 생략할 수도 있다.
그러나 switch-case문은 조건이 복잡한 식으로 이루어진다면 사용하기 부적절하다.등수처럼 대상을 하나의 값으로 조건을 비교할 수 있을 때 사용하게 된다.아래의 예제를 함께 봐보자.
package ifexample;
public class SwitchCase {
public static void main(String[] args) {
int ranking = 1;
char medalColor;
switch(ranking) {
case 1 : medalColor = 'G';
break;
case 2 : medalColor = 'S';
break;
case 3 : medalColor = 'B';
break;
default : medalColor = 'A';
}
System.out.println(ranking + "등 메달의 색깔은 " + medalColor + " 입니다.");
}
}
* case문 동시에 사용하기
case문은 여러 경우를 동시에 처리할 때도 자주 사용한다.
각 달의 날짜를 출력하는 예제를 생각해보자.
1,3,5,7,8,10,12월은 31일.
4,6,9,11월은 30일.
2월은 편의상 28일까지로 한다.
그러면 아래와 같이 case문을 쓸 것이다.
case 1 : day = 31;
break;
case 2 : day = 28;
break;
case 3 : day = 31;
break;
case 4 : day = 30;
break;
case 5 : day = 31;
break;
...
case 12 : day = 31;
break;
그런데 코드를 유심히 살펴보면 case는 달라도 수행문이 같은 경우가 반복이 된다.
이럴 경우에는 case문을 동시에 사용할 수 있다.
case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : day = 31;
break;
case 4 : case 6 : case 9 : case 11 : day = 30;
break;
case 2 : day = 28;
break;
** switch-case문에서 break문의 역할
만약 break문을 쓰지 않고 프로그램을 실행하면 결과값이 어떻게 될까?
case 1의 조건식에 결과값이 포함되더라도 break문이 없기 때문에 마지막까지 모두 수행이 되어서 default의 값이 출력되게 된다.
즉 break문을 사용해서 각 조건을 만족시킬 때 이후 조건문은 수행하지 않도록 해주어야 한다.
*** case문에 문자열 사용하기
자바 7부터는 switch-case문의 case 값에 정수 값뿐 아니라 문자열도 사용할 수 있다.
꼭 case 1,2,3,4,5라는 정수만 사용하여야 하는 것이 아니라 'Gold'라는 문자를 사용하여도 가능하다는 뜻이다.
'⁂ Java > : 독학으로 공부하기(과거)' 카테고리의 다른 글
[java] #4-1 객체, 클래스, 패키지 (0) | 2022.07.04 |
---|---|
[java] #3-2 반복문 : 제어 흐름 이해하기 (0) | 2022.07.03 |
[java] #2-2 비트 연산자 (0) | 2022.07.01 |
[java] #2-1 자바의 기본 연산자 (0) | 2022.06.30 |
[java] #1-3 상수와 리터럴 (0) | 2022.06.30 |