호쌤
호쌤 Just For Fun

[Java] 연산자

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 연산자≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Java] 연산자

우리가 어릴적에 수학시간에 배웠던 연산에 사용되는 특수 기호들을 연산자라고 합니다. 프로그래밍 언어에서 수학의 연산자를 그대로 사용합니다. 그리고 더 다양하게 존재합니다.

#01. 대입연산자 (=)

변수에 값이나 다른 연산결과를 대입하기 위해 사용한다.

항상 우변에서 좌변으로 대입된다.

Swap.java

두 개의 변수값을 맞교환 하기.

두 변수 a와 b가 있을 때 이 두 값을 직접적으로 교환하지는 못한다.
새로운 변수 c를 등장시켜서 다음과 같이 처리해야 한다.

  1. c에 a를 복사.
  2. a에 b를 복사.
  3. b에 c를 복사.
1
2
3
4
5
6
7
8
9
10
11
12
public class Swap {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;

        // 교환
        int c = a;
        a = b;
        b = c;
        System.out.println("a=" + a + ", b=" + b);
    }
}
출력결과
1
a=2, b=1

#02. 사칙연산자 (산술연산자)

덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/, %)

1) 연산의 결과

연산 결과는 다른 변수에 대입하거나 직접 출력할 수 있다.

변수간의 연산결과를 다른 변수에 대입 후 출력

1
2
3
4
int num1 = 100;
int num2 = 200;
int result = num1 + num2;
System.out.println(result);

변수간의 연산결과를 직접 출력

1
2
3
int num1 = 100;
int num2 = 200;
System.out.println(num1 - num2);

값들간의 연산결과를 직접 출력

1
System.out.println(100 * 2)

2) 나눗셈

/ 연산자

나눗셈의 몫을 반환한다.

1
2
3
int a = 7;
int b = 3;
Sytem.out.println(a / b);  // 2가 출력됨

% 연산자

나눗셈의 나머지만 반환한다.

1
2
3
int a = 7;
int b = 3;
Sytem.out.println(a % b);  // 1이 출력됨

나눗셈의 주의사항

모든 수는 0으로 나눌 수 없다

1
2
3
int a = 10;
int b = 0;
System.out.println(a / b);
출력결과

Exception in thread “main” java.lang.ArithmeticException: / by zero at Test.main(Test.java:5)

3) 문자열의 연산

문자열 덧셈

문자열간에는 덧셈만 가능하고, 모든 내용을 연결하는 결과를 반환한다.

1
2
3
String a = "Hello";
String b = "World";
System.out.println(a + b);       // HelloWorld (띄어쓰기 없음)

공백을 포함한 연산

공백 문자열(띄어쓰기)도 하나의 글자로 취급된다.

1
2
3
4
String a = "Hello";
String b = "World";
String c = " ";                 // 띄어쓰기 한 칸
System.out.println(a + c + b);  // Hello World (띄어쓰기 있음)

빈 문자열

아무런 글자도 포함하지 않는 문자열. 쌍따옴표를 열고 즉시 닫는다.

ex) 로그인 시에 아무런 값이 입력하지 않고 버튼을 누르면 사용자의 입력값은 빈 문자열로 취급된다.

1
2
String a = ""; // 아무런 내용도 포함하지 않음
System.out.println(a);   // 출력되는 내용 없이 줄바꿈만 수행함.

문자열과 다른 데이터 타입간의 덧셈

문자열과 연산되는 모든 변수값은 문자열로 변환되어 처리된다.

그 결과 문자열간의 연산으로 취급되어 단순히 연결된 결과값을 반환한다.

1
2
3
4
5
int number = 100;
String message = "HelloJava";

// "HelloJava" + 100 --> "HelloJava" + "100"으로 처리됨
System.out.println(message + number); // HelloJava100

예제

MyAge.java

정수형 변수 yy에 현재 년도값을 할당하세요.

정수형 변수 born에 자신이 태어난 년도를 대입하고 이를 활용하여 자신의 나이 myAge를 계산하여 출력하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * @filename    : MyAge.java
 * @description : 태어난 년도를 활용하여 나이 계산하기
 * @author      : 이 광 호 (leekh4232@gmail.com)
 */
