Java - 논리연산자 및 조건식( if문 기초)

2020. 6. 13. 17:00Java

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
 
public class Ex {
 
    public static void main(String[] args) {
        /*
         * 논리연산자(&, |, !, ^)
         * - boolean 타입 피연산자에 대한 논리적인 판별을 수행하는 연산자
         * 
         * 1. AND 연산자(&, &&) = 논리곱 => A && B
         *    - 두 피연산자가 모두 true 일 때 결과값이 true, 하나라도 false 이면 false
         *    - F AND F = F, F AND T = F, T AND F = F, T AND T = T 
         * 
         * 2. OR 연산자(|, ||) = 논리합  => A || B
         *    - 두 피연산자 중 하나라도 true 이면 결과값이 true, 둘 다 false 이면 false
         *    - F OR F = F, F OR T = T, T OR F = T, T OR T = T 
         *    
         * 3. NOT 연산자(!) = 논리부정   => !A
         *    - 단항연산자이므로, 피연산자 1개에 대해 연산을 적용
         *    - 현재 피연산자 값을 반대로 반전시킴
         *      => true 일 때 false, false 일 때 true
         *      
         * 4. XOR 연산자(^) = 배타적(exclusive) OR = 배타적 논리합   => A ^ B
         *    - 두 피연산자가 다르면 true, 같으면 false
         *    - F XOR F = F, F XOR T = T, T XOR F = T, T XOR T = F
         *    
         */
        
        boolean a = false, b = true;
        
        System.out.println(a && a);
        System.out.println(a && b);
        System.out.println(b && a);
        System.out.println(b && b);
        
        System.out.println("--------");
        
        System.out.println(a || a);
        System.out.println(a || b);
        System.out.println(b || a);
        System.out.println(b || b);
        
        System.out.println("--------");
        
        System.out.println(!a); // a 가 false 이므로 true 출력
        System.out.println(!b); // b 가 true 이므로 false 출력
            
        System.out.println("--------");
        
        System.out.println(a ^ a);
        System.out.println(a ^ b);
        System.out.println(b ^ a);
        System.out.println(b ^ b);
        
        System.out.println("==============================");
        
        // 논리연산자는 주로 관계연산자 등의 다른 연산들과 조합해서 사용
        int num1 = 30, num2 = 20;
        
        // 1. num1 이 10 보다 크거나 같고, 20보다 작거나 같은지 판별
        System.out.println(num1 >= 10); // num1 이 10보다 크거나 같은가
        System.out.println(num1 <= 20); // num1 이 20보다 작거나 같은가
        // 위의 두 문장을 논리연산자를 사용하여 하나의 문장으로 결합할 수 있음
        // AND 연산자 : ~이면서, ~이고, 그리고 등의 단어를 사용
        System.out.println(num1 >= 10 && num1 <= 20);
        
        System.out.println("------------------------");
        
        // 2. num2 가 10보다 작거나, 15보다 큰지 판별
        System.out.println(num2 < 10); // num2 가 10보다 작은가
        System.out.println(num2 > 15); // num2 가 15보다 큰가
        // 위의 두 문장을 논리연산자를 사용하여 하나의 문장으로 결합할 수 있음
        // OR 연산자 : ~하거나, 또는 등의 단어를 사용
        System.out.println(num2 < 10 || num2 > 15);
        
        System.out.println("------------------------");
        // 3. num2 가 10보다 작거나, 15보다 크면 false, 아니면 true
        System.out.println(!(num2 < 10 || num2 > 15));
        
 
/*
         * 조건문
         * - 조건식 결과에 따라 실행할 문장이 달라지는 문
         * - if문 계열과 switch ~ case 문으로 구분됨
         * 
         * 1. if문
         *    - 가장 단순한 조건문
         *    - 조건식 판별 결과가 true 일 때 특정 문장(블록)을 추가로 실행하는 if문
         * 
         * < 기본 문법 >
         * 문장1;
         * 
         * if(조건식) {
         *         // 조건식 판별 결과가 true 일 때 실행할 문장들...
         *         문장2; 
         * }
         * 
         * 문장3;
         * 
         * => 조건식 판별 결과가 true 일 때 : 문장1 -> 조건식(true) -> 문장2 -> 문장3
         * => 조건식 판별 결과가 false 일 때 : 문장1 -> 조건식(false) -> 문장3
         * 
         */
 
        System.out.println("프로그램 시작!"); // 문장1
        int num = 4;
        
        if(num < 5) { // 조건식
            // 이 블록 내의 문장(또는 문장들)은 num 이 5보다 작을 때(true 일 때)만 실행됨
            System.out.println("num 이 5보다 작다!"); // 문장2
        }
        
        System.out.println("프로그램 종료!"); // 문장3
        
        System.out.println("---------------------------");
        
        // num2 의 절대값을 계산하여 출력
        int num2 = -5;
        
        // num2 가 음수일 때 다시 음수 부호(-)를 붙여서 양수로 변환
        if(num2 < 0) {
            num2 = -num2;
        }
 
        System.out.println("num2 의 절대값 : " + num2);
        
        System.out.println("---------------------------");
        
        System.out.println("아이티윌로 걸어서 출발!");
        
        int money = 3000;
        
        // 만약, 돈(money)이 5천원 이상일 경우 "택시타고 가기!" 출력
        if(money >= 5000) {
            System.out.println("택시 타고 가기!");
        }
        
        // 만약, 돈(money)이 5천원 미만일 경우 "버스타고 가기!" 출력
        if(money < 5000) {
            System.out.println("버스 타고 가기!");
        }
        
        System.out.println("아이티윌에 도착!");
        
 
 
/*
         * 2. if ~ else 문
         * - 특정 조건식 판별 결과가 true 일 때와 false 일 때 서로 다른 블록을 실행
         * - 삼항연산자와 유사한 형태로 수행되나 삼항연산자보다 유연함
         * 
         * < 기본 문법 >
         * 문장1;
         * 
         * if(조건식) {
         *         문장2; // 조건식 결과가 true 일 때 수행할 문장들...
         * } else {
         *         문장3; // 조건식 결과가 false 일 때 수행할 문장들...
         * }
         * 
         * 문장4;
         * 
         */
        
        // num 의 절대값을 계산하여 출력
        int num = 5;
        
        // num 이 음수일 때 절대값 계산
        if(num < 0) {
            System.out.println("num 이 음수이므로 양수로 변환");
            num = -num;
        } else { // num 이 양수일 때 절대값 계산 없이 출력문만 실행
            System.out.println("num 이 양수이므로 변환 필요없음!");
        }
 
        System.out.println("num 의 절대값 : " + num);
        
        System.out.println("------------------------------------");
        
        // 정수 num 에 대해 홀수, 짝수 판별
        if(num % 2 == 1) {
            System.out.println(num + " = 홀수!");
        } else {
            System.out.println(num + " = 짝수!");
        }
        
        System.out.println("=====================================");
        
        boolean powerStatus = true;
        
        // 전원(powerStatus)이 켜져 있을 때(true) "전원이 켜져 있습니다!" 출력
        // 전원(powerStatus)이 꺼져 있을 때(false) "전원이 꺼져 있습니다!" 출력
        if(powerStatus == true) {
            System.out.println("전원이 켜져 있습니다!");
        } else {
            System.out.println("전원이 꺼져 있습니다!");
        }
        
        // boolean 타입 변수를 if 문 등의 조건문에 사용 시 true 일 때라는 식을 작성할 경우
        // 동등비교연산자를 사용하지 않고 boolean 타입 변수만 조건식에 명시해도
        // true 조건식과 동일한 결과로 실행됨
        if(powerStatus) { // powerStatus == true 와 동일
            System.out.println("전원이 켜져 있습니다!");
        } else {
            System.out.println("전원이 꺼져 있습니다!");
        }
        
        if(!powerStatus) { // powerStatus == false 와 동일
            System.out.println("전원이 꺼져 있습니다!");
        } else {
            System.out.println("전원이 켜져 있습니다!");
        }
 
    // 논리연산자의 활용
        // 1. 나이(age) 를 입력받아 20대 판별
        // => 20대란? 나이(age)가 20살 이상이고, 29살 이하
        //            (나이(age)가 19살 초과이고, 30살 미만)
        int age = 20;
        boolean result = age >= 20 && age <= 29;
        System.out.println(age + " 은(는) 20대입니까? " + result);
        
        System.out.println("-------------------------------------");
        
        // 2. 나이(age) 를 입력받아 놀이동산 무료입장 여부 판별
        // => 무료입장 대상 : 나이(age)가 5세 미만이거나 65세 이상
        age = 3;
        result = age < 5 || age >= 65;
        System.out.println(age + " 은(는) 무료입장 대상입니까? " + result);
        
 
// 1. 문자 ch 가 대문자일 때 "대문자!" 출력, 아니면 "대문자 아님!" 출력
        char ch = 'T';
 
        if (ch >= 'A' && ch <= 'Z') { // 대문자 판별 = ch >= 65 && ch <= 90 와 동일
            System.out.println(ch + " : 대문자!");
        } else {
            System.out.println(ch + " : 대문자 아님!");
        }
 
        // 2. 문자 ch 가 소문자일 때 대문자로 변환하여 출력하고
        // 아니면 그대로 출력
        // ex) ch = 'r' 일 때 'R' 출력, ch = 'A' 일 때 'A' 출력
        // 힌트. 소문자와 대문자의 아스키코드값 차이는 32 이다!
        // (소문자 -> 대문자로 변환 시 아스키코드값에서 32 만큼 빼야함)
        if (ch >= 'a' && ch <= 'z') { // 소문자 판별
            // 소문자일 때 대문자로 변환하기 위해서 ch 값을 32 만큼 감소시킴
//            ch = (char)(ch - 32); // char - int = int 이므로 char 타입으로 형변환 필요
            ch -= 32// 형변환 필요없음
//            System.out.println("소문자 -> 대문자 변환 후 : " + ch);
        } else {
//            System.out.println("변환되지 않은 문자 : " + ch);
        }
 
        // if문과 else 문에서 출력문이 중복되므로 if문 판별 종료 후 출력문을 작성하면 중복 제거
        System.out.println(ch);
 
 
    }
 
}
 
 
cs

전에 배웠던 연산자에 이어 논리 연산자를 마저 배우고, 조건식에 입문을 시작하였다. 논리 연산자는 2진수로 계산하게 될 때가 조금 헷갈리는 부분이 있었고, 점점 프로그래밍적인 연산과정에 익숙해지고 있는 것 같다고 느끼게 되었다. 그리고 가장 많이 활용하게 된다는 조건식 if 문에 입문하게 되었다. if문 자체는 대학교 때 C언어를 배우면서 조금 알고 있던 게 있었고 익숙하게 느껴져서 시작을 어렵게 시작하지는 않았지만 복잡해질수록 어렵게 다가오는 부분도 있었다. 어떤 문제가 있을 때 어느 부분에서 활용을 해야 할지 잘 생각해서 써야 할 거 같고 조건식을 깊게 생각해서 코딩을 해야겠다고 느꼈다. 다양하게 활용이 가능하기 때문에 좀 더 기초를 확실히 다져놓고 넘어가야 하는 부분이라고 생각이 들었다. 간단한 테스트도 해보면서 if문을 배워가니 더 깊게 다가오고 좋은 것 같다.