Posts ☕️ [Java] 30일 안에 기초 떼기/ DAY-05
Post
Cancel

☕️ [Java] 30일 안에 기초 떼기/ DAY-05

◻️ DAY-05


챕터기본 연산자
3-1기본 연산자



◻️ 항과 연산자


  • 연산에 사용하는 기호를 연산자(Operater), 연산에 사용하는 값을 항(Operand) 이라고 한다.
  • 예를 들어 3 + 4에서 34는 항이고 +는 연산자이다.
  • 연산자는 항의 개수에 따라 단항, 이항, 삼항 연산자로 나눌 수 있다.
연산자설명예시
단항 연산자항이 한 개인 연산자++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);
    }
}
This post is licensed under CC BY 4.0 by the author.