public class MyAge {
    public static void main(String[] args) {
        int yy = 2019;
        int born = 2000;

        // 우리나라는 태어난 시점을 1세로 하기 때문에 1을 더해야 한다.
        int myAge = yy - born + 1;

        // 출력 결과를 문장으로 구성하기 위해 덧셈 연산 수행
        System.out.println("나는 " + myAge + "세 입니다.");
    }
}
출력결과
1
나는 20세 입니다.

MyYear.java

정수형 변수 myAge에 자신의 나이를 할당하고 정수형 변수 yy에는 현재 년도값을 대입하세요.

myAge와 yy값을 활용하여 자신의 나이를 계산하고 이 결과값을 정수형 변수 born에 할당한 후 출력하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * @filename    : MyYear.java
 * @description : 나이를 활용하여 태어난 년도 계산하기
 * @author      : 이 광 호 (leekh4232@gmail.com)
 */
public class MyYear {
    public static void main(String[] args) {
        int myAge = 20;
        int yy = 2019;

        // 나이를 계산할 때 1이 증가된 상태이므로,
        // 현재 년도에서 나이를 빼면 원래 빼야 하는 값에서 1을 더 빼는 샘이 된다.
        // 그러므로 그 차이를 보정하기 위해 1을 추가로 더해야 한다.
        int born = yy - myAge + 1;

        // 출력 결과를 문장으로 구성하기 위해 덧셈 연산 수행
        System.out.println("나는 " + born + "년도에 태어났습니다.");
    }
}
출력결과

현재가 2019년이고 나이가 20세인 경우.

1
나는 2000년도에 태어났습니다.

MyAgeRange.java

정수형 변수 myAge에 자신의 나이를 할당하고 적절한 연산을 수행한 후 자신의 연령층을 출력하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * @filename    : MyAgeRange.java
 * @description : 나이를 활용하여 태어난 년도 계산하기
 * @author      : 이 광 호 (leekh4232@gmail.com)
 */
public class MyAgeRange {
    public static void main(String[] args) {
        int myAge = 27;
        int range = 27 / 10 * 10;

        // 출력 결과를 문장으로 구성하기 위해 덧셈 연산 수행
        System.out.println("나는 " + range + "대 입니다.");
    }
}
출력결과

나이가 27세인 경우.

1
나는 20대 입니다.

#03. 단항연산자

1) 단항연산자의 이해

어떤 변수가 연산 결과를 다시 자기 스스로에게 덮어 씌우는 경우

1
2
3
int x = 1;
x = x + 2;
System.out.println(x);
출력결과

3

위의 연산식을 축약해서 표현한 형태가 단항연산자

1
2
int x = 1;
x += 2;    // x 스스로 2 증가한다고 이해.
출력결과
1
3

2) 단항연산자의 종류

모든 사칙연산자는 단항연산자로 표현 가능하다.

덧셈

1
2
3
int a = 1;
a += 10;
System.out.println(a);
출력결과
1
11

뺄셈

1
2
3
int b = 10;
b -= 5;
System.out.println(b);
출력결과
1
5

곱셈

1
2
3
int c = 5;
c *= 2;
System.out.println(c);
출력결과
1
10

나눗셈 (몫)

1
2
3
int d = 100;
d /= 2;
System.out.println(d);
출력결과
1
50

나눗셈 (나머지)

1
2
3
int e = 5;
e %= 2;
System.out.println(e);
출력결과
1
1

#04. 증감연산자

1) 1에 대한 단항 연산의 또 한번의 축약

어떤 변수에 단항 연산으로 표현되어 계산되는 값이 1인 경우 덧셈과 뺄셈에 한해 다시 한번 축약이 가능하다.

덧셈에 대한 연산식 변화

사칙연산자 표현
1
2
int k = 100;
k = k + 1;
단항연산자 표현
1
2
int k = 100;
k += 1;
증감연산자 표현
1
2
int k = 100;
k++;  // k 스스로 1증가

혹은

1
2
int k = 100;
++k;  // k 스스로 1증가

뺄셈에 대한 연산식 변화

사칙연산자 표현
1
2
int k = 100;
k = k - 1;
단항연산자 표현
1
2
int k = 100;
k -= 1;
증감연산자 표현
1
2
int k = 100;
k--;  // k 스스로 1증가

