조건문 - if, switch
Theme. if문
먼저, 아래 코드를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
|
package test;
public class MainClass {
public static void main(String[] args) {
int number = 7;
if (number > 0 ) {
System.out.println("number는 0보다 큽니다.");
}
}
}
|
cs |
결과는, "number는 0보다 큽니다."이다.
이제 형식을 알아보자.
1
2
3
4
5
6
|
if (조건식) {
조건식이 참(true)일 때 수행될 문장들을 적는다.
}
|
cs |
가장 기본적인 조건문답게, '조건식', '괄호{ }', '조건식이 참(true)일 때 수행될 문장'으로 구성되어 있다.
'조건식이 참(true)일 때 수행될 문장'이라는 말을 통해 조건식이 거짓(false)일 때는 문장이 수행되지 않음을 알 수 있다.
조건식
조건식을 세울 때, 일반적으로 비교연산자와 논리연산자로 구성된다.
잠시, 비교연산자와 논리연산자를 포함한 연산자에 대해 간단히 알아보자.
cf. 연산자의 종류
1) 산술 연산자
사칙 연산자: +, -, *, /
%: 피연산자를 연산자로 나누고 난 나머지 값( 몫은 /을 통해서 구함)
2) 비교 연산자
대소비교 연산자: < > <= >=
등가비교 연사자: ==(같다) !=(같지 않다)
3) 논리 연산자
&& (AND 결합) , || (OR 결합), !(true와 false를 바꿈)
(자세한 설명은 다른 글에!!)
if문을 사용하여 간단한 코드들을 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package test;
public class MainClass {
public static void main(String[] args) {
int number = 7;
if (number > 0 ) {
System.out.println("number는 0보다 큽니다."); // true
}
if (number == 7) {
System.out.println("number는 7입니다."); // true
}
if (number < 6 ) {
System.out.println("number는 6보다 작습니다."); // false
}
if (number > 0 && number <= 10) {
System.out.println("number는 0보다 크고 10보다 작거나 같습니다."); // true
}
if (number > 0 || number <= 10) {
System.out.println("number는 0보다 크거나 10보다 작거나 같습니다."); // true
}
// true false
if (number > 0 || number <= 5) {
System.out.println("number는 0보다 크거나 5보다 작거나 같습니다."); // true
}
}
}
|
cs |
< Console >
추가적으로 코드를 작성해보면,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package test;
public class MainClass {
public static void main(String[] args) {
boolean b = true;
if(b == true) {
System.out.println("b == true 입니다.");
}
if(b) {
System.out.println("b == true 입니다.");
}
b = false;
if(b == false) {
System.out.println("b == false 입니다.");
}
if(!b) {
System.out.println("b == false 입니다.");
}
// 조건문에서 조건에 문자열 비교가 있다면 주의해라. //
String str1 = "worl";
str1 = str1 + "d";
System.out.println("str1 = " + str1);
// 이 식으로 world를 만들고 아래 조건문 돌리면 안돌아감
if (str1 == "world") {
System.out.println("str1 은 world 입니다.");
}
// 따라서, 문자열 비교하는 조건문 쓸 때는 equals를 이용해라!
if (str1.equals("world") == true) {
System.out.println("str1(equals 쓴) 은 world 입니다.");
}
}
}
|
cs |
Theme. if - else문
먼저, 아래의 코드를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package test;
public class MainClass {
public static void main(String[] args) {
int count = 8;
if (count < 6) {
System.out.println("count는 6보다 작습니다."); // 조건식이 true일 때
}
else {
System.out.println("count는 6보다 크거나 같습니다."); // 조건식이 false일 때
}
}
}
|
cs |
결과는, "count는 6보다 크거나 같습니다." 이다.
이제 형식을 알아보자.
1)
1
2
3
4
5
6
7
8
9
10
|
if (조건식) {
조건식이 참(true)일 때 수행될 문장들을 적는다.
}
else (조건식) {
조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
|
cs |
2)
1
2
3
4
5
6
7
8
9
10
|
if (조건식) {
조건식이 참(true)일 때 수행될 문장들을 적는다.
} else (조건식) {
조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
|
cs |
if문과의 차이점은 'else블럭'을 추가함으로써 조건식이 거짓(false)일 때 수행될 문장을 적을 수 있다는 것
1) 2) 형식 모두 동일한 결과를 가져온다
if - else문을 통한 코드를 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package test;
public class MainClass {
public static void main(String[] args) {
char c = 'A';
if(c == 'a') {
System.out.println("c는 'a'입니다.");
}
else {
System.out.println("c는 'a'가 아닙니다.");
}
}
}
|
cs |
결과는 "c는 'a'가 아닙니다." 이다.
cf. if - else문과 삼항 연산자
위의 결과와 동일한 코드를 삼항 연산자를 이용하여 작성해보면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
|
package test;
public class MainClass {
public static void main(String[] args) {
char c = 'A';
String str = (c == 'a') ? "c는 'a'입니다." : "c는 'a'가 아닙니다.";
System.out.println(str);
}
}
|
cs |
Theme. if - else if문
if - else문은 조건식이 참(true) 또는 거짓(false)인 경우 두 가지중 하나가 수행되는 구조인데,
이는 처리하고 싶은 경우가 셋 이상인 경우에는 적용할 수 없는 단점이 있다.
이때, 여러 개의 조건식을 적을 수 있는 'if - else if'문을 사용하면 된다.
형식에 대해 알아보자
1
2
3
4
5
6
7
8
9
10
|
if (조건식1) {
조건식1이 참일 때 수행될 문장들을 적는다.
} else if (조건식2) { // 조건식 1이 거짓일 때 조건식 2의 else if 문으로!
조건식2이 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
조건식3이 참일 때 수행될 문장들을 적는다.
} else { // 마지막엔 보통 else 블럭으로 끝나는데, 생략도 가능하다.
어떠한 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
|
cs |
이제 if - else if문을 이용하여 코드를 작성해보자.
Q. 점수를 입력하도록 하고, 점수가 속한 범위에 따라 학점을 출력하는 코드를 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package test;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score;
System.out.print("score = ");
score = sc.nextInt();
if (score >= 90) {
System.out.println("A 학점입니다.");
} else if (score >= 80) {
System.out.println("B 학점입니다.");
} else if (score >= 70) {
System.out.println("C 학점입니다.");
} else {
System.out.println("재시험입니다.");
}
}
}
|
cs |
75점을 입력했을 때, 결과는 아래와 같다.
55점을 입력했을 때, 결과는
Theme. Switch문
if문과 달리 switch문은 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 알아보기 쉽다.
즉, 처리할 경우의 수가 많은 경우 switch문의 장점이 부각될 수 있다.
switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에 있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 된다.
이제 형식을 알아보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
switch( 조건식 ) {
case 값1:
조건식의 결과가 값1과 같을 경우 수행될 문장들
break;
case 값2:
조건식의 결과가 값2과 같을 경우 수행될 문장들
break; // switch문을 벗어난다.
//...
default:
조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
|
cs |
switch문의 제약조건
1) switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2) case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
switch문을 이용한 코드를 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
int choice;
choice = 2;
switch ( choice ) {
case 1:
System.out.println("처리1 입니다.");
break;
case 2:
System.out.println("처리2 입니다.");
break;
case 3:
System.out.println("처리3 입니다.");
break;
case 4:
System.out.println("처리4 입니다.");
break;
default:
System.out.println("1 ~ 3이 아닙니다.");
}
// break;를 생략하게 되면, 어떻게 될까?
/*
switch ( choice ) {
case 1:
System.out.println("처리1 입니다.");
break;
case 2:
System.out.println("처리2 입니다.");
break;
case 3:
System.out.println("처리3 입니다.");
break;
default:
System.out.println("1 ~ 3이 아닙니다.");
}
case 1, case 3의 break; 코드를 생략해도 결과는 올바르게 나온 것처럼 보인다. 하지만,
case 2의 break; 코드를 생략하게 되면, 일단 처리2 입니다는 실행이 되고,
그 다음부터 처리해야 하는 것들은 break을 발견할 때까지 처리가 되어 버린다.
즉, console 결과가
처리2 입니다.
처리3 입니다.
이렇게 나온다.
당연히 break;을 case마다 써야 하고, 처리가 되는 case 부분에서의 break;을 안쓰게 되면
그 다음 case들이 break;을 만날 때까지 다 처리가 되어 버린다.
|
cs |
결과는 "처리2 입니다." 가 나온다.
끝.