◻️ DAY-05
◻️ 항과 연산자
- 연산에 사용하는 기호를
연산자(Operater)
, 연산에 사용하는 값을 항(Operand)
이라고 한다. - 예를 들어
3 + 4
에서 3
과 4
는 항이고 +
는 연산자이다. - 연산자는 항의 개수에 따라
단항
, 이항
, 삼항
연산자로 나눌 수 있다.
연산자 | 설명 | 예시 |
---|
단항 연산자 | 항이 한 개인 연산자 | ++num |
이항 연산자 | 항이 두 개인 연산자 | num1 + num2 |
삼항 연산자 | 항이 세 개인 연산자 | (5 > 3) ? 1 : 0; |
◻️ 대입 연산자
대입 연산자(assignment operator)
는 변수에 값을 대입하는 연산자를 말한다.- 이항 연산자 중 우선순위가 가장 낮은 연산자이다.
- 프로그래밍에서 가장 많이 사용하는 연산자이다.
1
2
3
| int age = 24; // 나이를 의미하는 age 변수에 값 24를 대입함
totalScore = mathScore + engScore; // (1) mathScore 값과 engScore값을 더하여
// (2) totalSchore 변수에 대입함
|
대입 연산자를 기준으로 왼쪽 변수를 lValue(left value)
, 오른쪽 변수를 rValue(right value)
라고 한다. 항상 rValue
값을 가져와서 lValue
값에 대입하는 것을 알 수 있다. 따라서 값이 대입되는 lValue
에는 3, 10 같은 숫자가 올 수 없고 항상 변수
나 상수
가 와야한다. rValue
에는 변수나 숫자(상수)가 올 수 있다.
◻️ 부호 연산자
1
2
3
4
5
6
7
8
| int num = 10;
System.out.println(+num); // 값 10이 그대로 출력됨
System.out.println(-num); // -10이 출력되지만 num 값이 실제로 바뀌진 않음
System.out.println(num); // 값 10이 그대로 출력됨
num = -num; // num 값을 음수로 바꾸어 다시 num에 대입됨
System.out.println(num); // 값 -10이 출력됨
|
◻️ 산술 연산자
연산자 | 기능 | 예시 |
---|
+ | 두 항을 더한다 | 5 + 3 |
- | 앞 항에서 뒤 항을 뺀다 | 5 - 3 |
* | 두 항을 곱한다 | 5 * 3 |
/ | 두 항을 나눈다 | 5 / 3 |
% | 앞 항에서 뒤 항을 나눈 나머지를 구한다 | 5 % 3 |
◻️ % 연산자의 활용예시
학생 30명이 이오니 리조트로 여행을 갔다.
리조트에는 방이 10개 있고, 방 번호는 0 ~ 9번까지 있다.
이 때 30명의 학생이 각각 번호표를 받아 한 방에 3명씩 배정을 받는다고 하자.
이 과정을 % 연산자로 처리하면 방 번호를 쉽게 정해줄 수 있다.
어떤 학생이 가진 번호가 23번이라면 23 % 10 = 3 으로 계산하여 3번 방을 배정해준다.
방 번호는 0 ~ 9, 즉 10이란 수의 나머지 중 하나가 되므로
% 연산자를 사용해 0 ~ 9 사이의 방을 배정하는 것이다.
이렇게 일정 범위 안의 수를 사용해야 할 때 %연산자를 유용하게 쓸 수 있다.
1
2
3
4
5
6
7
8
| ex) 0번방: 10, 20, 30번 학생
ex) 1번방: 1, 11, 21번 학생
ex) 2번방: 2, 12, 22번 학생
ex) 3번방: 3, 13, 33번 학생
.
.
.
ex) 9번방: 9, 19, 29번 학생
|
◻️ 산술 연산자를 사용하여 총점과 평균 구하기(1)
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
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 총점과 평균 구하기(1)
package section_03.operator;
public class operator1_3 {
public static void main(String[] args) {
int mathScore = 90;
int engScore = 70;
int totalScore = mathScore + engScore;
System.out.println(totalScore); // 총점 구하기
double avgScore = totalScore / 2.0; // 평균 구하기
System.out.println(avgScore);
}
}
|
◻️ 산술 연산자를 사용하여 총점과 평균 구하기(2)
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
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 총점과 평균 구하기(2)
// Q. 국어점수를 의미하는 korScore 변수를 추가하고, 국어점수까지 포함한 총점과 평균점수를 구해보세요
package section_03.operator;
public class operator1_4 {
public static void main(String[] args) {
int mathScore = 50;
int engScore = 65;
int korScore = 90;
int totalScore = mathScore + engScore + korScore;
System.out.println("총점은: " + totalScore);
double avgScore = totalScore / 3.0;
System.out.println("평균은: " + avgScore);
} //main
} //class
|
◻️ 증감 연산자
- 연산자 앞이나 뒤에 사용하여 값을 1만큼 늘리거나 1만큼 줄이는
단항 연산자
- 자주 사용되는 연산자이다
연산 | 기능 | 예시 |
---|
++ | 먼저 num 값이 1 증가한 후 val 변수에 대입 | val = ++num; |
| val 변수에 기존 num 값을 먼저 대입한 뒤 num값 1 증가 | val = num++; |
– | 먼저 num 값이 1 감소한 후 val 변수에 대입 | val = –num; |
| val 변수에 기존 num 값을 먼저 대입한 뒤 num값 1 감소 | val = num–; |
증감연산자 코드실습(1)
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
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 증감연산자 (++) (--)
package section_03.operator;
public class operator1_5 {
public static void main(String[] args) {
int gameScore = 150; // 게임에서 획득한 점수는 150점임
int lastScore1 = ++gameScore; // 먼저 gameScore에 1을 더한 뒤 lastScore1에 대입
System.out.println(lastScore1); // 151
int lastScore2 = --gameScore; // 먼저 gameScore에서 1을 뺀 뒤 lastScore2에 대입
System.out.println(lastScore2); // 150
int gameScore2 = 140;
int lastScore3 = gameScore2++;
int lastScore4 = gameScore2--;
int lastScore5 = gameScore2--;
System.out.println(lastScore3); // 140, 문장이 끝난 뒤 141이 됨
System.out.println(lastScore4); // 141, 문장이 끝난 뒤 140이 됨
System.out.println(lastScore5); // 140, 문장이 끝난 뒤 139가 됨
}
}
|
증감연산자 코드실습(2)
1
2
3
4
5
| int value1 = 10;
int num = ++value1; //num에 11이 대입됨
int value2 = 10;
int num = value2++; //num에 10이 대입됨
|
◻️ 관계 연산자
- 항이 두 개인
이항 연산자
- 두 개의 항 중 어느 것이 더 큰지, 작은지, 같은지 여부를 검사한다
- 결과값은
참(true)
, 거짓(false)
로 반환된다 - 관계 연산자를 사용할 때는 대입할 값에 괄호
( )
를 이용해 가독성을 높여주자
연산 | 기능 | 예시 |
---|
> | 왼쪽 항이 크면 참, 아니면 거짓 | num > 3 |
< | 오른쪽 항이 크면 참, 아니면 거짓 | num < 3 |
>= | 왼쪽 항이 크거나 같으면 참, 아니면 거짓 | num >= 3 |
<= | 오른쪽 항이 크거나 같으면 참, 아니면 거짓 | num <= 3 |
== | 두 항의 값이 같으면 참, 아니면 거짓 | num == 3 |
!= | 두 항의 값이 다르면 참, 아니면 거짓 | num != 3 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 관계 연산자(true, false)
package section_03.operator;
public class operator1_6 {
public static void main(String[] args) {
int myAge = 30;
boolean vaule = (myAge > 25); // 괄호를 사용하는 이유는 가독성이 좋은 코드를 만들기 위함
System.out.println(vaule);
}
}
|
◻️ 논리 연산자
- 두 명제가 모두 참이면 논리 곱은 참이고, 두 명제 중 하나만 참이면 논리합은 참이다
- 참의 부정은 거짓, 거짓의 부정은 참이다
논리연산자
는 관계연산자
와 함께 사용한다관계연산자
의 우선순위가 논리연산자
보다 높으므로, 관계연산자
의 결과값을 기반으로 논리연산자
결과값을 계산한다
연산자 | 기능 | 예시 |
---|
&&(논리곱) | 두 항이 모두 참인 경우에만 참 | boolean val = (5 > 3) && (5 > 2); |
ll(논리합) | 두 항 중 하나라도 참이면 참 | boolean val = (5 > 3) ll (5 > 2); |
!(부정) | 참인 경우 거짓, 거짓인 경우 참 | boolean val = !(5 > 3); |
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
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 관계 연산자(true, false)
package section_03.operator;
public class operator1_6 {
public static void main(String[] args) {
int myAge = 30;
boolean value = (myAge > 25); // 괄호를 사용하는 이유는 가독성이 좋은 코드를 만들기 위함
System.out.println(value);
boolean val = (5 > 2) && (5 < 3); // 논리곱, 둘 다 참이어야 참
boolean val2 = (5 > 2) || (5 < 3); // 논리합, 둘 중 하나만 참이어도 참
boolean val3 = !(5 > 2); // 부정, 참이면 거짓, 거짓이면 참
System.out.println(val);
System.out.println(val2);
System.out.println(val3);
}
}
|
◻️ 논리 연산자- 단락 회로 평가
- 논리 연산에서 모든 항이 실행되지 않는 경우를 살펴본다
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
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 논리 연산 - 단락 회로 평가(모든 항이 실행되지 않는 경우)
package section_03.operator;
public class operator1_7 {
public static void main(String[] args) {
int num1 = 10;
int i = 2;
boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10); // 앞 항의 결과가 거짓이므로 이 문장은 실행되지 않는다
System.out.println(value); // false 출력
System.out.println(num1); // 문장이 실행되지 않았으므로 num1 값 그대로 출력
System.out.println(i); // 문장이 실행되지 않았으므로 i값 그대로 출력
int num2 = 10;
int i2 = 2;
boolean value2 = ((num2 = num2 + 3) > 10) || ((i2 = i2 + 2) > 10); // 둘 둥 앞 항의 결과가 참이므로 이 문장은 실행됨
System.out.println(value2); // true 출력
System.out.println(num2); // 문장이 실행되었으므로 num2 = 13(참)
System.out.println(i2); // 문장이 실행되었으므로 i2 값 그대로 출력(거짓)
}
}
|
예제(1)- 단락 회로 평가에 주의하여 출력 결과를 예상해보세요
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
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// Q. 다음 예제에서 단락 회로 평가에 주의하여 출력 결과를 예상해보세요!
package section_03.operator;
public class operator1_8 {
public static void main(String[] args) {
int num = 5;
int i = 10;
boolean value = ((num = num * 10) > 45) || ((i = i - 5) < 10); // 논리합, 둘 중 하나라도 참이면 참
System.out.println(value); // 앞 항의 결과가 참이므로 true 출력(뒤 항은 살펴볼 필요가 없어 실행조차 되지 않음)
System.out.println(num); // 예상값: 50
System.out.println(i); // 예상값: 10
}
}
|
◻️ 복합 대입 연산자
대입연산자
와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자산술연산자
, 비트연산자
와 함께 사용하여 코드를 간결하게 표현할 수 있다num1 = num1 + num2;
라고 써야 하는 코드가 있다면 num1 += num2;
로 쓰는 것이 훨씬 간결하다
연산자 | 기능 | 예시 | 결과 |
---|
+= | 두 항의 값을 더해서 왼쪽 항에 대입 | num1 += 2; | num1 = num1 + 2;와 같음 |
-= | 왼쪽 항에서 오른쪽 항을 뺀 뒤 왼쪽 항에 대입 | num1 -= 2; | num1 = num1 - 2;와 같음 |
*= | 두 항의 값을 곱해서 왼쪽 항에 대입 | num1 *= 2; | num1 = num1 * 2;와 같음 |
/= | 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입 | num1 /= 2; | num1 = num1 / 2;와 같음 |
%= | 왼쪽 항을 오른쪽 항으로 나눈 나머지값을 왼쪽 항에 대입 | num1 %= 2; | num1 = num1 % 2;와 같음 |
«= | 비트를 왼쪽으로 이동 후 그 값을 왼쪽 항에 대입 | num1 «= 2; | num1 = num1 « 2;와 같음 |
»= | 비트를 오른쪽으로 이동 후 그 값을 왼쪽 항에 대입 | num1 »= 2; | num1 = num1 » 2;와 같음 |
»>= | 비트를 오른쪽으로 이동 후 그 값을 왼쪽 항에 대입 | num1 »>= 2; | num1 = num1 »> 2;와 같음 |
&= | 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입 | num1 &= num2; | num1 = num1 & num2;와 같음 |
l= | 두 항의 l비트 연산 후 그 값을 왼쪽 항에 대입 | num1 l= num2; | num1 = num1 l num2;와 같음 |
^= | 두 항의 ^비트 연산 후 그 값을 왼쪽 항에 대입 | num1 ^= num2; | num1 = num1 ^ num2;와 같음 |
◻️ 조건 연산자
- 연산에 필요한 개수가 세 개 이므로
삼항연산자
라고 한다 - 조건 연산은 주어진 조건식이 참인 경우와 거짓인 경우에 다른 결과값이 나온다
연산자 | 기능 | 예시 |
---|
조건식 ? 결과1 : 결과2; | 조건식이 참이면 결과1, 거짓이면 결과2가 선택됨 | int num = (5 > 3)? 10 : 20; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 조건 연산자(삼항 연산자)
package section_03.operator;
public class operator1_9 {
public static void main(String[] args) {
int fatherAge = 55;
int motherAge = 50;
char ch;
ch = (fatherAge > motherAge) ? 'T' : 'F';
System.out.println(ch);
}
}
|
예제(1)- 조건 연산자를 사용하여 10이 짝수인 경우엔 T, 그렇지 않으면 F을 출력하도록 코드를 작성하세요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| /*
* Date: 2021-05-11
* Author: Yon Kim
* Project: [자바 초보탈출 30일]
* Section: 05일차
* Subject: "기본 연산자"
*/
// 조건 연산자(삼항 연산자)
package section_03.operator;
public class operator1_9 {
public static void main(String[] args) {
int num = 10;
boolean isEven;
isEven = (num % 2) == 0? true : false; // num을 2로 나눈 나머지가 0인 경우 true 출력
System.out.println(isEven);
}
}
|