혹은

1
2
int k = 100;
--k;  // k 스스로 1증가

2) 증감연산자의 위치에 따른 차이

증감연산자를 적용한 변수가 단독으로 사용된 경우는 위치에 따른 차이가 없지만 다른 수식에 포함된 경우는 위치에 따라 결과가 달라진다.

전위 증감연산자

++, --가 변수 앞에 적용된 경우.

증감연산자가 적용된 변수를 먼저 계산하고 전체 수식을 계산한다. (앞북)

1
2
3
4
int x = 1;
int y = 100 + ++x;  // x가 먼저 1증가하고 100을 더해 y를 확정한다.
System.out.println("x=" + x);
System.out.println("y=" + y);
출력결과
1
2
x=2
y=102

후위 증감연산자

++, --가 변수 뒤에 적용된 경우.

증감연산자가 적용되기 전 상태에서 전체 수식을 계산하여 결과값을 확정한 후 증감연산이 수행된다. (뒷북)

1
2
3
4
int x = 1;
int y = 100 + x++;  // 100+x가 먼저 수행되어 y를 101로 확정한 뒤 x가 1증가한다.
System.out.println("x=" + x);
System.out.println("y=" + y);
출력결과
1
2
x=2
y=101

#05. 비교연산자

1) 비교연산자의 종류

수학에서의 부등식에서 사용되는 연산자

연산자 의미
== 같다
!= 다르다
< 작다(미만)
<= 작거나 같다(이하)
> 크다(초과)
>= 크거나 같다(이상)

2) 비교연산자의 결과값

비교연산자는 전체 수식이 성립되는지 아닌지를 판단한다.

그러므로 결과값은 참(true) 혹은 거짓(false)로 형성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int x = 1;
int y = 2;

// 결과값을 다른 변수에 저장 후 출력하는 경우
boolean a = x == y;
boolean b = x != y;
System.out.println(a);
System.out.println(b);

// 직접 출력하는 경우
System.out.println(x < y);
System.out.println(x <= y);
System.out.println(x > y);
System.out.println(x >= y);
출력결과
1
2
3
4
5
6
false
true
true
true
false
false

#06. 논리연산자

이나 거짓을 판별할 수 있는 변수나 수식끼리 AND(&&)OR(||) 연산을 수행하여 논리값 형태의 결과를 만들어 내는 식

중,고등학교 수학 과정에서의 명제 단원

1) AND 연산

AND 연산은 모든 값이 true 인 경우만 결과값이 true이고 그 외의 경우는 모두 false를 반환한다.

1
2
3
4
boolean a = true && true;       // true
boolean b = true && false;      // false
boolean c = false && true;      // false
boolean d = false && false;     // false

2) OR 연산

OR 연산은 하나라도 true 라면 결과값이 true이고 그 외의 경우는 false를 반환한다.

1
2
3
4
boolean a = true || true;       // true
boolean b = true || false;      // true
boolean c = false || true;      // true
boolean d = false || false;     // false

3) 비교식과의 연계

비교 연산자도 결과값이 true, false로 반환되므로 비교식들끼리 논리연산을 수행할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
int x = 10;
int y = 20;
int z = 30;

boolean a = x < y && y > z;     // true && false --> false
boolean b = x >= y && x < z;    // false && true --> false
boolean c = z > y && z > x;     // true && true --> true

boolean d = x < y || y > z;     // true || false --> true
boolean e = x >= y || x < z;    // false || true --> true
boolean f = z > y || z > x;     // true || true --> true

4) NOT 연산

느낌표(!)를 논리값이나 논리값을 저장하고 있는 변수 앞에 적용하여 반대의 결과값을 반환한다.

1
2
3
4
5
boolean a = !true;      // false
boolean b = !false;     // true;
boolean c = !a;         // true;
boolean d = !b;         // false;
boolean e = !!true;     // true의 반대의 반대값 --> true;

#07. 삼항연산자

?:을 사용하여 주어진 식이 참인 경우와 그렇지 않은 경우로 나누어 선택적으로 결과값을 반환한다.

조건식 ? 참인경우 : 거짓인경우

1
2
3
int a = 10;
int b = 5;
int c = a > b ? 1 : 2;  // a > b가 참이므로 c에 1이 대입된다.
1
2
3
boolean k = true;
int r = k ? 100 : 0;    // k는 그 자체가 참을 의미하므로 r에는 100이 대입된다.
int s = !k ? 100 : 0;   // !k는 false이므로 s에는 0이 대입된다.
1
2
3
int x = 10;
int y = 20;
int z = x > y ? x + y : x - y;  // x > y가 거짓이므로 z에는 x - y의 결과값이 대입된다.

#08. 연산자 우선순위

순위 연산자 설명
1 () 괄호
2 !, ++, -- 부정, 증감연산자
3 *, /, % 곱셈, 나눗셈
4 +, - 덧셈, 뺄셈
5 <, <=, >, >= 크기를 비교하기 위한 비교연산자
6 ==, != 같음을 비교하는 비교연산자
7 && AND를 위한 논리연산자
8 || OR를 위한 논리연산자
9 =, +=, -=, *=, /=, %= 대입, 단항 연산자

예제

BasketCount.java

아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다.

하나의 바구니에는 10개의 사과를 담을 수 있다고 한다.

만일 사과의 수가 123개라면 13개의 바구니가 필요할 것이고 사과의 수가 120개라면 12개의 바구니가 필요할 것이다.

(1)에 알맞은 코드를 넣으시오.

1
2
3
4
5
6
7
8
9
10
11
12
public class BasketCount {
    public static void main(String[] args) {
        // 사과의 개수
        int numOfApples = 123;
        // 바구니의 크기 (바구니에 담을 수 있는 사과의 개수)
        int sizeOfBucket = 10;
        // 모든 사과를 담는데 필요한 바구니의 수
        int numOfBucket = /** (1) **/;
        // 결과출력
        System.out.println("필요한 바구니의 수 : " + numOfBucket );
    }
}
출력결과

numOfApples가 123인 경우

1
필요한 바구니의 수 : 13

numOfApples가 120인 경우

1
필요한 바구니의 수 : 12
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * @filename    : BasketCount.java
 * @description : 연산자 예제
 * @author      : 이 광 호 (leekh4232@gmail.com)
 */
public class BasketCount {
    public static void main(String[] args) {
        // 사과의 개수
        int numOfApples = 123;
        // 바구니의 크기 (바구니에 담을 수 있는 사과의 개수)
        int sizeOfBucket = 10;
        // 모든 사과를 담는데 필요한 바구니의 수
        // --> 10으로 나누어 떨어지는 경우 (나머지가 0) 는 10으로 나눈 몫만 취함.
        // --> 그렇지 않은 경우는 10으로 나눈 몫에 1을 더해야 한다.
        int numOfBucket = numOfApples % 10 == 0 ? numOfApples / 10 : numOfApples / 10 + 1;

        // 아래의 표현 방법도 가능함.
        // int numOfBucket = numOfApples % 10 != 0 ? numOfApples / 10 + 1 : numOfApples / 10;
        // 결과출력
        System.out.println("필요한 바구니의 수 : " + numOfBucket );
    }
}

MyPrint.java

아래는 변수 num의 값에 따라 ‘양수’, ‘음수’, ‘0’을 출력하는 코드이다.

삼항 연산자를 이용해서 (1),(2)에 공통적으로 들어갈 알맞은 코드를 넣으시오.

1
2
3
4
5
6
7
8
9
public class MyPrint {
    public static void main(String[] args) {
        int num = 10;
        System.out.println( /* 1 */ );

        num = -9;
        System.out.println( /* 2 */ );
    }
}
출력결과
1
2
양수
음수
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * @filename    : MyPrint.java
 * @description : 연산자 예제
 * @author      : 이 광 호 (leekh4232@gmail.com)
 */
public class MyPrint {
    public static void main(String[] args) {
        int num = 10;
        System.out.println( num > 0 ? "양수" : num < 0 ? "음수" : "0" );

        num = -9;
        // num == 0 ? "0" : (num > 0 ? "양수" : "음수")
        System.out.println( num > 0 ? "양수" : num < 0 ? "음수" : "0" );
    }
}

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 연산자≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus